注释后加空格

联网稍微推进
This commit is contained in:
MrZ_26
2022-10-03 02:43:51 +08:00
parent 06f4bb4e1a
commit f8d17b23b6
121 changed files with 1628 additions and 1622 deletions

View File

@@ -1,9 +1,9 @@
function love.conf(t)
t.identity='Techmino'--Saving folder
t.identity='Techmino'-- Saving folder
t.version="11.1"
t.gammacorrect=false
t.appendidentity=true--Search files in source then in save directory
t.accelerometerjoystick=false--Accelerometer=joystick on ios/android
t.appendidentity=true-- Search files in source then in save directory
t.accelerometerjoystick=false-- Accelerometer=joystick on ios/android
if t.audio then
t.audio.mic=false
t.audio.mixwithsystem=true
@@ -16,12 +16,12 @@ function love.conf(t)
W.borderless=false
W.resizable=true
W.fullscreen=false
W.vsync=0--Unlimited FPS
W.msaa=0--Multi-sampled antialiasing
W.depth=0--Bits/samp of depth buffer
W.stencil=1--Bits/samp of stencil buffer
W.display=1--Monitor ID
W.highdpi=true--High-dpi mode for the window on a Retina display
W.vsync=0-- Unlimited FPS
W.msaa=0-- Multi-sampled antialiasing
W.depth=0-- Bits/samp of depth buffer
W.stencil=1-- Bits/samp of stencil buffer
W.display=1-- Monitor ID
W.highdpi=true-- High-dpi mode for the window on a Retina display
W.x,W.y=nil
local M=t.modules

View File

@@ -15,24 +15,24 @@
]]--
--Var leak check
-- Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v) print('>>'..k..string.rep(" ",26-#k),debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v) end})
--System Global Vars Declaration
-- System Global Vars Declaration
local fs=love.filesystem
VERSION=require"version"
TIME=love.timer.getTime
SYSTEM=love.system.getOS() if SYSTEM=='OS X' then SYSTEM='macOS' end
FNNS=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
FNNS=SYSTEM:find'\79\83'-- What does FNSF stand for? IDK so don't ask me lol
MOBILE=SYSTEM=='Android' or SYSTEM=='iOS'
--Global Vars & Settings
-- Global Vars & Settings
SFXPACKS={'chiptune'}
VOCPACKS={'miya','mono','xiaoya','miku'}
FIRSTLAUNCH=false
DAILYLAUNCH=false
--System setting
-- System setting
math.randomseed(os.time()*626)
love.setDeprecationOutput(false)
love.keyboard.setKeyRepeat(true)
@@ -46,7 +46,7 @@ end
local _LOADTIMELIST_={}
local _LOADTIME_=TIME()
--Load modules
-- Load modules
Z=require'Zframework'
FONT.load{
norm='parts/fonts/proportional.otf',
@@ -55,7 +55,7 @@ FONT.load{
FONT.setDefault('norm')
FONT.setFallback('norm')
SCR.setSize(1280,720)--Initialize Screen size
SCR.setSize(1280,720)-- Initialize Screen size
BGM.setMaxSources(5)
VOC.setDiversion(.62)
@@ -74,7 +74,7 @@ end)
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
--Create shortcuts
-- Create shortcuts
setFont=FONT.set
getFont=FONT.get
mText=GC.simpX
@@ -84,10 +84,10 @@ string.repD=STRING.repD
string.sArg=STRING.sArg
string.split=STRING.split
--Delete all naked files (from ancient versions)
-- Delete all naked files (from ancient versions)
FILE.clear('')
--Create directories
-- Create directories
for _,v in next,{'conf','record','replay','cache','lib'} do
local info=fs.getInfo(v)
if not info then
@@ -102,7 +102,7 @@ CHAR=require'parts.char'
require'parts.gameTables'
require'parts.gameFuncs'
--Load shader files from SOURCE ONLY
-- Load shader files from SOURCE ONLY
SHADER={}
for _,v in next,fs.getDirectoryItems('parts/shaders') do
if FILE.isSafe('parts/shaders/'..v) then
@@ -134,8 +134,8 @@ end})
table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_))
--Init Zframework
do--Z.setCursor
-- Init Zframework
do-- Z.setCursor
local normImg=GC.DO{16,16,
{'fCirc',8,8,4},
{'setCL',1,1,1,.7},
@@ -190,7 +190,7 @@ Z.setDebugInfo{
{"Voices",VOC.getQueueCount},
{"Audios",love.audio.getSourceCount},
}
do--Z.setOnFocus
do-- Z.setOnFocus
local function task_autoSoundOff()
while true do
coroutine.yield()
@@ -230,7 +230,7 @@ do--Z.setOnFocus
end
Z.setOnQuit(destroyPlayers)
--Load settings and statistics
-- Load settings and statistics
if
not (
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip') or loadFile('conf/user', '-luaon -canSkip') or{},USER) and
@@ -244,7 +244,7 @@ then
MES.new('error',"An error occured during loading, and some data was lost.")
end
--Initialize fields, sequence, missions, gameEnv for cutsom game
-- Initialize fields, sequence, missions, gameEnv for cutsom game
local fieldData=loadFile('conf/customBoards','-string -canSkip')
if fieldData then
fieldData=STRING.split(fieldData,"!")
@@ -269,7 +269,7 @@ end
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
--Initialize image libs
-- Initialize image libs
IMG.init{
lock='media/image/mess/lock.png',
dialCircle='media/image/mess/dialCircle.png',
@@ -348,7 +348,7 @@ SKIN.load{
{name="wtf",path='media/image/skin/wtf_mrz.png'},
}
--Initialize sound libs
-- Initialize sound libs
SFX.init((function()--[Warning] Not loading files here, just get the list of sound needed
local L={}
for _,v in next,fs.getDirectoryItems('media/effect/chiptune/') do
@@ -377,7 +377,7 @@ VOC.init{
'welcome',
}
--Initialize language lib
-- Initialize language lib
LANG.init('zh',
{
zh=require'parts.language.lang_zh',
@@ -390,9 +390,9 @@ LANG.init('zh',
ja=require'parts.language.lang_ja',
symbol=require'parts.language.lang_symbol',
zh_code=require'parts.language.lang_zh_code',
--1. Add language file to LANG folder;
--2. Require it;
--3. Add a button in parts/scenes/lang.lua;
-- 1. Add language file to LANG folder;
-- 2. Require it;
-- 3. Add a button in parts/scenes/lang.lua;
},
{
block=BLOCK_NAMES
@@ -414,7 +414,7 @@ LANG.init('zh',
table.insert(_LOADTIMELIST_,("Initialize Parts: %.3fs"):format(TIME()-_LOADTIME_))
--Load background files from SOURCE ONLY
-- Load background files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
if FILE.isSafe('parts/backgrounds/'..v) and v:sub(-3)=='lua' then
local name=v:sub(1,-5)
@@ -422,7 +422,7 @@ for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
end
end
BG.remList('none')BG.remList('gray')BG.remList('custom')
--Load scene files from SOURCE ONLY
-- Load scene files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/scenes') do
if FILE.isSafe('parts/scenes/'..v) then
local sceneName=v:sub(1,-5)
@@ -430,9 +430,9 @@ for _,v in next,fs.getDirectoryItems('parts/scenes') do
LANG.addScene(sceneName)
end
end
--Load mode files
-- Load mode files
for i=1,#MODES do
local m=MODES[i]--Mode template
local m=MODES[i]-- Mode template
if FILE.isSafe('parts/modes/'..m.name) then
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
MODES[m.name],MODES[i]=MODES[i]
@@ -451,7 +451,7 @@ end
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
--Update data
-- Update data
do
local needSave
@@ -603,7 +603,7 @@ do
end
end
--First start
-- First start
FIRSTLAUNCH=STAT.run==0
if FIRSTLAUNCH and MOBILE then
SETTING.VKSwitch=true
@@ -611,10 +611,10 @@ if FIRSTLAUNCH and MOBILE then
SETTING.cleanCanvas=true
end
--Apply system setting
-- Apply system setting
applySettings()
--Load replays
-- Load replays
for _,fileName in next,fs.getDirectoryItems('replay') do
if fileName:sub(12,12):match("[a-zA-Z]") then
local date,mode,version,player,seed,setting,mod
@@ -664,8 +664,8 @@ table.insert(_LOADTIMELIST_,("Initialize Data: %.3fs"):format(TIME()-_LOADTIME_)
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end
--Launch testing task if launch param received
if TABLE.find(arg,'--test') then
-- Launch testing task if launch param received
if TABLE.find(arg,'-- test') then
TASK.new(function()
while not LOADED do coroutine.yield() end

View File

@@ -1,43 +1,43 @@
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}},--J
{[0]={0,1},{1,0},{1,1},{1,1}},--L
{[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
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}},-- J
{[0]={0,1},{1,0},{1,1},{1,1}},-- L
{[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
-- 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
-- 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
-- Domino
{[0]={-.5,.5},{.5,-.5},{.5,.5},{.5,.5}},-- I2
--Dot
{[0]={0,0},{0,0},{0,0},{0,0}},--O1
-- Dot
{[0]={0,0},{0,0},{0,0},{0,0}},-- O1
}
local noKickSet,noKickSet_180 do
@@ -52,14 +52,14 @@ local function _strToVec(list)
return list
end
--Use this if the block is centrosymmetry, *PTR!!!
-- 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
-- Use this to copy a symmetry set
local function _flipList(O)
if not O then
return
@@ -91,21 +91,21 @@ 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,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high)
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I(low)
{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)}
{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,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},-- I(high)
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},-- I(low)
{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}},
@@ -137,8 +137,8 @@ do
[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
},-- Z
false,-- S
{
[01]={'+0+0','-1+0','-1+1','+0-2','+1+1','+0+1','+0-1'},
[10]={'+0+0','+1+0','+1-1','+0+2','-1-1','+0-1','+0+1'},
@@ -152,8 +152,8 @@ do
[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
},-- 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','+0-1'},
@@ -167,7 +167,7 @@ do
[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
},-- T
function(P,d)
if P.gameEnv.easyFresh then
P:freshBlock('fresh')
@@ -220,7 +220,7 @@ do
SFX.play('rotate',nil,P:getCenterX()*.15)
end
end
end,--O
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'},
@@ -234,14 +234,14 @@ do
[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
},-- 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+1','+0-2','+0+2','+0+3','+1+2'},
[30]={'+0+0','-1+0','+0-1','+0+1','+0-2','+0-3','+0+2','+0+3','-1-2'},
},--Z5
false,--S5
},-- 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'},
@@ -255,8 +255,8 @@ do
[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
},-- 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'},
@@ -270,8 +270,8 @@ do
[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
},-- 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'},
@@ -285,7 +285,7 @@ do
[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
},-- T5
{
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
@@ -299,7 +299,7 @@ do
[20]={'+0+0','+0-1'},
[13]={'+0+0','+0-1','+0+1','+1+0'},
[31]={'+0+0','+0-1','+0+1','-1+0'},
},--U
},-- U
{
[01]={'+0+0','+0+1','-1+0','+0-2','-1-2'},
[10]={'+0+0','+0+1','+1+0','+0-2','+1-2'},
@@ -313,7 +313,7 @@ do
[20]={'+0+0','+1-1','-1+1'},
[13]={'+0+0','+1+1','-1-1'},
[31]={'+0+0','-1-1','+1+1'},
},--V
},-- 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'},
@@ -327,7 +327,7 @@ do
[20]={'+0+0','+0+1','+1+0'},
[13]={'+0+0','+0+1','-1+0'},
[31]={'+0+0','+0-1','+1+0'},
},--W
},-- W
function(P,d)
if P.type=='human' then
SFX.play('rotate',nil,P:getCenterX()*.15)
@@ -344,7 +344,7 @@ do
end
end
P:freshBlock('fresh')
end,--X
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'},
@@ -358,8 +358,8 @@ do
[20]={'+0+0','+0+1','+1+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
},-- J5
false,-- L5
{
[01]={'+0+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-2','+1+1','+0+3','+0+1'},
@@ -373,8 +373,8 @@ do
[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
},-- R
false,-- Y
{
[01]={'+0+0','-1+0','-1+1','+0+1','+1+0','+1+1','-1+2','-2+0','+0-2'},
[10]={'+0+0','+1+0','-1+0','+0-1','-1-1','+1-1','+1-2','+2+0','+0+2'},
@@ -388,20 +388,20 @@ do
[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
},-- 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
},-- 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
},-- I3
{
[01]={'+0+0','-1+0','+1+0'},
[10]={'+0+0','+1+0','-1+0'},
@@ -415,7 +415,7 @@ do
[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
},-- C
{
[01]={'+0+0','-1+0','+0+1'},
[10]={'+0+0','+1+0','+0+1'},
@@ -429,22 +429,22 @@ do
[20]={'+0+0','+0+1','+0-1'},
[13]={'+0+0','-1+0','+1+0'},
[31]={'+0+0','+1+0','-1+0'},
},--I2
nil,--O1
},-- 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
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
@@ -469,12 +469,12 @@ do
[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'},[20]={'+0+0'},[13]={'+0+0'},[31]={'+0+0'},
},--Z
false,--S
false,--J
false,--L
false,--T
noKickSet,--O
},-- 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'},
@@ -485,7 +485,7 @@ do
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
[02]={'+0+0'},[20]={'+0+0'},[13]={'+0+0'},[31]={'+0+0'},
}--I
}-- I
}
}
for i=2,5 do SRS.kickTable[i]=SRS.kickTable[1] end
@@ -519,12 +519,12 @@ do
[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'},
},--Z
false,--S
false,--J
false,--L
false,--T
noKickSet,--O
},-- 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'},
@@ -538,7 +538,7 @@ do
[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
}-- I
}
}
for i=2,5 do SRS_plus.kickTable[i]=SRS_plus.kickTable[1] end
@@ -570,19 +570,19 @@ do
[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'},
},--Z
false,--S
false,--J
false,--L
false,--T
noKickSet,--O
false,--I
},-- Z
false,-- S
false,-- J
false,-- L
false,-- T
noKickSet,-- O
false,-- I
}
}
for i=2,5 do SRS_X.kickTable[i]=SRS_X.kickTable[1] end
for i=7,29 do SRS_X.kickTable[i]=TRS.kickTable[i] end
SRS_X.kickTable[10]=SRS_X.kickTable[1]--P
SRS_X.kickTable[11]=SRS_X.kickTable[1]--Q
SRS_X.kickTable[10]=SRS_X.kickTable[1]-- P
SRS_X.kickTable[11]=SRS_X.kickTable[1]-- Q
end
local BiRS
@@ -591,37 +591,37 @@ do
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]=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]=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
{[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
@@ -700,7 +700,7 @@ do
end
end
--Try release left/right, then softdrop, failed to rotate otherwise
-- Try release left/right, then softdrop, failed to rotate otherwise
if dx~=0 then
dx=0
elseif dy~=0 then
@@ -728,24 +728,24 @@ do
[02]=upOnly,[20]=upOnly,[13]=upOnly,[31]=upOnly,
}
local centerPos=TABLE.copy(defaultCenterPos)
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}--Z
centerPos[2]={[0]={1,1},{1,1},{1,1},{1,1}}--S
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}--L
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}--J
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}--T
centerPos[7]={[0]={0,2},{2,0},{0,2},{2,0}}--I
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}--P
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}--Q
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}--U
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}--V
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--J5
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--L5
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--R
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--Y
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--N
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--H
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}--I3
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}--I2
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}-- Z
centerPos[2]={[0]={1,1},{1,1},{1,1},{1,1}}-- S
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}-- L
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}-- J
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}-- T
centerPos[7]={[0]={0,2},{2,0},{0,2},{2,0}}-- I
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}-- P
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}-- Q
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}-- U
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}-- V
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- J5
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- L5
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- R
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- Y
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- N
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- H
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}-- I3
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}-- I2
ARS_Z={
centerTex=GC.DO{10,10,
@@ -765,24 +765,24 @@ end
local DRS_weak
do
local centerPos=TABLE.copy(defaultCenterPos)
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,1}}--Z
centerPos[2]={[0]={1,1},{1,0},{1,1},{1,1}}--S
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}--L
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}--J
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}--T
centerPos[7]={[0]={.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}}--I
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}--P
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}--Q
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}--U
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}--V
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--J5
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--L5
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--R
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--Y
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--N
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}--H
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}--I3
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}--I2
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,1}}-- Z
centerPos[2]={[0]={1,1},{1,0},{1,1},{1,1}}-- S
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}-- L
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}-- J
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}-- T
centerPos[7]={[0]={.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}}-- I
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}-- P
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}-- Q
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}-- U
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}-- V
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- J5
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- L5
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- R
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- Y
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- N
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- H
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}-- I3
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}-- I2
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1'}
local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1'}
@@ -802,24 +802,24 @@ do
},
centerPos=centerPos,
kickTable={
Z,S,--Z,S
Z,S,--J,L
Z,--T
noKickSet,--O
Z,--I
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,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
Z,Z,-- I3,C
Z,Z,-- I2,O1
}
}
end
@@ -916,24 +916,24 @@ do
{'fRect',3,3,4,4},
},
kickTable={
Z,S,--Z,S
Z,S,--J,L
Z,--T
noKickSet,--O
Z,--I
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,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
Z,Z,-- I3,C
Z,Z,-- I2,O1
}
}
end
@@ -1013,7 +1013,7 @@ for _,rs in next,RSlist do
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
-- 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

View File

@@ -1,4 +1,4 @@
--Cool liquid background
-- Cool liquid background
local back={}
local shader=SHADER.aura
local t

View File

@@ -1,4 +1,4 @@
--Horizonal red-blue gradient
-- Horizonal red-blue gradient
local back={}
local shader=SHADER.grad1

View File

@@ -1,4 +1,4 @@
--Vertical red-green gradient
-- Vertical red-green gradient
local back={}
local shader=SHADER.grad2

View File

@@ -1,4 +1,4 @@
--Large falling tetrominoes
-- Large falling tetrominoes
local gc=love.graphics
local gc_clear=gc.clear
local gc_setColor,gc_draw=gc.setColor,gc.draw

View File

@@ -1,4 +1,4 @@
--blockhole
-- blockhole
local gc=love.graphics
local gc_clear,gc_replaceTransform=gc.clear,gc.replaceTransform
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
@@ -44,14 +44,14 @@ function back.draw()
gc_clear(.1,.1,.1)
gc_replaceTransform(SCR.xOy_m)
--Squares
-- Squares
gc_setColor(1,1,1,.2)
for i=1,#squares do
local S=squares[i]
gc_draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
end
--blockhole
-- blockhole
gc_setColor(.07,.07,.07)
gc_circle('fill',0,0,157)
gc_setLineWidth(6)

View File

@@ -1,4 +1,4 @@
--Block rain
-- Block rain
local gc=love.graphics
local rnd=math.random
local ins,rem=table.insert,table.remove

View File

@@ -1,4 +1,4 @@
--Space but tetrominoes
-- Space but tetrominoes
local gc=love.graphics
local gc_clear,gc_translate=gc.clear,gc.translate
local gc_setColor,gc_draw=gc.setColor,gc.draw

View File

@@ -1,4 +1,4 @@
--Flying cubes
-- Flying cubes
local gc=love.graphics
local gc_clear=gc.clear
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth

View File

@@ -1,4 +1,4 @@
--Custom background
-- Custom background
local gc_clear,gc_setColor=love.graphics.clear,love.graphics.setColor
local back={}

View File

@@ -1,4 +1,4 @@
--Yuyuko's fan
-- Yuyuko's fan
local gc=love.graphics
local gc_clear,gc_origin,gc_replaceTransform=gc.clear,gc.origin,gc.replaceTransform
local gc_translate=gc.translate

View File

@@ -1,4 +1,4 @@
--Firework
-- Firework
local gc=love.graphics
local gc_clear=gc.clear
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth

View File

@@ -1,4 +1,4 @@
--Customizable grey background
-- Customizable grey background
local back={}
local r,g,b=.26,.26,.26
function back.draw()

View File

@@ -1,4 +1,4 @@
--Flash after random time
-- Flash after random time
local back={}
local t

View File

@@ -1,4 +1,4 @@
--Light-dark
-- Light-dark
local sin=math.sin
local back={}

View File

@@ -1,4 +1,4 @@
--A lantern background which is full of festive atmosphere. Lantern image by ScF
-- A lantern background which is full of festive atmosphere. Lantern image by ScF
local int,rnd=math.floor,math.random
local ins,rem=table.insert,table.remove
local mDraw=mDraw

View File

@@ -1,4 +1,4 @@
--Space with stars
-- Space with stars
local back={}
local upCover do

View File

@@ -1,4 +1,4 @@
--Lightning
-- Lightning
local back={}
local t

View File

@@ -1,4 +1,4 @@
--Fast lightning + spining tetromino
-- Fast lightning + spining tetromino
local int,rnd=math.floor,math.random
local back={}

View File

@@ -1,4 +1,4 @@
--Black-White grid
-- Black-White grid
local gc=love.graphics
local gc_clear,gc_scale=gc.clear,gc.scale
local gc_setColor=gc.setColor

View File

@@ -1,4 +1,4 @@
--Colorful RGB
-- Colorful RGB
local back={}
local shader=SHADER.rgb1

View File

@@ -1,4 +1,4 @@
--Blue RGB
-- Blue RGB
local back={}
local shader=SHADER.rgb2

View File

@@ -1,4 +1,4 @@
--Changing pure color
-- Changing pure color
local sin=math.sin
local back={}

View File

@@ -1,4 +1,4 @@
--Snow
-- Snow
local gc=love.graphics
local ellipse=gc.ellipse
local rnd=math.random

View File

@@ -1,4 +1,4 @@
--Space with stars
-- Space with stars
local gc=love.graphics
local rectangle=gc.rectangle
local rnd=math.random
@@ -15,16 +15,16 @@ function back.resize(w,h)
local S=stars
for i=1,1260,5 do
local s=rnd(26,40)*.1
S[i]=s*SCR.k --Size
S[i+1]=rnd(W)-10 --X
S[i+2]=rnd(H)-10 --Y
S[i+3]=(rnd()-.5)*.01*s--Vx
S[i+4]=(rnd()-.5)*.01*s--Vy
S[i]=s*SCR.k -- Size
S[i+1]=rnd(W)-10 -- X
S[i+2]=rnd(H)-10 -- Y
S[i+3]=(rnd()-.5)*.01*s-- Vx
S[i+4]=(rnd()-.5)*.01*s-- Vy
end
end
function back.update(dt)
local S=stars
--Star moving
-- Star moving
for i=1,1260,5 do
S[i+1]=(S[i+1]+S[i+3]*dt*60)%W
S[i+2]=(S[i+2]+S[i+4]*dt*60)%H

View File

@@ -1,4 +1,4 @@
--Cool Tunnel
-- Cool Tunnel
local rnd=math.random
local ins,rem=table.insert,table.remove
local back={}

View File

@@ -1,4 +1,4 @@
--Welcome to Techmino
-- Welcome to Techmino
local sin=math.sin
local back={}

View File

@@ -1,4 +1,4 @@
--Flandre's wing
-- Flandre's wing
local back={}
local crystal_img,crystals
local wingColor={

View File

@@ -74,7 +74,7 @@ local function _getScore(field,cb,cy)
clear=clear+1
::CONTINUE_notFull::
end
if #field==0 then--PC
if #field==0 then-- PC
return 1e99
end
for x=1,10 do
@@ -116,10 +116,10 @@ local function _getScore(field,cb,cy)
-#field*30
-#cb*15
+(#field>10 and
HclearScore[clear]--Clearing
-hole*70--Hole
-cy*50--Height
-sdh--Sum of DeltaH
HclearScore[clear]-- Clearing
-hole*70-- Hole
-cy*50-- Height
-sdh-- Sum of DeltaH
or
LclearScore[clear]
-hole*100
@@ -139,10 +139,10 @@ local bot_9s={}
function bot_9s.thread(bot)
local P,data,keys=bot.P,bot.data,bot.keys
while true do
--Thinking
-- Thinking
yield()
local Tfield={}--Test field
local best={x=1,dir=0,hold=false,score=-1e99}--Best method
local Tfield={}-- Test field
local best={x=1,dir=0,hold=false,score=-1e99}-- Best method
local field_org=P.field
for i=1,#field_org do
Tfield[i]=getRow(0)
@@ -152,7 +152,7 @@ function bot_9s.thread(bot)
end
for ifhold=0,data.hold and P.gameEnv.holdCount>0 and 1 or 0 do
--Get block id
-- Get block id
local bn
if ifhold==0 then
bn=P.cur and P.cur.id
@@ -160,17 +160,17 @@ function bot_9s.thread(bot)
bn=P.holdQueue[1] and P.holdQueue[1].id or P.nextQueue[1] and P.nextQueue[1].id
end
if bn then
for dir=0,dirCount[bn] do--Each dir
for dir=0,dirCount[bn] do-- Each dir
local cb=BLOCKS[bn][dir]
for cx=1,11-#cb[1] do--Each pos
for cx=1,11-#cb[1] do-- Each pos
local cy=#Tfield+1
--Move to bottom
-- Move to bottom
while cy>1 and not _ifoverlapAI(Tfield,cb,cx,cy-1) do
cy=cy-1
end
--Simulate lock
-- Simulate lock
for i=1,#cb do
local y=cy+i-1
if not Tfield[y] then
@@ -194,7 +194,7 @@ function bot_9s.thread(bot)
end
if not best.bn then return 1 end
--Release cache
-- Release cache
while #Tfield>0 do
discardRow(rem(Tfield,1))
end
@@ -207,7 +207,7 @@ function bot_9s.thread(bot)
end
ins(keys,6)
--Check if time to change target
-- Check if time to change target
yield()
if P.aiRND:random()<.00126 then
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)

View File

@@ -50,11 +50,11 @@ function bot_cc:thread()
local P,keys=self.P,self.keys
local ccBot=self.ccBot
while true do
--Start thinking
-- Start thinking
yield()
ccBot:think()
--Poll keys
-- Poll keys
local success,result,dest,hold,move,b2b,attack,extra,spawn
repeat
yield()
@@ -73,7 +73,7 @@ function bot_cc:thread()
dest.extra = extra
dest.spawn = spawn
P.destFX=dest
if hold then--Hold
if hold then-- Hold
keys[1]=8
end
while move[1] do
@@ -89,7 +89,7 @@ function bot_cc:thread()
ins(keys,6)
end
--Check if time to change target
-- Check if time to change target
yield()
if P.aiRND:random()<.00126 then
P:changeAtkMode(P.aiRND:random()<.85 and 1 or #P.atker>3 and 4 or P.aiRND:random()<.3 and 2 or 3)

View File

@@ -127,7 +127,7 @@ function BOT.new(P,data)
end
bot.runningThread=coroutine.wrap(cc_lua.thread)
bot.runningThread(bot)
else--if data.type=="9S" then--9s or else
else-- if data.type=="9S" then-- 9s or else
TABLE.cover(baseBot,bot)
TABLE.cover(require"parts.bot.bot_9s",bot)
P:setRS('TRS')

View File

@@ -1,5 +1,5 @@
local L={
zChan={--F0000~F003F
zChan={-- F0000~F003F
none= 0xF0000,
normal= 0xF0001,
full= 0xF0002,
@@ -24,7 +24,7 @@ local L={
thinking= 0xF0015,
spark= 0xF0016,
},
mino={--F0040~F007F
mino={-- F0040~F007F
Z=0xF0040,
S=0xF0041,
J=0xF0042,
@@ -57,7 +57,7 @@ local L={
I2=0xF005B,
O1=0xF005C,
},
icon={--F0080~F00FF
icon={-- F0080~F00FF
menu= 0xF0080,
music= 0xF0081,
language= 0xF0082,
@@ -131,7 +131,7 @@ local L={
garbage= 0xF00C6,
copy= 0xF00C7,
},
key={--F0100~F017F
key={-- F0100~F017F
macCmd= 0xF0100,
macOpt= 0xF0101,
macCtrl= 0xF0102,
@@ -172,7 +172,7 @@ local L={
macPgdnAlt= 0xF0125,
iecPower= 0xF0126,
},
controller={--F0180~F01FF
controller={-- F0180~F01FF
xbox= 0xF0180,
lt= 0xF0181,
rt= 0xF0182,
@@ -212,7 +212,7 @@ local L={
psCreate= 0xF01A4,
psOption= 0xF01A5,
},
mahjong={--F0200~F027F
mahjong={-- F0200~F027F
m1= 0xF0200,
m2= 0xF0201,
m3= 0xF0202,

View File

@@ -1,7 +1,7 @@
return{
version=VERSION.code,
--Basic
-- Basic
drop=1e99,
lock=1e99,
wait=0,
@@ -9,17 +9,17 @@ return{
hang=5,
hurry=1e99,
--Control
-- Control
nextCount=6,
holdMode='hold',
holdCount=1,
infHold=true,
phyHold=false,
--Visual
-- Visual
bone=false,
--Rule
-- Rule
sequence='bag',
lockout=false,
fieldH=20,
@@ -40,7 +40,7 @@ return{
garbageSpeed=1,
missionKill=false,
--Else
-- Else
bg='blockrain',
bgm='hang out',

View File

@@ -5,8 +5,8 @@ local ins=table.insert
local BAG,FIELD,MISSION,CUSTOMENV,GAME=BAG,FIELD,MISSION,CUSTOMENV,GAME
local DATA={}
--Sep symbol: 33 (!)
--Safe char: 34~126
-- Sep symbol: 33 (!)
-- Safe char: 34~126
--[[
Count: 34~96
Block: 97~125
@@ -66,14 +66,14 @@ local fieldMeta={__index=function(self,h)
end
return self[h]
end}
function DATA.newBoard(f)--Generate a new board
function DATA.newBoard(f)-- Generate a new board
return setmetatable(f and TABLE.shift(f) or{},fieldMeta)
end
function DATA.copyBoard(page)--Copy the [page] board
function DATA.copyBoard(page)-- Copy the [page] board
local F=FIELD[page or 1]
local str=""
--Encode field
-- Encode field
for y=1,#F do
local S=""
local L=F[y]
@@ -91,7 +91,7 @@ function DATA.copyBoards()
end
return table.concat(out,"!")
end
function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
function DATA.pasteBoard(str,page)-- Paste [str] data to [page] board
if not page then
page=1
end
@@ -100,16 +100,16 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
end
local F=FIELD[page]
--Decode
-- Decode
str=STRING.unpackBin(str)
if not str then return end
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
local fX,fY=1,1-- *ptr for Field(r*10+(c-1))
local p=1
while true do
local b=byte(str,p)--1byte
local b=byte(str,p)-- 1byte
--Str end
-- Str end
if not b then
if fX~=1 then
return
@@ -118,9 +118,9 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
end
end
local id=b%32-1--Block id
if id>26 then return end--Illegal blockid
b=int(b/32)--Mode id
local id=b%32-1-- Block id
if id>26 then return end-- Illegal blockid
b=int(b/32)-- Mode id
F[fY][fX]=id
if fX<10 then
@@ -254,13 +254,13 @@ function DATA.dumpRecording(list,ptr)
if not ptr then ptr=1 end
local prevFrm=list[ptr-2] or 0
while list[ptr] do
--Flush buffer
-- Flush buffer
if #buffer>10 then
out=out..buffer
buffer=""
end
--Encode time
-- Encode time
local t=list[ptr]-prevFrm
prevFrm=list[ptr]
if t>=128 then
@@ -275,7 +275,7 @@ function DATA.dumpRecording(list,ptr)
buffer=buffer..char(t)
end
--Encode event
-- Encode event
t=list[ptr+1]
if t>=128 then
buffer2=char(t%128)
@@ -289,7 +289,7 @@ function DATA.dumpRecording(list,ptr)
buffer=buffer..char(t)
end
--Step
-- Step
ptr=ptr+2
end
return out..buffer,ptr
@@ -301,7 +301,7 @@ function DATA.pumpRecording(str,L)
local curFrm=L[#L-1] or 0
local code
while p<=len do
--Read delta time
-- Read delta time
code=0
local b=byte(str,p)
while b>=128 do
@@ -324,7 +324,7 @@ function DATA.pumpRecording(str,L)
p=p+1
end
end
do--function DATA.saveReplay()
do-- function DATA.saveReplay()
local noRecList={"custom","solo","round","techmino"}
local function _getModList()
local res={}
@@ -336,7 +336,7 @@ do--function DATA.saveReplay()
return res
end
function DATA.saveReplay()
--Filtering modes that cannot be saved
-- Filtering modes that cannot be saved
for _,v in next,noRecList do
if GAME.curModeName:find(v) then
MES.new('error',"Cannot save recording of this mode now!")
@@ -344,7 +344,7 @@ do--function DATA.saveReplay()
end
end
--Write file
-- Write file
local fileName=os.date("replay/%Y_%m_%d_%H%M%S.rep")
if not love.filesystem.getInfo(fileName) then
love.filesystem.write(fileName,
@@ -371,7 +371,7 @@ do--function DATA.saveReplay()
end
function DATA.parseReplay(fileName,ifFull)
local fileData
--Read file
-- Read file
fileData=love.filesystem.read(fileName)
return DATA.parseReplayData(fileName,fileData,ifFull)
end
@@ -380,20 +380,20 @@ function DATA.parseReplayData(fileName,fileData,ifFull)
if not (fileData and #fileData>0) then goto BREAK_cannotParse end
--Decompress file
-- Decompress file
success,fileData=pcall(love.data.decompress,'string','zlib',fileData)
if not success then goto BREAK_cannotParse end
--Load metadata
-- Load metadata
metaData,fileData=STRING.readLine(fileData)
metaData=JSON.decode(metaData)
if not metaData then goto BREAK_cannotParse end
--Convert ancient replays
-- Convert ancient replays
metaData.mode=MODE_UPDATE_MAP[metaData.mode] or metaData.mode
if not MODES[metaData.mode] then goto BREAK_cannotParse end
--Create replay object
-- Create replay object
rep={
fileName=fileName,
available=true,
@@ -411,7 +411,7 @@ function DATA.parseReplayData(fileName,fileData,ifFull)
if ifFull then rep.data=fileData end
do return rep end
--Create unavailable replay object
-- Create unavailable replay object
::BREAK_cannotParse::
return{
fileName=fileName,

View File

@@ -15,11 +15,11 @@ return{
P:win('finish')
else
if D.wave<20 then
local t=1500-30*D.wave--1500~900
local t=1500-30*D.wave-- 1500~900
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3})
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(3,8)),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4})
else
local t=900-10*(D.wave-20)--900~600
local t=900-10*(D.wave-20)-- 900~600
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4})
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5})
end

View File

@@ -15,7 +15,7 @@ return{
P:win('finish')
else
local s
local t=800-10*D.wave--800~700~600~500
local t=800-10*D.wave-- 800~700~600~500
if D.wave<10 then
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(5,6)),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3})
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(4,7)),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4})

View File

@@ -62,9 +62,9 @@ return{
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
--if D.target>=200 then
-- if D.target>=200 then
D.lvl=D.lvl+1
--end
-- end
local dropSpd=GetGravity(D.lvl)
if dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd

View File

@@ -2,7 +2,7 @@ local dropSpeed={
50,42,35,30,25,20,16,13,11,10,
9,8,7,6,5,5,4,4,3,3,
3,2,2,2,2,1,1,1,1,1,
.5,.5,.5,.5,.25,.25,.25,.125,.125,--Total 39 numbers, switch to 20G when reach 400 lines
.5,.5,.5,.5,.25,.25,.25,.125,.125,-- Total 39 numbers, switch to 20G when reach 400 lines
}
local lockDelay={
57,54,51,48,46,44,42,40,38,36,
@@ -17,7 +17,7 @@ local lockDelay={
4,4,4,4,4,4,4,4,4,4,
3,3,3,3,3,3,3,3,3,3,
2,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,--Finish at 1700
1,1,1,1,1,1,1,1,1,-- Finish at 1700
}
return

View File

@@ -40,10 +40,10 @@ return{
PLY.draw.drawTargetLine(P,getRollGoal(P))
end,
hook_drop=function(P)
if P.modeData.rankPoint<140-passPoint then--If Less then X
if P.modeData.rankPoint<140-passPoint then-- If Less then X
local R=#P.clearedRow
if R>0 then
if R==4 then R=10 end--Techrash +10
if R==4 then R=10 end-- Techrash +10
P.modeData.rankPoint=math.min(P.modeData.rankPoint+R,140-passPoint)
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
end

View File

@@ -21,12 +21,12 @@ return{
if D.pt%100==99 then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
s=D.target/100--range from 1 to 9
elseif D.pt>=D.target then-- Level up!
s=D.target/100-- range from 1 to 9
local E=P.gameEnv
if s<4 then
P:stageComplete(s)
--First 300
-- First 300
if s~=1 then E.lock=E.lock-1 end
if s~=2 then E.wait=E.wait-1 end
if s~=3 then E.fall=E.fall-1 end

View File

@@ -18,8 +18,8 @@ local isInRoll=false
local rollGrades=0
local cool_time={3120,3120,2940,2700,2700,2520,2520,2280,2280,0}
local reg_time= {5400,4500,4500,4080,3600,3600,3000,3000,3000,3000}
local prevDrop70=false --determines if previous piece has level less than __70
local nextSpeedUp=false --determines if the next section speed should be boosted by 100
local prevDrop70=false -- determines if previous piece has level less than __70
local nextSpeedUp=false -- determines if the next section speed should be boosted by 100
local isInRollTrans=false
local function getGrav(l)
return
@@ -220,7 +220,7 @@ return{
if D.pt+1==D.target then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
elseif D.pt>=D.target then-- Level up!
spd_lvl=nextSpeedUp and spd_lvl+100 or spd_lvl
nextSpeedUp=false
prevDrop70=false
@@ -301,7 +301,7 @@ return{
end
if isInRollTrans then
if P.waiting>=220 then
--Make field invisible
-- Make field invisible
for y=1,#P.field do for x=1,10 do
P.visTime[y][x]=P.waiting-220
end end

View File

@@ -25,7 +25,7 @@ return{
if D.pt%100==99 then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
elseif D.pt>=D.target then-- Level up!
s=D.target/100
local E=P.gameEnv
E.lock=death_lock[s]

View File

@@ -40,7 +40,7 @@ return{
if D.pt%100==99 then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
elseif D.pt>=D.target then-- Level up!
s=D.target/100
local E=P.gameEnv
E.lock=inv_lock[s]

View File

@@ -25,7 +25,7 @@ return{
if D.pt%100==99 then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
elseif D.pt>=D.target then-- Level up!
s=D.target/100
local E=P.gameEnv
E.lock=rush_lock[s]

View File

@@ -18,8 +18,8 @@ return
if p>=P.modeData.target then
local ENV=P.gameEnv
local T=P.modeData.target
--Stage 1: clear 3 techrash
if T==12 then--Stage 2: swap color of S/Z & J/L
-- Stage 1: clear 3 techrash
if T==12 then-- Stage 2: swap color of S/Z & J/L
P:stageComplete(2)
P.waiting=30
P.curMission=false
@@ -34,9 +34,9 @@ return
P.modeData.target=26
SFX.play('reach')
elseif T==26 then--Stage 3: dig to bottom
elseif T==26 then-- Stage 3: dig to bottom
P:stageComplete(3)
if not P.holdQueue[1] then--1 up if ban hold
if not P.holdQueue[1] then-- 1 up if ban hold
P.life=P.life+1
end
P.waiting=45
@@ -79,7 +79,7 @@ return
P.modeData.target=42
SFX.play('reach')
elseif T==42 then--Stage 4: survive in high speed
elseif T==42 then-- Stage 4: survive in high speed
if P.garbageBeneath==0 then
P:stageComplete(4)
P.waiting=30
@@ -93,7 +93,7 @@ return
else
p=41
end
elseif T==62 then--Stage 5: survive without easy-fresh rule
elseif T==62 then-- Stage 5: survive without easy-fresh rule
P:stageComplete(5)
P.life=P.life+1
ENV.lock=13
@@ -104,7 +104,7 @@ return
P.modeData.target=126
SFX.play('reach')
elseif T==126 then--Stage 6: speed up
elseif T==126 then-- Stage 6: speed up
P:stageComplete(6)
P.life=P.life+1
@@ -114,7 +114,7 @@ return
P.modeData.target=162
SFX.play('reach')
elseif T==162 then--Stage 7: speed up+++
elseif T==162 then-- Stage 7: speed up+++
P:stageComplete(7)
P.life=P.life+1
@@ -125,7 +125,7 @@ return
P.modeData.target=226
SFX.play('reach')
elseif T==226 then--Stage 8: final invisible
elseif T==226 then-- Stage 8: final invisible
P:stageComplete(8)
P.life=P.life+1
@@ -134,7 +134,7 @@ return
P.modeData.target=259
SFX.play('reach')
elseif T==259 then--Stage 9: ending
elseif T==259 then-- Stage 9: ending
P:stageComplete(9)
P.life=P.life+1
for i=1,7 do ENV.skin[i]=P.holeRND:random(16) end

View File

@@ -50,5 +50,5 @@ return{
mText(TEXTOBJ.pc,63,330)
end,
hook_drop=_check,
task=_check,--Just run one time at first to start first level
task=_check,-- Just run one time at first to start first level
}

View File

@@ -43,5 +43,5 @@ return{
mText(TEXTOBJ.pc,63,330)
end,
hook_drop=_check,
task=_check,--Just run one time at first to start first level
task=_check,-- Just run one time at first to start first level
}

View File

@@ -6,7 +6,7 @@ end
local F={}
-- local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
-- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
-- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
local function getSmallNum(num)
local smalldigit={[0]="","","","","","","","","",""}

View File

@@ -14,8 +14,8 @@ local playSFX=SFX.play
--System
do--function tryBack()
-- System
do-- function tryBack()
local sureTime=-1e99
function tryBack()
if TIME()-sureTime<1 then
@@ -27,7 +27,7 @@ do--function tryBack()
end
end
end
do--function tryReset()
do-- function tryReset()
local sureTime=-1e99
function tryReset()
if TIME()-sureTime<1 then
@@ -39,7 +39,7 @@ do--function tryReset()
end
end
end
do--function tryDelete()
do-- function tryDelete()
local sureTime=-1e99
function tryDelete()
if TIME()-sureTime<1 then
@@ -51,7 +51,7 @@ do--function tryDelete()
end
end
end
do--function loadFile(name,args), function saveFile(data,name,args)
do-- function loadFile(name,args), function saveFile(data,name,args)
local t=setmetatable({},{__index=function() return"'$1' loading failed: $2" end})
function loadFile(name,args)
local text=text or t
@@ -102,7 +102,7 @@ end
function saveSettings()
return saveFile(SETTING,'conf/settings')
end
do--function applySettings()
do-- function applySettings()
local saturateValues={
normal={0,1},
soft={.2,.7},
@@ -111,7 +111,7 @@ do--function applySettings()
color={-.2,1.2},
}
function applySettings()
--Apply language
-- Apply language
text=LANG.get(SETTING.locale)
WIDGET.setLang(text.WidgetText)
for k,v in next,TEXTOBJ do
@@ -120,29 +120,29 @@ do--function applySettings()
end
end
--Apply cursor
-- Apply cursor
love.mouse.setVisible(SETTING.sysCursor)
--Apply fullscreen
-- Apply fullscreen
love.window.setFullscreen(SETTING.fullscreen)
love.resize(GC.getWidth(),GC.getHeight())
--Apply Zframework setting
-- Apply Zframework setting
Z.setClickFX(SETTING.clickFX)
Z.setFrameMul(SETTING.frameMul)
Z.setPowerInfo(SETTING.powerInfo)
Z.setCleanCanvas(SETTING.cleanCanvas)
--Apply VK shape
-- Apply VK shape
VK.setShape(SETTING.VKSkin)
--Apply sound
-- Apply sound
love.audio.setVolume(SETTING.mainVol)
BGM.setVol(SETTING.bgm)
SFX.setVol(SETTING.sfx)
VOC.setVol(SETTING.voc)
--Apply saturs
-- Apply saturs
local m
m=saturateValues[SETTING.blockSatur] or saturateValues.normal
SHADER.blockSatur:send('b',m[1])
@@ -151,7 +151,7 @@ do--function applySettings()
SHADER.fieldSatur:send('b',m[1])
SHADER.fieldSatur:send('k',m[2])
--Apply BG
-- Apply BG
if SETTING.bg=='on' then
BG.unlock()
BG.set()
@@ -171,7 +171,7 @@ do--function applySettings()
else
MES.new('error',text.customBGloadFailed)
end
else--Switch off when custom BG not found
else-- Switch off when custom BG not found
SETTING.bg='off'
BG.unlock()
BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
@@ -181,8 +181,8 @@ do--function applySettings()
end
end
--Royale mode
function randomTarget(P)--Return a random opponent for P
-- Royale mode
function randomTarget(P)-- Return a random opponent for P
if #PLY_ALIVE>1 then
local R
repeat
@@ -277,7 +277,7 @@ function royaleLevelup()
end
end
--Sound shortcuts
-- Sound shortcuts
function playClearSFX(cc)
if cc<=0 or cc%1~=0 then return end
if cc<=4 then
@@ -329,7 +329,7 @@ function playReadySFX(i,vol)
end
--Game
-- Game
function getItem(itemName,amount)
STAT.item[itemName]=STAT.item[itemName]+(amount or 1)
end
@@ -381,7 +381,7 @@ function freshDate(args)
return true
end
end
function legalGameTime()--Check if today's playtime is legal
function legalGameTime()-- Check if today's playtime is legal
if
SETTING.locale:find'zh' and
RANKS.sprint_10l<4 and
@@ -399,7 +399,7 @@ function legalGameTime()--Check if today's playtime is legal
end
return true
end
do--function trySettingWarn()
do-- function trySettingWarn()
local lastWarnTime=0
function trySettingWarn()
if TIME()-lastWarnTime>2.6 then
@@ -409,7 +409,7 @@ do--function trySettingWarn()
end
end
function mergeStat(stat,delta)--Merge delta stat. to global stat.
function mergeStat(stat,delta)-- Merge delta stat. to global stat.
for k,v in next,delta do
if type(v)=='table' then
if type(stat[k])=='table' then
@@ -422,7 +422,7 @@ function mergeStat(stat,delta)--Merge delta stat. to global stat.
end
end
end
function scoreValid()--Check if any unranked mods are activated
function scoreValid()-- Check if any unranked mods are activated
for _,M in next,GAME.mod do
if M.unranked then
return false
@@ -433,7 +433,7 @@ function scoreValid()--Check if any unranked mods are activated
end
return true
end
function destroyPlayers()--Destroy all player objects, restore freerows and free CCs
function destroyPlayers()-- Destroy all player objects, restore freerows and free CCs
for i=#PLAYERS,1,-1 do
local P=PLAYERS[i]
if P.canvas then
@@ -468,7 +468,7 @@ function pauseGame()
SCN.swapTo('pause','none')
end
end
function applyCustomGame()--Apply CUSTOMENV, BAG, MISSION
function applyCustomGame()-- Apply CUSTOMENV, BAG, MISSION
for k,v in next,CUSTOMENV do
GAME.modeEnv[k]=v
end
@@ -483,7 +483,7 @@ function applyCustomGame()--Apply CUSTOMENV, BAG, MISSION
GAME.modeEnv.mission=nil
end
end
function loadGame(mode,ifQuickPlay,ifNet)--Load a mode and go to game scene
function loadGame(mode,ifQuickPlay,ifNet)-- Load a mode and go to game scene
freshDate()
if legalGameTime() then
if not MODES[mode] and FILE.isSafe('parts/modes/'..mode) then
@@ -510,7 +510,7 @@ function loadGame(mode,ifQuickPlay,ifNet)--Load a mode and go to game scene
end
end
end
function gameOver()--Save record
function gameOver()-- Save record
if GAME.replaying then
local R=GAME.curMode.getRank
if R then
@@ -526,13 +526,13 @@ function gameOver()--Save record
local R=M.getRank
if R then
local P=PLAYERS[1]
R=R(P)--New rank
R=R(P)-- New rank
if R then
if R>0 then
GAME.rank=R
end
if not GAME.replaying and M.score and scoreValid() then
if RANKS[M.name] then--Old rank exist
if RANKS[M.name] then-- Old rank exist
local needSave
if R>RANKS[M.name] then
RANKS[M.name]=R
@@ -558,9 +558,9 @@ function gameOver()--Save record
end
local D=M.score(P)
local L=M.records
local p=#L--Rank-1
local p=#L-- Rank-1
if p>0 then
while M.comp(D,L[p]) do--If higher rank
while M.comp(D,L[p]) do-- If higher rank
p=p-1
if p==0 then break end
end
@@ -592,9 +592,9 @@ function trySave()
saveStats()
end
end
do--function freshPlayerPosition(sudden)
do-- function freshPlayerPosition(sudden)
local posLists={
--1~5
-- 1~5
{
{340,75,1},
{965,390,.5},
@@ -602,7 +602,7 @@ do--function freshPlayerPosition(sudden)
{20,390,.5},
{20,30,.5},
},
--6~17
-- 6~17
(function()
local L={{340,75,1}}
for i=1,4 do ins(L,{15,-160+180*i,.25}) end
@@ -611,7 +611,7 @@ do--function freshPlayerPosition(sudden)
for i=1,4 do ins(L,{1120,-160+180*i,.25}) end
return L
end)(),
--18~31
-- 18~31
(function()
local L={{340,75,1}}
for i=1,5 do ins(L,{10, -100+135*i,.18}) end
@@ -622,14 +622,14 @@ do--function freshPlayerPosition(sudden)
for i=1,5 do ins(L,{1160,-100+135*i,.18}) end
return L
end)(),
--32~49
-- 32~49
(function()
local L={{340,75,1}}
for i=1,4 do for j=1,6 do ins(L,{78*i-54,115*j-98,.09}) end end
for i=9,12 do for j=1,6 do ins(L,{78*i+267,115*j-98,.09}) end end
return L
end)(),
--50~99
-- 50~99
(function()
local L={{340,75,1}}
for i=1,7 do for j=1,7 do ins(L,{46*i-36,97*j-72,.068}) end end
@@ -637,7 +637,7 @@ do--function freshPlayerPosition(sudden)
return L
end)(),
}
function freshPlayerPosition(sudden)--Set initial position for every player
function freshPlayerPosition(sudden)-- Set initial position for every player
local L=PLY_ALIVE
if not sudden then
for i=1,#L do
@@ -657,21 +657,21 @@ do--function freshPlayerPosition(sudden)
for i=1,#L do L[i][method](L[i],unpack(posList[i])) end
end
end
do--function dumpBasicConfig()
do-- function dumpBasicConfig()
local gameSetting={
--Tuning
-- Tuning
'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS',
--System
-- System
'skin','face',
--Graphic
-- Graphic
'ghostType','block','ghost','center','bagLine',
'dropFX','moveFX','shakeFX',
'text','highCam','nextPos',
--Unnecessary graphic
-- Unnecessary graphic
-- 'grid','smooth',
-- 'lockFX','clearFX','splashFX','atkFX',
-- 'score',
@@ -684,7 +684,7 @@ do--function dumpBasicConfig()
return JSON.encode(S)
end
end
do--function resetGameData(args)
do-- function resetGameData(args)
local function task_showMods()
local time=0
while true do
@@ -701,14 +701,14 @@ do--function resetGameData(args)
end
end
local gameSetting={
--Tuning
-- Tuning
'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS',
--System
-- System
'skin','face',
--Graphic
-- Graphic
'block','ghost','center','smooth','grid','bagLine',
'lockFX','dropFX','moveFX','clearFX','splashFX','shakeFX','atkFX',
'text','score','warn','highCam','nextPos',
@@ -785,14 +785,14 @@ do--function resetGameData(args)
collectgarbage()
end
end
do--function checkWarning()
do-- function checkWarning()
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
local height=0--Max height of row 4~7
local height=0-- Max height of row 4~7
for x=4,7 do
for y=#F,1,-1 do
if F[y][x]>0 then
@@ -823,8 +823,8 @@ end
--Game draw
do--function drawSelfProfile()
-- Game draw
do-- function drawSelfProfile()
local name
local textObj,scaleK,width,offY
function drawSelfProfile()
@@ -832,14 +832,14 @@ do--function drawSelfProfile()
gc_push('transform')
gc_replaceTransform(SCR.xOy_ur)
--Draw avatar
-- Draw avatar
gc_setLineWidth(2)
gc_setColor(COLOR.X)gc_rectangle('fill',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)
--Draw username
-- Draw username
if name~=USERS.getUsername(USER.uid) then
name=USERS.getUsername(USER.uid)
textObj=GC.newText(getFont(30),name)
@@ -874,9 +874,9 @@ end
--Widget function shortcuts
-- Widget function shortcuts
function backScene() SCN.back() end
do--function goScene(name,style)
do-- function goScene(name,style)
local cache={}
function goScene(name,style)
local hash=style and name..style or name
@@ -886,7 +886,7 @@ do--function goScene(name,style)
return cache[hash]
end
end
do--function swapScene(name,style)
do-- function swapScene(name,style)
local cache={}
function swapScene(name,style)
local hash=style and name..style or name
@@ -896,7 +896,7 @@ do--function swapScene(name,style)
return cache[hash]
end
end
do--function pressKey(k)
do-- function pressKey(k)
local cache={}
function pressKey(k)
if not cache[k] then
@@ -905,7 +905,7 @@ do--function pressKey(k)
return cache[k]
end
end
do--CUS/SETXXX(k)
do-- CUS/SETXXX(k)
local CUSTOMENV=CUSTOMENV
local warnList={
'das','arr','dascut','dropcut','sddas','sdarr',

View File

@@ -1,4 +1,4 @@
--Static data tables
-- Static data tables
BLOCK_NAMES={
'Z','S','J','L','T','O','I',
'Z5','S5','P','Q','F','E',
@@ -20,7 +20,7 @@ RANK_COLORS={
{1,.5,.4},
{.95,.5,.95},
}
do--SVG_TITLE_FILL, SVG_TITLE_LINE
do-- SVG_TITLE_FILL, SVG_TITLE_LINE
SVG_TITLE_FILL={
{
0,0,
@@ -134,21 +134,21 @@ do--SVG_TITLE_FILL, SVG_TITLE_LINE
for j=1,16 do SVG_TITLE_LINE[8][j]=SVG_TITLE_FILL[8][j] end
for j=19,#SVG_TITLE_FILL[8]-2 do SVG_TITLE_LINE[9][j-18]=SVG_TITLE_FILL[8][j] end
end
do--SVG_TITLE_FAN
do-- SVG_TITLE_FAN
SVG_TITLE_FAN={}
local sin,cos=math.sin,math.cos
for i=1,9 do
local L=TABLE.copy(SVG_TITLE_LINE[i])
SVG_TITLE_FAN[i]=L
for j=1,#L,2 do
local x,y=L[j],L[j+1]--0<x<988, 290<y<1280
x,y=-(x+280)*.002,(y-580)*.9--X=ang, Y=dist
x,y=y*cos(x),-y*sin(x)--Rec-Pol-Rec
local x,y=L[j],L[j+1]-- 0<x<988, 290<y<1280
x,y=-(x+280)*.002,(y-580)*.9-- X=ang, Y=dist
x,y=y*cos(x),-y*sin(x)-- Rec-Pol-Rec
L[j],L[j+1]=x,y+300
end
end
end
do--MISSIONENUM
do-- MISSIONENUM
ENUM_MISSION={
_1=01,_2=02,_3=03,_4=04,
A1=05,A2=06,A3=07,A4=08,
@@ -165,7 +165,7 @@ do--MISSIONENUM
for k,v in next,ENUM_MISSION do L[v]=k end
for k,v in next,L do ENUM_MISSION[k]=v end
end
do--TEXTOBJ
do-- TEXTOBJ
local function T(s,t) return love.graphics.newText(getFont(s),t) end
TEXTOBJ={
modeName=T(30),
@@ -189,51 +189,51 @@ do--TEXTOBJ
noScore=T(45),highScore=T(30),modeLocked=T(45),
}
end
do--BLOCKS
do-- BLOCKS
local O,_=true,false
BLOCKS={
--Tetromino
{{_,O,O},{O,O,_}},--Z
{{O,O,_},{_,O,O}},--S
{{O,O,O},{O,_,_}},--J
{{O,O,O},{_,_,O}},--L
{{O,O,O},{_,O,_}},--T
{{O,O},{O,O}}, --O
{{O,O,O,O}}, --I
-- Tetromino
{{_,O,O},{O,O,_}},-- Z
{{O,O,_},{_,O,O}},-- S
{{O,O,O},{O,_,_}},-- J
{{O,O,O},{_,_,O}},-- L
{{O,O,O},{_,O,_}},-- T
{{O,O},{O,O}}, -- O
{{O,O,O,O}}, -- I
--Pentomino
{{_,O,O},{_,O,_},{O,O,_}},--Z5
{{O,O,_},{_,O,_},{_,O,O}},--S5
{{O,O,O},{O,O,_}}, --P
{{O,O,O},{_,O,O}}, --Q
{{_,O,_},{O,O,O},{O,_,_}},--F
{{_,O,_},{O,O,O},{_,_,O}},--E
{{O,O,O},{_,O,_},{_,O,_}},--T5
{{O,O,O},{O,_,O}}, --U
{{O,O,O},{_,_,O},{_,_,O}},--V
{{_,O,O},{O,O,_},{O,_,_}},--W
{{_,O,_},{O,O,O},{_,O,_}},--X
{{O,O,O,O},{O,_,_,_}}, --J5
{{O,O,O,O},{_,_,_,O}}, --L5
{{O,O,O,O},{_,O,_,_}}, --R
{{O,O,O,O},{_,_,O,_}}, --Y
{{_,O,O,O},{O,O,_,_}}, --N
{{O,O,O,_},{_,_,O,O}}, --H
{{O,O,O,O,O}}, --I5
-- Pentomino
{{_,O,O},{_,O,_},{O,O,_}},-- Z5
{{O,O,_},{_,O,_},{_,O,O}},-- S5
{{O,O,O},{O,O,_}}, -- P
{{O,O,O},{_,O,O}}, -- Q
{{_,O,_},{O,O,O},{O,_,_}},-- F
{{_,O,_},{O,O,O},{_,_,O}},-- E
{{O,O,O},{_,O,_},{_,O,_}},-- T5
{{O,O,O},{O,_,O}}, -- U
{{O,O,O},{_,_,O},{_,_,O}},-- V
{{_,O,O},{O,O,_},{O,_,_}},-- W
{{_,O,_},{O,O,O},{_,O,_}},-- X
{{O,O,O,O},{O,_,_,_}}, -- J5
{{O,O,O,O},{_,_,_,O}}, -- L5
{{O,O,O,O},{_,O,_,_}}, -- R
{{O,O,O,O},{_,_,O,_}}, -- Y
{{_,O,O,O},{O,O,_,_}}, -- N
{{O,O,O,_},{_,_,O,O}}, -- H
{{O,O,O,O,O}}, -- I5
--Trimino
{{O,O,O}}, --I3
{{O,O},{_,O}},--C
-- Trimino
{{O,O,O}}, -- I3
{{O,O},{_,O}},-- C
--Domino
{{O,O}},--I2
-- Domino
{{O,O}},-- I2
--Dot
{{O}},--O1
-- Dot
{{O}},-- O1
}
local function _RotCW(B)
local N={}
local r,c=#B,#B[1]--row,col
local r,c=#B,#B[1]-- row,col
for x=1,c do
N[x]={}
for y=1,r do
@@ -339,11 +339,11 @@ EVENTSETS={
'ultra',
}
do--Mod data
do-- Mod data
local function _disableKey(P,key)
table.insert(P.gameEnv.keyCancel,key)
end
MODOPT={--Mod options
MODOPT={-- Mod options
{no=0,id="NX",name="next",
key="q",x=80,y=230,color='lO',
list={0,1,2,3,4,5,6},
@@ -489,44 +489,44 @@ do--Mod data
M.color=COLOR[M.color]
end
end
do--Game data tables
PLAYERS={}--Players data
do-- Game data tables
PLAYERS={}-- Players data
PLY_ALIVE={}
FIELD={}--Field(s) for custom game
BAG={}--Sequence for custom game
MISSION={}--Clearing mission for custom game
GAME={--Global game data
playing=false, --If in-game
init=false, --If need initializing game when enter scene-play
net=false, --If play net game
FIELD={}-- Field(s) for custom game
BAG={}-- Sequence for custom game
MISSION={}-- Clearing mission for custom game
GAME={-- Global game data
playing=false, -- If in-game
init=false, -- If need initializing game when enter scene-play
net=false, -- If play net game
result=false, --Game result (string)
rank=0, --Rank reached
pauseTime=0, --Time paused
pauseCount=0, --Pausing count
warnLVL0=0, --Warning level
warnLVL=0, --Warning level (show)
result=false, -- Game result (string)
rank=0, -- Rank reached
pauseTime=0, -- Time paused
pauseCount=0, -- Pausing count
warnLVL0=0, -- Warning level
warnLVL=0, -- Warning level (show)
seed=1046101471, --Game seed
curMode=false, --Current gamemode object
mod={}, --List of loaded mods
modeEnv=false, --Current gamemode environment
setting={}, --Game settings
rep={}, --Recording list, key,time,key,time...
statSaved=true, --If recording saved
recording=false, --If recording
replaying=false, --If replaying
saved=false, --If recording saved
tasUsed=false, --If tasMode used
seed=1046101471, -- Game seed
curMode=false, -- Current gamemode object
mod={}, -- List of loaded mods
modeEnv=false, -- Current gamemode environment
setting={}, -- Game settings
rep={}, -- Recording list, key,time,key,time...
statSaved=true, -- If recording saved
recording=false, -- If recording
replaying=false, -- If replaying
saved=false, -- If recording saved
tasUsed=false, -- If tasMode used
prevBG=false, --Previous background, for restore BG when quit setting page
prevBG=false, -- Previous background, for restore BG when quit setting page
--Data for royale mode
stage=false, --Game stage
mostBadge=false, --Most badge owner
secBadge=false, --Second badge owner
mostDangerous=false,--Most dangerous player
secDangerous=false, --Second dangerous player
-- Data for royale mode
stage=false, -- Game stage
mostBadge=false, -- Most badge owner
secBadge=false, -- Second badge owner
mostDangerous=false,-- Most dangerous player
secDangerous=false, -- Second dangerous player
}
ROYALEDATA={
powerUp=false,
@@ -534,25 +534,25 @@ do--Game data tables
}
CUSTOMENV={}
ROOMENV={
--Room config
-- Room config
capacity=10,
--Basic
-- Basic
drop=30,lock=60,
wait=0,fall=0,
hang=5,hurry=1e99,
--Control
-- Control
nextCount=6,
holdMode='hold',
holdCount=1,
infHold=false,
phyHold=false,
--Visual
-- Visual
bone=false,
--Rule
-- Rule
life=0,
pushSpeed=5,
garbageSpeed=2,
@@ -571,10 +571,10 @@ do--Game data tables
eventSet="X",
}
REPLAY={}--Replay objects (not include stream data)
REPLAY={}-- Replay objects (not include stream data)
end
do--Userdata tables
USER=setmetatable({--User infomation
do-- Userdata tables
USER=setmetatable({-- User infomation
__data={
email=false,
password=false,
@@ -592,8 +592,8 @@ do--Userdata tables
end
end,
})
SETTING={--Settings
--Tuning
SETTING={-- Settings
-- Tuning
das=10,arr=2,
dascut=0,dropcut=0,
sddas=0,sdarr=2,
@@ -601,7 +601,7 @@ do--Userdata tables
holdMode='hold',
RS='TRS',
--System
-- System
reTime=2,
allowTAS=false,
autoPause=true,
@@ -621,7 +621,7 @@ do--Userdata tables
},
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
--Graphic
-- Graphic
ghostType='gray',
block=true,ghost=.3,center=1,
smooth=true,grid=.16,lineNum=.5,
@@ -651,7 +651,7 @@ do--Userdata tables
clickFX=true,
warn=true,
--Sound
-- Sound
autoMute=true,
sfxPack='chiptune',
vocPack='miya',
@@ -664,19 +664,19 @@ do--Userdata tables
vib=0,
voc=0,
--Virtualkey
VKSFX=.2,--SFX volume
VKVIB=0,--VIB
VKSwitch=false,--If disp
VKSkin=1,--If disp
VKTrack=false,--If tracked
VKDodge=false,--If dodge
VKTchW=.3,--Touch-Pos Weight
VKCurW=.4,--Cur-Pos Weight
VKIcon=true,--If disp icon
-- Virtualkey
VKSFX=.2,-- SFX volume
VKVIB=0,-- VIB
VKSwitch=false,-- If disp
VKSkin=1,-- If disp
VKTrack=false,-- If tracked
VKDodge=false,-- If dodge
VKTchW=.3,-- Touch-Pos Weight
VKCurW=.4,-- Cur-Pos Weight
VKIcon=true,-- If disp icon
VKAlpha=.3,
}
KEY_MAP={--Key setting
KEY_MAP={-- Key setting
keyboard={
left=1,right=2,x=3,z=4,c=5,
up=6,down=7,space=8,a=9,s=10,
@@ -688,29 +688,29 @@ do--Userdata tables
leftshoulder=0,
},
}
VK_ORG={--Virtualkey layout, refresh all VKs' position with this before each game
{ava=true, x=80, y=720-200,r=80},--moveLeft
{ava=true, x=320, y=720-200,r=80},--moveRight
{ava=true, x=1280-80, y=720-200,r=80},--rotRight
{ava=true, x=1280-200,y=720-80, r=80},--rotLeft
{ava=true, x=1280-200,y=720-320,r=80},--rot180
{ava=true, x=200, y=720-320,r=80},--hardDrop
{ava=true, x=200, y=720-80, r=80},--softDrop
{ava=true, x=1280-320,y=720-200,r=80},--hold
{ava=true, x=80, y=280, r=80},--func1
{ava=true, x=1280-80, y=280, r=80},--func2
{ava=false, x=670, y=50, r=30},--insLeft
{ava=false, x=730, y=50, r=30},--insRight
{ava=false, x=790, y=50, r=30},--insDown
{ava=false, x=850, y=50, r=30},--down1
{ava=false, x=910, y=50, r=30},--down4
{ava=false, x=970, y=50, r=30},--down10
{ava=false, x=1030, y=50, r=30},--dropLeft
{ava=false, x=1090, y=50, r=30},--dropRight
{ava=false, x=1150, y=50, r=30},--zangiLeft
{ava=false, x=1210, y=50, r=30},--zangiRight
VK_ORG={-- Virtualkey layout, refresh all VKs' position with this before each game
{ava=true, x=80, y=720-200,r=80},-- moveLeft
{ava=true, x=320, y=720-200,r=80},-- moveRight
{ava=true, x=1280-80, y=720-200,r=80},-- rotRight
{ava=true, x=1280-200,y=720-80, r=80},-- rotLeft
{ava=true, x=1280-200,y=720-320,r=80},-- rot180
{ava=true, x=200, y=720-320,r=80},-- hardDrop
{ava=true, x=200, y=720-80, r=80},-- softDrop
{ava=true, x=1280-320,y=720-200,r=80},-- hold
{ava=true, x=80, y=280, r=80},-- func1
{ava=true, x=1280-80, y=280, r=80},-- func2
{ava=false, x=670, y=50, r=30},-- insLeft
{ava=false, x=730, y=50, r=30},-- insRight
{ava=false, x=790, y=50, r=30},-- insDown
{ava=false, x=850, y=50, r=30},-- down1
{ava=false, x=910, y=50, r=30},-- down4
{ava=false, x=970, y=50, r=30},-- down10
{ava=false, x=1030, y=50, r=30},-- dropLeft
{ava=false, x=1090, y=50, r=30},-- dropRight
{ava=false, x=1150, y=50, r=30},-- zangiLeft
{ava=false, x=1210, y=50, r=30},-- zangiRight
}
RANKS={sprint_10l=0}--Ranks of modes
RANKS={sprint_10l=0}-- Ranks of modes
STAT={
version=VERSION.code,
run=0,game=0,time=0,frame=0,
@@ -722,7 +722,7 @@ do--Userdata tables
clear=(function() local L={} for i=1,29 do L[i]={0,0,0,0,0,0} end return L end)(),
spin=(function() local L={} for i=1,29 do L[i]={0,0,0,0,0,0,0} end return L end)(),
pc=0,hpc=0,b2b=0,b3b=0,score=0,
lastPlay='sprint_10l',--Last played mode ID
lastPlay='sprint_10l',-- Last played mode ID
item=setmetatable({},{__index=function(self,k)
self[k]=0
return 0

View File

@@ -91,7 +91,7 @@ return{
},
--Webpages / Organizations
-- Webpages / Organizations
{"Github Repository",
"githubrepository sourcecode src",
"org",
@@ -134,7 +134,7 @@ return{
FNNS and "https://youtu.be/dQw4w9WgXcQ" or "https://www.p\97\116\114\101\111\110.com/techmino",
},
--Games
-- Games
{"TTT",
"tetris trainer tres bien",
"game",
@@ -363,7 +363,7 @@ return{
"Windows | Multiplayer\n(火拼俄罗斯)\n\nThe Tetris game on Tencent Game Center, 12-wide board, DAS/ARR the same as typing on the keyboard, one Next, no Hold. Can only send garbage through Tetris (sends three lines) and Triple (sends two lines). Garbage is checker-board-shaped and is nearly impossible to dig through.",
},
--Terms
-- Terms
{"Translator Note 2",
"",
"help",
@@ -448,7 +448,7 @@ return{
{"Tetris",
"tetris 4",
"term",
"The name of the game (and its trademark). Also the term for clearing four lines at one time in official games.\nCoined from Tetra (Greek for “four” <τέτταρες>) and Tennis (favorite sport of the creator of Tetris). Also, the Tetris games developed by Nintendo and SEGA were licensed by TTC. These two companies do not have the copyright of Tetris.",--Thanks to Alexey Pajitnov!
"The name of the game (and its trademark). Also the term for clearing four lines at one time in official games.\nCoined from Tetra (Greek for “four” <τέτταρες>) and Tennis (favorite sport of the creator of Tetris). Also, the Tetris games developed by Nintendo and SEGA were licensed by TTC. These two companies do not have the copyright of Tetris.",-- Thanks to Alexey Pajitnov!
},
{"All Clear",
"pc perfectclear ac allclear",
@@ -675,7 +675,7 @@ return{
{"Donation",
"donate",
"term",
"A method of “plugging” up the Tetris hole to send a T-Spin. After the T-Spin, the Tetris hole is opened up once again to allow the continuation of Tetris or downstacking.\n--Harddrop wiki",
"A method of “plugging” up the Tetris hole to send a T-Spin. After the T-Spin, the Tetris hole is opened up once again to allow the continuation of Tetris or downstacking.\n-- Harddrop wiki",
},
{"Debt",
"qianzhai debt owe",
@@ -975,7 +975,7 @@ return{
"A Tetris bot. Built by the Chinese Tetris player 奏之章 (Zòu Zhī Zhāng, see entry below) and has decent performance in many games",
},
--Setups
-- Setups
{"Openers",
"setup openers",
"setup",
@@ -1090,7 +1090,7 @@ return{
HDsearch.."Gamushiro_Stacking",
},
--Pattern
-- Pattern
{"Mid-game Setups",
"midgamesetups",
"pattern",
@@ -1174,7 +1174,7 @@ return{
"https://four.lol/perfect-clears/5th",
},
--Savedata managing
-- Savedata managing
{"Console",
"cmd commamd minglinghang kongzhitai terminal",
"command",
@@ -1216,7 +1216,7 @@ return{
"Go to console, type “rm -s cache” and then press enter/return.\nTake effect immediately.",
},
--English
-- English
{"SFX",
"soundeffects",
"english",

View File

@@ -55,7 +55,7 @@ return{
"https://tetris.huijiwiki.com",
},
--Webpages / Organizations
-- Webpages / Organizations
{"Githubリポジトリー",
"githubrepository sourcecode リポジトリー ソースコード",
"org",
@@ -98,7 +98,7 @@ return{
FNNS and "https://youtu.be/dQw4w9WgXcQ" or "https://www.p\97\116\114\101\111\110.com/techmino",
},
--Games
-- Games
{"テトリス トレーナー トレビアン (TTT)",
"tetris trainer tres bien テトリス トレーナー トレビアン",
"game",
@@ -320,7 +320,7 @@ return{
"Windows | Multiplayer\n(火拼俄罗斯)\n\nThe Tetris game on Tencent Game Center, 12-wide board, DAS/ARR the same as your typing, 1 next, no hold. Can only send garbage through Tetris (sends 3 lines) and Triple (sends 2 lines). Garbage is checker-board-shaped and is nearly impossible to dig through.",
},
--Terms
-- Terms
{"Translator Note 2",
"",
"help",
@@ -405,7 +405,7 @@ return{
{"Tetris",
"tetris",
"term",
"The name of the game (and its trademark). Also the name for clearing 4 lines at one time in official games.\nCoined from Tetra (greek for \"four\") and Tennis (favorite sport of the creator of Tetris). Also, the Tetris games developed by Nintendo and SEGA was licensed by TTC and these two companies do not have the copyright of Tetris.",--Thanks to Alexey Pajitnov!
"The name of the game (and its trademark). Also the name for clearing 4 lines at one time in official games.\nCoined from Tetra (greek for \"four\") and Tennis (favorite sport of the creator of Tetris). Also, the Tetris games developed by Nintendo and SEGA was licensed by TTC and these two companies do not have the copyright of Tetris.",-- Thanks to Alexey Pajitnov!
},
{"All Clear",
"pc perfectclear ac allclear",
@@ -612,7 +612,7 @@ return{
{"Donation",
"donate",
"term",
"A method of \"plugging\" up the Tetris hole to send a T-Spin. After the T-Spin, the Tetris hole is opened up once again to allow the continuation of Tetris or downstacking.\n--Harddrop wiki",
"A method of \"plugging\" up the Tetris hole to send a T-Spin. After the T-Spin, the Tetris hole is opened up once again to allow the continuation of Tetris or downstacking.\n-- Harddrop wiki",
},
{"\"Debt\"",
"qianzhai debt owe",
@@ -833,7 +833,7 @@ return{
{"Passthrough",
"pingthrough",
"term",
"",--TODO
"",-- TODO
},
{"Tetris OL attack",
"top tetrisonlineattack",
@@ -917,7 +917,7 @@ return{
"A Tetris bot. Built by the Chinese Tetris player 奏之章 (Zou Zhi Zhang) and has decent performance in many games",
},
--Setups
-- Setups
{"Openers",
"setup openers",
"setup",
@@ -1009,7 +1009,7 @@ return{
"An All Clear opener with a high success rate. In Techmino's PC Practice modes, the setup that leaves an irregular opening is this setup.",
},
--Pattern
-- Pattern
{"Mid-game Setups",
"midgamesetups",
"pattern",
@@ -1072,7 +1072,7 @@ return{
"Stacking TST(s) on top of a STSD.",
},
--Savedata managing
-- Savedata managing
{"Console",
"cmd commamd minglinghang kongzhitai terminal",
"command",
@@ -1114,7 +1114,7 @@ return{
"Go to console and type \"rm -s cache\" then press enter.\nTake effect immediately.",
},
--English
-- English
{"SFX",
"soundeffects",
"english",

View File

@@ -84,7 +84,7 @@ return{
"https://knewjade.github.io/fumen-for-mobile/"
},
--相关网页/组织
-- 相关网页/组织
{"GitHub仓库",
"源代码 源码 github git sourcecode yuandaima src",
"org",
@@ -126,7 +126,7 @@ return{
FNNS and "https://b23.tv/BV1uT4y1P7CX" or "https://www.p\97\116\114\101\111\110.com/techmino",
},
--游戏(题库)
-- 游戏(题库)
{"TTT",
"教程 trainer tres bien",
"game",
@@ -152,7 +152,7 @@ return{
"http://121.36.2.245:3000/tpo"
},
--游戏(网页)
-- 游戏(网页)
{"注[1]",
"备注 notice",
"game",
@@ -228,7 +228,7 @@ return{
"网页游戏 | 单机\ntetris.com官网上的俄罗斯方块在马拉松基础上添加了技能场地上会随机冒出技能方块消除后会得到各种各样或好或坏的技能。",
},
--游戏(跨平台)
-- 游戏(跨平台)
{"Techmino",
"铁壳米诺 方块研究所 tieke",
"game",
@@ -250,7 +250,7 @@ return{
"Windows/Android | 单机\n块圈玩家自制方块,正在开发中,有一个原创旋转系统。",
},
--游戏(街机/类街机)
-- 游戏(街机/类街机)
{"TGM",
"俄罗斯方块大师 tetrisgrandmaster",
"game",
@@ -273,7 +273,7 @@ return{
"Windows | 单机\n简称Tex包含TGM的所有模式可以用来练习TGM但World规则不完全一样如软降到底无锁延踢墙表有细节不同等",
},
--游戏(其他)
-- 游戏(其他)
{"Tetris Effect",
"效应 tec tetriseffectconnected xiaoyinglianjie",
"game",
@@ -356,7 +356,7 @@ return{
"Windows | 多人\n腾讯游戏大厅的方块场地12列打字的 DAS 和 ARR1 Next无 Hold攻击途径只有消4打3、 消3打2垃圾行为国际象棋棋盘式几乎不可能挖掘。",
},
--术语(缩写)
-- 术语(缩写)
{"LPM",
"速度 sudu",
"term",
@@ -413,7 +413,7 @@ return{
"Attack Per Line\n攻击每行也叫效率体现玩家攻击的行利用率。例如消四和T旋的效率就比消二和消三高。",
},
--术语(消除名)
-- 术语(消除名)
{"Single",
"1 xiaoyi",
"term",
@@ -450,7 +450,7 @@ return{
"Half-PC\nPC全消的外延“下方有剩余方块” 的全消特别地如果只消1行则必须不剩余玩家放置的方块能打出一些攻击和防御Techmino限定",
},
--术语(旋转相关)
-- 术语(旋转相关)
{"Spin",
"转 xuanzhuan zuandong",
"term",
@@ -578,7 +578,7 @@ return{
"X Rotation System\nT-ex原创旋转系统引入了 “按住方向键换一套踢墙表” 的设定(在对应的方向需要顶住墙),让 “想去哪” 能被游戏捕获从而转到玩家希望到达的位置。\n\n其他旋转系统无论踢墙表怎么设计块处在某个位置时旋转后最终只能按固定顺序测试这导致不同的踢墙是竞争的若存在两个可能想去的位置就只能二选一XRS解决了这个问题。",
},
--术语(其他)
-- 术语(其他)
{"B2B",
"大满贯 btb backtoback",
"term",
@@ -903,7 +903,7 @@ return{
{"C2序列",
"seq",
"term",
"七个块初始权重设为0\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块然后将其权重除以3.5\n循环。",--Discovered by zxc
"七个块初始权重设为0\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块然后将其权重除以3.5\n循环。",-- Discovered by zxc
},
{"堆叠(Stack)",
"duidie stacking",
@@ -972,7 +972,7 @@ return{
"一个AI的名字就跟AlphaGo一样\n由研究群群友奏之章开发,重新调参后在各个游戏平台上的表现都很不错。",
},
--定式
-- 定式
{"开局定式(Setup)",
"opening kaijudingshi opener",
"setup",
@@ -1086,7 +1086,7 @@ return{
HDsearch.."Gamushiro_Stacking",
},
--形状
-- 形状
{"中局定式",
"setup dingshi",
"pattern",
@@ -1171,7 +1171,7 @@ return{
"https://four.lol/perfect-clears/5th"
},
--存档管理
-- 存档管理
{"控制台",
"console cmd commamd minglinghang kongzhitai",
"command",
@@ -1213,7 +1213,7 @@ return{
"前往控制台输入 “rm -s cache” 并回车。\n立即生效。",
},
--英文
-- 英文
{"SFX",
"",
"english",

View File

@@ -54,7 +54,7 @@ return{
-- cc_fixed="CC is incompatible with fixed sequences",
-- cc_swap="CC is incompatible with swap holdmode",
--ai_prebag="The AI is incompatible with custom sequences which have nontetromino.",'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",

View File

@@ -54,7 +54,7 @@ return{
-- cc_fixed="CC is incompatible with fixed sequences",
-- cc_swap="CC is incompatible with swap holdmode",
--ai_prebag="The AI is incompatible with custom sequences which have nontetromino.", 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",

View File

@@ -235,7 +235,7 @@ return{
ctrl="=?=",
key="=?",
touch="_?",
showVK="--?",
showVK="-- ?",
reTime="3-2-1",
RS="''?",
menuPos="←M→?",
@@ -258,7 +258,7 @@ return{
ghost="__↓__",
center="+",
grid="#",
lineNum="--No.",
lineNum="-- No.",
lockFX="↓_~",
dropFX="↓~",
@@ -509,7 +509,7 @@ return{
color="~~~",
invis="???",
slide="~_~",
pathVis="--==>",
pathVis="-- ==>",
revKB="Reverse",
},
app_schulteG={

View File

@@ -283,7 +283,7 @@ return{
"NOT_A_ROBOT",
"sakurw",
"Airun",
--"XMiao",
-- "XMiao",
"幽灵3383",
"",
"Performances",

View File

@@ -1,6 +1,6 @@
local LINE={}
local L={}--Storage
local len=0--Length
local L={}-- Storage
local len=0-- Length
function LINE.new(val,isGarbage)
if len==0 then
for i=1,10 do

View File

@@ -24,7 +24,7 @@ return{
{3,2,6,6,1,4,0,0,0,7},
{3,3,3,4,4,4,0,0,0,7},
},
},--3*4 shape
},-- 3*4 shape
{
{
{1,1,0,0,0,0,0,3,3,3},
@@ -50,7 +50,7 @@ return{
{3,6,6,5,5,2,2,0,0,0},
{3,3,3,5,2,2,0,0,0,0},
},
},--7 piece opener(right>)(without i)
},-- 7 piece opener(right>)(without i)
{
{
{4,4,4,3,3,3,0,0,0,0},
@@ -64,7 +64,7 @@ return{
{3,2,6,6,1,4,0,0,0,0},
{3,3,3,4,4,4,0,0,0,0},
},
},--6 piece opener
},-- 6 piece opener
{
{
{0,0,0,0,0,1,3,5,6,7},
@@ -84,7 +84,7 @@ return{
{1,3,0,0,0,0,0,5,6,7},
{1,3,0,0,0,0,0,5,6,7},
},
},--4*5
},-- 4*5
{
{
{0,0,0,0,0,0,1,3,5,7},
@@ -104,5 +104,5 @@ return{
{5,7,0,0,0,0,0,0,3,1},
{1,3,0,0,0,0,0,0,7,5},
},
},--4*6
},-- 4*6
}

File diff suppressed because one or more lines are too long

View File

@@ -26,7 +26,7 @@ return{
GC.clear(.2,.2,.2)
GC.setColor(.5,.5,.5)
--Frame & Username
-- Frame & Username
GC.setColor(.8,.8,.8)
GC.setLineWidth(2)
GC.rectangle('line',12,20,100,80,5)
@@ -38,13 +38,13 @@ return{
GC.pop()
end
--Figures
-- Figures
local t=TIME()
GC.setColor(1,1,1,.5+.2*sin(t))
GC.draw(IMG.hbm,-276,-86,0,1.5)
GC.draw(IMG.electric,476,152,0,2.6)
--Texts
-- Texts
GC.setColor(.8,.8,.8)
mText(TEXTOBJ.techrash,63,420)
setFont(75)

View File

@@ -3,7 +3,7 @@ return{
load=function()
applyCustomGame()
--Switch clear sprint mode on
-- Switch clear sprint mode on
if #FIELD[1]>0 then
GAME.modeEnv.hook_drop=require'parts.eventsets.checkClearBoard'.hook_drop
else

View File

@@ -10,7 +10,7 @@ return{
local height=TABLE.new(0,10)
local max=#P.field
if max>0 then
--Get heights
-- Get heights
for x=1,10 do
local h=max
while P.field[h][x]==0 and h>1 do
@@ -30,15 +30,15 @@ return{
for i=1,10 do
d=d+height[i]
end
if d<40 or P.stat.row>2*42 then--Low field or almost win, give SZO
if d<40 or P.stat.row>2*42 then-- Low field or almost win, give SZO
for _=1,4 do
ins(wei,1)
ins(wei,2)
ins(wei,6)
end
else
--Give I when no hole
local tempDeltaHei=-999--Height difference
-- Give I when no hole
local tempDeltaHei=-999-- Height difference
for x=2,11 do
local deltaHei=height[x]-height[x-1]
if tempDeltaHei<-2 and deltaHei>2 then
@@ -50,9 +50,9 @@ return{
end
end
--Give O when no d=0/give T when no d=1
local flatCount=0--d=0 count
local stairCount=0--d=1 count
-- Give O when no d=0/give T when no d=1
local flatCount=0-- d=0 count
local stairCount=0-- d=1 count
for x=2,10 do
local _=height[x]-height[x-1]
if _==0 then

View File

@@ -5,7 +5,7 @@ local NET={
accessToken=false,
cloudData={},
roomState={--A copy of room structure on server
roomState={-- A copy of room structure on server
info={
name=false,
type=false,
@@ -17,8 +17,8 @@ local NET={
private=false,
start=false,
},
spectate=false,--If player is spectating
specSRID=false,--Cached SRID when enter playing room, for connect WS after scene swapped
spectate=false,-- If player is spectating
specSRID=false,-- Cached SRID when enter playing room, for connect WS after scene swapped
seed=false,
roomReadyState=false,
@@ -293,18 +293,16 @@ local function wsSend(act,data)
})
end
--Room
-- Room
NET.room={}
function NET.room.chat(mes,rid)
wsSend(1300,{
message=mes,
roomId=rid,--Admin
roomId=rid,-- Admin
})
end
function NET.room.create(roomName,description,capacity,roomType,roomData,password)
if not TASK.lock('enterRoom',2) then return end
NET.roomState.private=not not password
NET.roomState.capacity=capacity
if not TASK.lock('enterRoom',6) then return end
wsSend(1301,{
capacity=capacity,
info={
@@ -314,84 +312,86 @@ function NET.room.create(roomName,description,capacity,roomType,roomData,passwor
description=description,
},
data=roomData,
password=password,
})
WAIT{
quit=function()
TASK.unlock('enterRoom')
end,
timeout=1e99,
}
end
function NET.room.getData(rid)
wsSend(1302,{
roomId=rid,--Admin
roomId=rid,-- Admin
})
end
function NET.room.setData(data,rid)
wsSend(1303,{
data=data,
roomId=rid,--Admin
roomId=rid,-- Admin
})
end
function NET.room.getInfo(rid)
wsSend(1304,{
roomId=rid,--Admin
roomId=rid,-- Admin
})
end
function NET.room.setInfo(info,rid)
wsSend(1305,{
info=info,
roomId=rid,--Admin
roomId=rid,-- Admin
})
end
function NET.room.enter(rid,password)
if TASK.lock('enterRoom',6) then
SFX.play('reach',.6)
wsSend(1306,{
data={
roomId=rid,
password=password,
}
})
end
if not TASK.lock('enterRoom',6) then return end
SFX.play('reach',.6)
wsSend(1306,{
data={
roomId=rid,
password=password,
}
})
end
function NET.room.kick(pid,rid)
wsSend(1307,{
playerId=pid,--Host
roomId=rid,--Admin
playerId=pid,-- Host
roomId=rid,-- Admin
})
end
function NET.room.leave()
wsSend(1308)
end
function NET.room.fetch()
if TASK.lock('fetchRoom',3) then
wsSend(1309,{
data={
pageIndex=0,
pageSize=26,
}
})
end
if not TASK.lock('fetchRoom',3) then return end
wsSend(1309,{
data={
pageIndex=0,
pageSize=26,
}
})
end
function NET.room.setPW(pw,rid)
if TASK.lock('fetchRoom',3) then
wsSend(1310,{
data={
password=pw,
roomId=rid,--Admin
}
})
end
if not TASK.lock('setRoomPW',2) then return end
wsSend(1310,{
data={
password=pw,
roomId=rid,-- Admin
}
})
end
function NET.room.remove(rid)
wsSend(1311,{
roomId=rid--Admin
roomId=rid-- Admin
})
end
--Player
-- Player
NET.player={}
function NET.player.updateConf()
wsSend(1200,dumpBasicConfig())
end
function NET.player.finish(mes)--what mes?
function NET.player.finish(mes)-- what mes?
wsSend(1201,mes)
end
function NET.player.joinGroup(gid)
@@ -416,7 +416,7 @@ function NET.player.setPlaying(playing)
wsSend(1207,playing and 'Gamer' or 'Spectator')
end
--WS
-- WS
function NET.connectWS()
if WS.status('game')=='dead' then
WS.connect('game','',{['x-access-token']=USER.aToken},6)
@@ -450,26 +450,34 @@ function NET.updateWS()
elseif res.action==1100 then-- TODO
elseif res.action==1101 then-- TODO
elseif res.action==1102 then-- TODO
elseif res.action==1201 then-- TODO
elseif res.action==1202 then-- TODO
elseif res.action==1203 then-- TODO
elseif res.action==1204 then-- TODO
elseif res.action==1205 then-- TODO
elseif res.action==1206 then-- TODO
elseif res.action==1207 then-- TODO
elseif res.action==1301 then-- TODO
elseif res.action==1302 then-- TODO
elseif res.action==1303 then-- TODO
elseif res.action==1304 then-- TODO
elseif res.action==1305 then-- TODO
elseif res.action==1306 then-- TODO
elseif res.action==1307 then-- TODO
elseif res.action==1308 then-- TODO
elseif res.action==1309 then--Fetch rooms
elseif res.action==1201 then-- Finish
elseif res.action==1202 then-- Join group
elseif res.action==1203 then-- Set ready
elseif res.action==1204 then-- Set host
elseif res.action==1205 then-- Set state
elseif res.action==1206 then-- Stream
elseif res.action==1207 then-- Set playing
elseif res.action==1301 then-- Create room
TASK.unlock('enterRoom')
-- NET.roomState=...
-- SCN.go('net_game')
WAIT.interrupt()
elseif res.action==1302 then-- Get room data
elseif res.action==1303 then-- Set room data
elseif res.action==1304 then-- Get room info
elseif res.action==1305 then-- Set room info
elseif res.action==1306 then-- Enter room
TASK.unlock('enterRoom')
-- NET.roomState=...
-- SCN.go('net_game')
WAIT.interrupt()
elseif res.action==1307 then-- Kick room
elseif res.action==1308 then-- Leave room
elseif res.action==1309 then-- Fetch rooms
TASK.unlock('fetchRoom')
if res.data then SCN.scenes.net_rooms.widgetList.roomList:setList(res.data) end
elseif res.action==1310 then-- TODO
elseif res.action==1311 then-- TODO
elseif res.action==1310 then-- Set password
elseif res.action==1311 then-- Remove room
end
else
WS.alert('user')
@@ -480,7 +488,7 @@ function NET.updateWS()
end
--------------------------<OLD ONLINE API>
--Account & User
-- Account & User
function NET.getUserInfo(uid)
wsSend({
data={
@@ -490,26 +498,24 @@ function NET.getUserInfo(uid)
})
end
--Save
-- Save
function NET.uploadSave()
if TASK.lock('uploadSave',8) then
wsSend({data={sections={
{section=1,data=STRING.packTable(STAT)},
{section=2,data=STRING.packTable(RANKS)},
{section=3,data=STRING.packTable(SETTING)},
{section=4,data=STRING.packTable(KEY_MAP)},
{section=5,data=STRING.packTable(VK_ORG)},
{section=6,data=STRING.packTable(loadFile('conf/vkSave1','-canSkip') or{})},
{section=7,data=STRING.packTable(loadFile('conf/vkSave2','-canSkip') or{})},
}}})
MES.new('info',"Uploading")
end
if not TASK.lock('uploadSave',8) then return end
wsSend({data={sections={
{section=1,data=STRING.packTable(STAT)},
{section=2,data=STRING.packTable(RANKS)},
{section=3,data=STRING.packTable(SETTING)},
{section=4,data=STRING.packTable(KEY_MAP)},
{section=5,data=STRING.packTable(VK_ORG)},
{section=6,data=STRING.packTable(loadFile('conf/vkSave1','-canSkip') or{})},
{section=7,data=STRING.packTable(loadFile('conf/vkSave2','-canSkip') or{})},
}}})
MES.new('info',"Uploading")
end
function NET.downloadSave()
if TASK.lock('downloadSave',8) then
wsSend({data={sections={1,2,3,4,5,6,7}}})
MES.new('info',"Downloading")
end
if not TASK.lock('downloadSave',8) then return end
wsSend({data={sections={1,2,3,4,5,6,7}}})
MES.new('info',"Downloading")
end
function NET.loadSavedData(sections)
for _,sec in next,sections do

View File

@@ -7,7 +7,7 @@ local ins,rem=table.insert,table.remove
local setFont=FONT.set
local posLists={
--1~5
-- 1~5
(function()
local L={}
for i=1,5 do
@@ -15,7 +15,7 @@ local posLists={
end
return L
end)(),
--6~17
-- 6~17
(function()
local L={}
for i=1,10 do
@@ -26,7 +26,7 @@ local posLists={
end
return L
end)(),
--18~31
-- 18~31
(function()
local L={}
for i=1,11 do L[i]= {x=40,y=65+50*i,w=330,h=45} end
@@ -34,7 +34,7 @@ local posLists={
for i=1,9 do L[22+i]= {x=760,y=65+50*i,w=330,h=45} end
return L
end)(),
--32~49
-- 32~49
(function()
local L={}
for i=1,10 do L[i]= {x=30,y=60+50*i,w=200,h=45} end
@@ -44,7 +44,7 @@ local posLists={
for i=1,9 do L[40+i]= {x=870,y=60+50*i,w=200,h=45} end
return L
end)(),
--50~99
-- 50~99
(function()
local L={}
for i=1,11 do L[i]= {x=30,y=60+50*i,w=100,h=45} end
@@ -90,7 +90,7 @@ local function _freshPos()
posList=posLists[3]
elseif #PLYlist<=49 then
posList=posLists[4]
else--if #PLY<=99 then
else-- if #PLY<=99 then
posList=posLists[5]
end
end
@@ -211,7 +211,7 @@ function NETPLY.draw()
for i=1,#PLYlist do
local p=PLYlist[i]
gc_translate(p.x,p.y)
--Rectangle
-- Rectangle
gc_setColor(COLOR[
p.mode==0 and 'lH' or
p.mode==1 and 'N' or
@@ -225,17 +225,17 @@ function NETPLY.draw()
gc_rectangle('fill',0,0,p.w,p.h)
end
--Stencil
-- Stencil
stencilW,stencilH=p.w,p.h
gc_setStencilTest('equal',1)
gc_stencil(_playerFrameStencil)
gc_setColor(1,1,1)
--Avatar
-- Avatar
local avatarSize=math.min(p.h,50)/128*.9
gc_draw(USERS.getAvatar(p.uid),2,2,nil,avatarSize)
--UID & Username
-- UID & Username
if p.h>=47 then
setFont(40)
gc_print("#"..p.uid,50,-5)
@@ -247,7 +247,7 @@ function NETPLY.draw()
gc_print(p.username,p.h,8)
end
--Stat
-- Stat
local S=p.stat
if S and (p.h>=55 or p.w>=180) then
setFont(20)

View File

@@ -118,14 +118,14 @@ local function _stencilBoard() gc_rectangle('fill',0,-10,300,610) end
local function _applyField(P)
gc_push('transform')
--Apply shaking
-- Apply shaking
if P.shakeTimer>0 then
local dx=int(P.shakeTimer/2)
local dy=int(P.shakeTimer/3)
gc_translate(dx^1.6*(dx%2*2-1)*(P.gameEnv.shakeFX+1)/30,dy^1.4*(dy%2*2-1)*(P.gameEnv.shakeFX+1)/30)
end
--Apply swingOffset
-- Apply swingOffset
local O=P.swingOffset
if P.gameEnv.shakeFX then
local k=P.gameEnv.shakeFX
@@ -136,11 +136,11 @@ local function _applyField(P)
gc_translate(150,0)
end
--Apply stencil
-- Apply stencil
gc_stencil(_stencilBoard)
gc_setStencilTest('equal',1)
--Move camera
-- Move camera
gc_push('transform')
_boardTransform(P.gameEnv.flipBoard)
gc_translate(0,P.fieldBeneath+P.fieldUp)
@@ -170,23 +170,23 @@ local function _drawField(P,showInvis)
local V,F=P.visTime,P.field
local start=int((P.fieldBeneath+P.fieldUp)/30+1)
local texture=P.skinLib
if P.falling==0 then--Blocks only
if P.falling==0 then-- Blocks only
if ENV.upEdge then
gc_setShader(shader_lighter)
gc_translate(0,-4)
--<drawRow>
-- <drawRow>
for j=start,min(start+21,#F) do _drawRow(texture,j,V[j],F[j]) end
--</drawRow>
-- </drawRow>
gc_setShader(shader_fieldSatur)
gc_translate(0,4)
else
gc_setShader(shader_fieldSatur)
end
--<drawRow>
-- <drawRow>
for j=start,min(start+21,#F) do _drawRow(texture,j,V[j],F[j],showInvis) end
--</drawRow>
else--With falling animation
-- </drawRow>
else-- With falling animation
local stepY=ENV.smooth and (P.falling/(ENV.fall+1))^1.6*30 or 30
local alpha=P.falling/ENV.fall
local h=1
@@ -194,7 +194,7 @@ local function _drawField(P,showInvis)
gc_push('transform')
gc_setShader(shader_lighter)
gc_translate(0,-4)
--<drawRow>
-- <drawRow>
for j=start,min(start+21,#F) do
while j==P.clearingRow[h] do
h=h+1
@@ -202,7 +202,7 @@ local function _drawField(P,showInvis)
end
_drawRow(texture,j,V[j],F[j])
end
--</drawRow>
-- </drawRow>
gc_setShader(shader_fieldSatur)
gc_pop()
h=1
@@ -211,7 +211,7 @@ local function _drawField(P,showInvis)
end
gc_push('transform')
--<drawRow>
-- <drawRow>
for j=start,min(start+21,#F) do
while j==P.clearingRow[h] do
h=h+1
@@ -221,13 +221,13 @@ local function _drawField(P,showInvis)
end
_drawRow(texture,j,V[j],F[j],showInvis)
end
--</drawRow>
-- </drawRow>
gc_pop()
end
gc_setShader()
end
local function _drawFXs(P)
--LockFX
-- LockFX
for i=1,#P.lockFX do
local S=P.lockFX[i]
if S[3]<.5 then
@@ -239,7 +239,7 @@ local function _drawFXs(P)
end
end
--DropFX
-- DropFX
for i=1,#P.dropFX do
local S=P.dropFX[i]
gc_setColor(1,1,1,.6-S[5]*.6)
@@ -247,7 +247,7 @@ local function _drawFXs(P)
gc_rectangle('fill',30*S[1]-30+15*S[3]-w*.5,-30*S[2],w,30*S[4])
end
--MoveFX
-- MoveFX
local texture=P.skinLib
for i=1,#P.moveFX do
local S=P.moveFX[i]
@@ -255,7 +255,7 @@ local function _drawFXs(P)
gc_draw(texture[S[1]],30*S[2]-30,-30*S[3])
end
--ClearFX
-- ClearFX
for i=1,#P.clearFX do
local S=P.clearFX[i]
local t=S[2]
@@ -383,12 +383,12 @@ local function _drawBuffer(atkBuffer,bufferWarn,atkBufferSum1,atkBufferSum)
local bar=A.amount*30
if h+bar>600 then bar=600-h end
if not A.sent then
--Appear
-- Appear
if A.time<20 then
bar=bar*(20*A.time)^.5*.05
end
if A.countdown>0 then
--Timing
-- Timing
gc_setColor(attackColor[A.lv][1])
gc_rectangle('fill',303,600-h-bar,11,bar,2)
gc_setColor(1,1,1)
@@ -398,7 +398,7 @@ local function _drawBuffer(atkBuffer,bufferWarn,atkBufferSum1,atkBufferSum)
gc_setColor(attackColor[A.lv][2])
gc_rectangle('fill',303,600-h-bar,11,bar*(1-A.countdown/A.cd0),2)
else
--Warning
-- Warning
local a=math.sin((TIME()-i)*30)*.5+.5
local c1,c2=attackColor[A.lv][1],attackColor[A.lv][2]
gc_setColor(c1[1]*a+c2[1]*(1-a),c1[2]*a+c2[2]*(1-a),c1[3]*a+c2[3]*(1-a))
@@ -408,7 +408,7 @@ local function _drawBuffer(atkBuffer,bufferWarn,atkBufferSum1,atkBufferSum)
gc_setColor(attackColor[A.lv][1])
bar=bar*(20-A.time)*.05
gc_rectangle('fill',303,600-h-bar,11,bar,2)
--Disappear
-- Disappear
end
h=h+bar
end
@@ -445,7 +445,7 @@ local function _drawB2Bbar(b2b,b2b1)
end
end
end
local function _drawLDI(easyFresh,length,freshTime)--Lock Delay Indicator
local function _drawLDI(easyFresh,length,freshTime)-- Lock Delay Indicator
if easyFresh then
gc_setColor(.97,.97,.97)
else
@@ -506,7 +506,7 @@ local function _drawNext(P,repMode)
gc_push('transform')
gc_translate(50,40)
--Draw nexts
-- Draw nexts
gc_setLineWidth(6)
gc_setColor(1,1,1,.2)
gc_setShader(shader_blockSatur)
@@ -540,7 +540,7 @@ local function _drawNext(P,repMode)
end
gc_setShader()
--Draw more nexts
-- Draw more nexts
if repMode then
gc_translate(50,-28)
local blockImg=TEXTURE.miniBlock
@@ -564,7 +564,7 @@ local function _drawNext(P,repMode)
end
if ENV.bagLine then
gc_setColor(.8,.8,.8,.8)
for i=-P.pieceCount%ENV.bagLine,N-1,ENV.bagLine do--i=phase
for i=-P.pieceCount%ENV.bagLine,N-1,ENV.bagLine do-- i=phase
gc_rectangle('fill',1,72*i+3,98,2)
end
end
@@ -624,7 +624,7 @@ local function _drawLife(life)
end
end
local function _drawMission(curMission,L,missionkill)
--Draw current mission
-- Draw current mission
setFont(35)
if missionkill then
gc_setColor(1,.7+.2*sin(TIME()*6.26),.4)
@@ -633,7 +633,7 @@ local function _drawMission(curMission,L,missionkill)
end
gc_print(ENUM_MISSION[L[curMission]],85,110)
--Draw next mission
-- Draw next mission
setFont(20)
for i=1,3 do
local m=L[curMission+i]
@@ -719,25 +719,25 @@ function draw.norm(P,repMode)
gc_translate(P.x,P.y)
gc_scale(P.size)
--Draw username
-- Draw username
setFont(30)
gc_setColor(.97,.97,.97)
GC.mStr(P.username,300,-60)
--Draw HUD
-- Draw HUD
if ENV.nextCount>0 then _drawNext(P,repMode) end
if ENV.holdMode=='hold' and ENV.holdCount>0 then _drawHold(P.holdQueue,ENV.holdCount,P.holdTime,P.skinLib) end
if P.curMission then _drawMission(P.curMission,ENV.mission,ENV.missionKill) end
_drawDial(499,505,P.dropSpeed)
if P.life>0 then _drawLife(P.life) end
--Field-related things
-- Field-related things
_applyField(P)
--Fill field
-- Fill field
gc_setColor(0,0,0,.6)
gc_rectangle('fill',0,-10-camDY,300,610)
--Draw grid
-- Draw grid
if ENV.grid then
gc_setColor(1,1,1,ENV.grid)
gc_draw(gridLines,0,-40-(camDY-camDY%30))
@@ -747,16 +747,16 @@ function draw.norm(P,repMode)
local fieldTop=-ENV.fieldH*30
--Draw dangerous area
-- Draw dangerous area
if fieldTop-camDY<610 then
gc_setColor(1,0,0,.26)
gc_rectangle('fill',0,fieldTop,300,-10-camDY-(600-fieldTop))
end
--Draw field
-- Draw field
_drawField(P,repMode)
--Draw line number
-- Draw line number
if ENV.lineNum then
setFont(20)
local dy=camDY<900 and 0 or camDY-camDY%300-600
@@ -772,19 +772,19 @@ function draw.norm(P,repMode)
end
end
--Draw spawn line
-- Draw spawn line
gc_setLineWidth(4)
gc_setColor(1,sin(t)*.4+.5,0,.5)
gc_rectangle('fill',0,fieldTop,300,4)
--Draw height limit line
-- Draw height limit line
gc_setColor(.4,.7+sin(t*12)*.3,1,.7)
gc_rectangle('fill',0,-ENV.heightLimit*30-FBN-2,300,4)
--Draw FXs
-- Draw FXs
_drawFXs(P)
--Draw current block
-- Draw current block
if P.alive and P.control and P.cur then
local C=P.cur
local curColor=C.color
@@ -793,7 +793,7 @@ function draw.norm(P,repMode)
local centerPos=C.RS.centerPos[C.id][C.dir]
local centerX=30*(P.curX+centerPos[2])-20
--Draw ghost & rotation center
-- Draw ghost & rotation center
local centerDisp=ENV.center and C.RS.centerDisp[C.id]
if ENV.ghost then
drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor)
@@ -807,7 +807,7 @@ function draw.norm(P,repMode)
local dy=ENV.smooth and P.ghoY~=P.curY and (P.dropDelay/ENV.drop-1)*30 or 0
gc_translate(0,-dy)
--Draw block & rotation center
-- Draw block & rotation center
if ENV.block then
_drawBlockOutline(P.cur.bk,P.curX,P.curY,P.skinLib[curColor],trans)
_drawBlock(P.cur.bk,P.curX,P.curY,P.skinLib[curColor])
@@ -821,13 +821,13 @@ function draw.norm(P,repMode)
gc_translate(0,dy)
end
--Draw next preview
-- Draw next preview
if ENV.nextPos then
if P.nextQueue[1] then _drawNextPreview(P.nextQueue[1],ENV.fieldH,P.fieldBeneath) end
if P.holdQueue[1] then _drawHoldPreview(P.holdQueue[1],ENV.fieldH,P.fieldBeneath) end
end
--Draw AI's drop destination
-- Draw AI's drop destination
if P.destFX then
local L=P.destFX
local texture=TEXTURE.puzzleMark[21]
@@ -836,7 +836,7 @@ function draw.norm(P,repMode)
end
end
--Board cover
-- Board cover
if ENV.hideBoard then
gc_stencil(hideBoardStencil[ENV.hideBoard])
gc_setStencilTest('equal',1)
@@ -857,14 +857,14 @@ function draw.norm(P,repMode)
gc_translate(0,-600)
gc_setStencilTest()
gc_pop()
--Draw Frame and buffers
-- Draw Frame and buffers
gc_setColor(P.frameColor)
gc_draw(playerborder,-17,-12)
_drawBuffer(P.atkBuffer,ENV.bufferWarn,P.atkBufferSum1,P.atkBufferSum)
_drawB2Bbar(P.b2b,P.b2b1)
_drawLDI(ENV.easyFresh,P.lockDelay/ENV.lock,P.freshTime)
--Draw target selecting pad
-- Draw target selecting pad
if ENV.layout=='royale' then
if P.atkMode then
gc_setColor(1,.8,0,min(P.swappingAtkMode,30)*.02)
@@ -879,7 +879,7 @@ function draw.norm(P,repMode)
end
end
--Spike
-- Spike
local sp,spt=P.spike,P.spikeTime
if ENV.showSpike and spt>0 and sp>=10 then
local rg=10/sp
@@ -892,18 +892,18 @@ function draw.norm(P,repMode)
mDraw(P.spikeText,x,y,nil,min(.3+(sp/26)*.4+spt/100*.3,1))
end
--Bonus texts
-- Bonus texts
TEXT.draw(P.bonus)
--Display Ys
-- Display Ys
-- gc_setLineWidth(6)
-- if P.curY then gc_setColor(COLOR.R)gc_line(0,611-P.curY*30,300,610-P.curY*30) end
-- if P.ghoY then gc_setColor(COLOR.G)gc_line(0,615-P.ghoY*30,300,615-P.ghoY*30) end
-- if P.minY then gc_setColor(COLOR.B)gc_line(0,619-P.minY*30,300,620-P.minY*30) end
-- gc_line(0,600-P.garbageBeneath*30,300,600-P.garbageBeneath*30)
-- gc_line(0,600-P.garbageBeneath*30,300,600-P.garbageBeneath*30)
gc_pop()
--Score & Time
-- Score & Time
setFont(25)
local tm=STRING.time(P.stat.time)
gc_setColor(0,0,0,.3)
@@ -914,10 +914,10 @@ function draw.norm(P,repMode)
gc_setColor(.85,.9,.97)
gc_print(tm,20,540)
--FinesseCombo
-- FinesseCombo
;(P.type=='remote' and _drawFinesseCombo_remote or _drawFinesseCombo_norm)(P)
--Mode informations
-- Mode informations
for i=1,#ENV.mesDisp do
gc_setColor(.97,.97,.97)
ENV.mesDisp[i](P,repMode)
@@ -929,7 +929,7 @@ function draw.norm(P,repMode)
gc_pop()
end
function draw.small(P)
--Update canvas
-- Update canvas
P.frameWait=P.frameWait-1
if P.frameWait==0 then
P.frameWait=10
@@ -939,7 +939,7 @@ function draw.small(P)
gc_origin()
gc_setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
--Field
-- Field
local F=P.field
local texture=SKIN.libMini[SETTING.skinSet]
for j=1,#F do
@@ -948,14 +948,14 @@ function draw.small(P)
end end
end
--Draw border
-- Draw border
if P.alive then
gc_setLineWidth(2)
gc_setColor(P.frameColor)
gc_rectangle('line',0,0,60,120)
end
--Draw badge
-- Draw badge
if P.gameEnv.layout=='royale' then
gc_setColor(1,1,1)
for i=1,P.strength do
@@ -963,7 +963,7 @@ function draw.small(P)
end
end
--Draw result
-- Draw result
if P.result then
gc_setColor(1,1,1,min(P.endCounter,60)*.01)
setFont(20)mDraw(TEXTOBJ[P.result],30,60,nil,P.size)
@@ -973,7 +973,7 @@ function draw.small(P)
gc_setCanvas()
end
--Draw Canvas
-- Draw Canvas
gc_setColor(1,1,1)
local size=P.size
gc_draw(P.canvas,P.x,P.y,nil,size*10)
@@ -985,7 +985,7 @@ end
function draw.demo(P)
local ENV=P.gameEnv
--Camera
-- Camera
gc_push('transform')
gc_translate(P.x,P.y)
gc_scale(P.size)
@@ -1017,7 +1017,7 @@ function draw.demo(P)
local blockImg=TEXTURE.miniBlock
local skinSet=ENV.skin
--Draw hold
-- Draw hold
local N=1
while P.holdQueue[N] do
local id=P.holdQueue[N].id
@@ -1028,7 +1028,7 @@ function draw.demo(P)
N=N+1
end
--Draw next
-- Draw next
N=1
while N<=ENV.nextCount and P.nextQueue[N] do
local id=P.nextQueue[N].id
@@ -1039,7 +1039,7 @@ function draw.demo(P)
N=N+1
end
--Frame
-- Frame
gc_setLineWidth(2)
gc_setColor(COLOR.Z)
gc_rectangle('line',-1,-1,302,602,3)

View File

@@ -41,11 +41,11 @@ local function _newEmptyPlayer(id,mini)
PLAYERS[id]=P
PLY_ALIVE[id]=P
--Inherit functions of Player class
-- Inherit functions of Player class
for k,v in next,Player do P[k]=v end
--Field position
P.swingOffset={--Shake FX
-- Field position
P.swingOffset={-- Shake FX
x=0,y=0,
vx=0,vy=0,
a=0,va=0,
@@ -54,12 +54,12 @@ local function _newEmptyPlayer(id,mini)
P.x,P.y,P.size=0,0,1
P.frameColor=COLOR.Z
--Set these at Player:setPosition()
-- Set these at Player:setPosition()
-- P.fieldX,P.fieldY=...
-- P.centerX,P.centerY=...
-- P.absFieldX,P.absFieldY=...
--Minimode
-- Minimode
P.miniMode=mini
if mini then
P.canvas=love.graphics.newCanvas(60,120)
@@ -69,37 +69,37 @@ local function _newEmptyPlayer(id,mini)
P.draw=ply_draw.norm
end
--States
-- States
P.type='none'
P.sound=false
P.alive=true
P.control=false
P.timing=false
P.trigFrame=0
P.result=false--String: 'finish'|'win'|'lose'
P.result=false-- String: 'finish'|'win'|'lose'
P.stat=_getNewStatTable()
P.modeData=setmetatable({},modeDataMeta)--Data use by mode
P.modeData=setmetatable({},modeDataMeta)-- Data use by mode
P.keyPressing={} for i=1,12 do P.keyPressing[i]=false end
P.clearingRow,P.clearedRow={},{}--Clearing animation height,cleared row mark
P.clearingRow,P.clearedRow={},{}-- Clearing animation height,cleared row mark
P.dropFX,P.moveFX,P.lockFX,P.clearFX={},{},{},{}
-- P.destFX={}--Normally created by bot
-- P.destFX={}-- Normally created by bot
P.tasks={}
P.bonus={}--Texts
P.bonus={}-- Texts
--Times
P.frameRun=GAME.frameStart--Frame run, mainly for replay
P.endCounter=0--Used after gameover
-- Times
P.frameRun=GAME.frameStart-- Frame run, mainly for replay
P.endCounter=0-- Used after gameover
P.dropTime={} for i=1,10 do P.dropTime[i]=-1e99 end P.dropSpeed=0
P.stream={}
P.streamProgress=false--1 to start play recording
P.streamProgress=false-- 1 to start play recording
--Randomizers
-- Randomizers
P.seqRND=love.math.newRandomGenerator(GAME.seed)
P.atkRND=love.math.newRandomGenerator(GAME.seed)
P.holeRND=love.math.newRandomGenerator(GAME.seed)
P.aiRND=love.math.newRandomGenerator(GAME.seed+P.id)
--Field-related
-- Field-related
P.field,P.visTime={},{}
P.keepVisible=true
P.showTime=false
@@ -107,25 +107,25 @@ local function _newEmptyPlayer(id,mini)
P.fieldBeneath=0
P.fieldUp=0
--Attack-related
-- Attack-related
P.atkBuffer={}
P.atkBufferSum,P.atkBufferSum1=0,0
P.spike,P.spikeTime=0,0
P.spikeText=love.graphics.newText(getFont(100))
--Attacker-related
-- Attacker-related
P.badge,P.strength=0,0
P.atkMode,P.swappingAtkMode=1,20
P.atker,P.atking,P.lastRecv={}
--User-related
-- User-related
P.username=""
P.uid=false
P.sid=id
--Block states
-- Block states
--[[
P.curX,P.curY,P.ghoY,P.minY=0,0,0,0--x,y,ghostY
P.curX,P.curY,P.ghoY,P.minY=0,0,0,0-- x,y,ghostY
P.cur={
id=shapeID,
bk=matrix[2],
@@ -134,66 +134,66 @@ local function _newEmptyPlayer(id,mini)
name=nameID
color=colorID,
}
P.newNext=false--Warped coroutine to get new next, loaded in applyGameEnv()
P.newNext=false-- Warped coroutine to get new next, loaded in applyGameEnv()
]]
P.movDir,P.moving,P.downing=0,0,-1--Last move key,DAS charging,downDAS charging
P.movDir,P.moving,P.downing=0,0,-1-- Last move key,DAS charging,downDAS charging
P.dropDelay,P.lockDelay=0,0
P.waiting,P.falling=0,0
P.freshTime=0
P.spinLast=false
P.ctrlCount=0--Key press time, for finesse check
P.ctrlCount=0-- Key press time, for finesse check
--Game states
-- Game states
P.combo=0
P.b2b,P.b2b1=0,0--B2B point & Displayed B2B point
P.score1=0--Displayed score
P.pieceCount=0--Count pieces from next, for drawing bagline
P.b2b,P.b2b1=0,0-- B2B point & Displayed B2B point
P.score1=0-- Displayed score
P.pieceCount=0-- Count pieces from next, for drawing bagline
P.finesseCombo,P.finesseComboTime=0,0
P.nextQueue={}
P.holdQueue={}
P.holdTime=0
P.lastPiece={
id=0,name=0,--block id/name
id=0,name=0,-- block id/name
curX=0,curY=0,--block position
centX=0,centY=0,--center position
dir=0,--direction
curX=0,curY=0,-- block position
centX=0,centY=0,-- center position
dir=0,-- direction
frame=-1e99,--lock time
autoLock=true,--if lock with gravity
frame=-1e99,-- lock time
autoLock=true,-- if lock with gravity
finePts=0,--finesse Points
finePts=0,-- finesse Points
row=0,dig=0,--lines/garbage cleared
score=0,--score gained
atk=0,exblock=0,--lines attack/defend
off=0,send=0,--lines offset/sent
row=0,dig=0,-- lines/garbage cleared
score=0,-- score gained
atk=0,exblock=0,-- lines attack/defend
off=0,send=0,-- lines offset/sent
spin=false,mini=false,--if spin/mini
pc=false,hpc=false,--if pc/hpc
special=false,--if special clear (spin, >=4, pc)
spin=false,mini=false,-- if spin/mini
pc=false,hpc=false,-- if pc/hpc
special=false,-- if special clear (spin, >=4, pc)
}
return P
end
local function _loadGameEnv(P)--Load gameEnv
P.gameEnv={}--Current game setting environment
local function _loadGameEnv(P)-- Load gameEnv
P.gameEnv={}-- Current game setting environment
local ENV=P.gameEnv
local GAME,SETTING=GAME,SETTING
--Load game settings
-- Load game settings
for k,v in next,gameEnv0 do
if GAME.modeEnv[k]~=nil then
v=GAME.modeEnv[k] --Mode setting
v=GAME.modeEnv[k] -- Mode setting
-- print("mode-"..k..":"..tostring(v))
elseif GAME.setting[k]~=nil then
v=GAME.setting[k] --Game setting
v=GAME.setting[k] -- Game setting
-- print("game-"..k..":"..tostring(v))
elseif SETTING[k]~=nil then
v=SETTING[k] --Global setting
v=SETTING[k] -- Global setting
-- print("global-"..k..":"..tostring(v))
-- else
-- print("default-"..k..":"..tostring(v))
end
if type(v)~='table' then --Default setting
if type(v)~='table' then -- Default setting
ENV[k]=v
else
ENV[k]=TABLE.copy(v)
@@ -205,26 +205,26 @@ local function _loadGameEnv(P)--Load gameEnv
end
end
end
local function _loadRemoteEnv(P,confStr)--Load gameEnv
local function _loadRemoteEnv(P,confStr)-- Load gameEnv
confStr=JSON.decode(confStr)
if not confStr then
confStr={}
MES.new('warn',"Bad conf from "..P.username.."#"..P.uid)
end
P.gameEnv={}--Current game setting environment
P.gameEnv={}-- Current game setting environment
local ENV=P.gameEnv
local GAME,SETTING=GAME,SETTING
--Load game settings
-- Load game settings
for k,v in next,gameEnv0 do
if GAME.modeEnv[k]~=nil then
v=GAME.modeEnv[k] --Mode setting
v=GAME.modeEnv[k] -- Mode setting
elseif confStr[k]~=nil then
v=confStr[k] --Game setting
v=confStr[k] -- Game setting
elseif SETTING[k]~=nil then
v=SETTING[k] --Global setting
v=SETTING[k] -- Global setting
end
if type(v)~='table' then--Default setting
if type(v)~='table' then-- Default setting
ENV[k]=v
else
ENV[k]=TABLE.copy(v)
@@ -241,16 +241,16 @@ local function _mergeFuncTable(f,L)
end
return L
end
local function _applyGameEnv(P)--Finish gameEnv processing
local function _applyGameEnv(P)-- Finish gameEnv processing
local ENV=P.gameEnv
--Apply events
-- Apply events
ENV.mesDisp=_mergeFuncTable(ENV.mesDisp,{})
ENV.hook_drop=_mergeFuncTable(ENV.hook_drop,{})
ENV.hook_die=_mergeFuncTable(ENV.hook_die,{})
ENV.task=_mergeFuncTable(ENV.task,{})
--Apply eventSet
-- Apply eventSet
if ENV.eventSet and ENV.eventSet~="X" then
if type(ENV.eventSet)=='string' then
local eventSet=require('parts.eventsets.'..ENV.eventSet)
@@ -362,7 +362,7 @@ local function _applyGameEnv(P)--Finish gameEnv processing
if ENV.center==0 then ENV.center=false end
if ENV.lineNum==0 then ENV.lineNum=false end
--Load tasks
-- Load tasks
for i=1,#ENV.task do P:newTask(ENV.task[i]) end
end
--------------------------</Libs>--------------------------

File diff suppressed because it is too large Load Diff

View File

@@ -23,10 +23,10 @@ local seqGenerators={
local rndGen=P.seqRND
local len=#seq0
local bag=TABLE.shift(seq0)
do--Get a good first-bag
--Shuffle
do-- Get a good first-bag
-- Shuffle
for i=1,len-1 do ins(bag,rem(bag,rndGen:random(len-i+1))) end
--Skip Uncomfortable minoes
-- Skip Uncomfortable minoes
for _=1,len-1 do
if
bag[1]==1 or bag[1]==2 or bag[1]==6 or bag[1]==8 or bag[1]==9 or
@@ -39,7 +39,7 @@ local seqGenerators={
break
end
end
--Finish
-- Finish
for i=1,len do P:getNext(bag[i]) end
end
bag={}
@@ -63,7 +63,7 @@ local seqGenerators={
while true do
while #P.nextQueue<10 do
local r
for _=1,hisLen do--Reroll up to [hisLen] times
for _=1,hisLen do-- Reroll up to [hisLen] times
r=rndGen:random(len)
for i=1,hisLen do
if r==history[i] then
@@ -86,17 +86,17 @@ local seqGenerators={
local rndGen=P.seqRND
local len=#seq0
local hisLen=math.ceil(len*.5)
local history=TABLE.new(0,hisLen)--Indexes of mino-index
local history=TABLE.new(0,hisLen)-- Indexes of mino-index
local poolLen=5*len
local droughtTimes=TABLE.new(len,len)--Drought times of seq0
local pool={} for i=1,len do for _=1,5 do ins(pool,i) end end--5 times indexes of seq0
local droughtTimes=TABLE.new(len,len)-- Drought times of seq0
local pool={} for i=1,len do for _=1,5 do ins(pool,i) end end-- 5 times indexes of seq0
local function _poolPick()
local r=rndGen:random(poolLen)
local res=pool[r]
--Find droughtest(s) minoes
local droughtList={1}--Droughtst minoes' indexes of seq0
-- Find droughtest(s) minoes
local droughtList={1}-- Droughtst minoes' indexes of seq0
local maxTime=droughtTimes[1]
for i=2,len do
if droughtTimes[i]>maxTime then
@@ -111,11 +111,11 @@ local seqGenerators={
end
end
--Update droughtTimes
-- Update droughtTimes
for i=1,len do droughtTimes[i]=droughtTimes[i]+1 end
droughtTimes[res]=0
--Update pool
-- Update pool
-- print("Rem "..res)
pool[r]=droughtList[rndGen:random(#droughtList)]
-- print("Add "..pool[r])
@@ -126,10 +126,10 @@ local seqGenerators={
while true do
while #P.nextQueue<10 do
-- print"======================"
--Pick a mino from pool
-- Pick a mino from pool
local tryTime=0
::REPEAT_pickAgain::
local r=_poolPick()--Random mino-index in pool
local r=_poolPick()-- Random mino-index in pool
for i=1,len do
if r==history[i] then
tryTime=tryTime+1
@@ -139,7 +139,7 @@ local seqGenerators={
end
end
--Give mino to player & update history
-- Give mino to player & update history
if history[1]~=0 then
P:getNext(seq0[r])
end
@@ -263,7 +263,7 @@ local seqGenerators={
end
end,
}
return function(P)--Return a piece-generating function for player P
return function(P)-- Return a piece-generating function for player P
local s=P.gameEnv.sequence
if type(s)=='function' then
return s

View File

@@ -24,18 +24,18 @@ function scene.keyDown(key)
end
function scene.draw()
--Texts
-- Texts
setFont(20)
gc.setColor(COLOR.Z)
for i=1,#text.aboutTexts do
gc.print(text.aboutTexts[i],62,35*i)
end
--Lib used
-- Lib used
setFont(15)
gc.print(text.used,495,426)--❤Flandre❤
gc.print(text.used,495,426)-- ❤Flandre❤
--Logo
-- Logo
gc.draw(TEXTURE.title,280,610,.1,.4+.03*sin(TIME()*2.6),nil,580,118)
end

View File

@@ -198,31 +198,31 @@ local frontColor={
COLOR.lG,COLOR.lB,COLOR.lB,COLOR.lB,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
},--Colored(rank)
},-- Colored(rank)
rainbow={
COLOR.lR,COLOR.lR,COLOR.lR,COLOR.lR,
COLOR.lO,COLOR.lY,COLOR.lY,COLOR.lY,
COLOR.lO,COLOR.lG,COLOR.lB,COLOR.lB,
COLOR.lO,COLOR.lG,COLOR.lB,COLOR.lB,
},--Rainbow(rank)
},-- Rainbow(rank)
color2={
COLOR.lR,COLOR.lR,COLOR.lR,COLOR.lR,
COLOR.lB,COLOR.lB,COLOR.lB,COLOR.lB,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
},--Colored(row)
},-- Colored(row)
gray={
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
},--Gray
},-- Gray
black={
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
},--Black
},-- Black
}
local backColor={
color1={
@@ -230,31 +230,31 @@ local backColor={
COLOR.dG,COLOR.dB,COLOR.dB,COLOR.dB,
COLOR.dG,COLOR.dY,COLOR.dP,COLOR.dP,
COLOR.dG,COLOR.dY,COLOR.dP,COLOR.dP,
},--Colored(rank)
},-- Colored(rank)
rainbow={
COLOR.dR,COLOR.dR,COLOR.dR,COLOR.dR,
COLOR.dO,COLOR.dY,COLOR.dY,COLOR.dY,
COLOR.dO,COLOR.dG,COLOR.dB,COLOR.dB,
COLOR.dO,COLOR.dG,COLOR.dB,COLOR.dB,
},--Rainbow(rank)
},-- Rainbow(rank)
color2={
COLOR.dR,COLOR.dR,COLOR.dR,COLOR.dR,
COLOR.dB,COLOR.dB,COLOR.dB,COLOR.dB,
COLOR.dG,COLOR.dY,COLOR.dP,COLOR.dP,
COLOR.dG,COLOR.dY,COLOR.dP,COLOR.dP,
},--Colored(row)
},-- Colored(row)
gray={
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
},--Gray
},-- Gray
black={
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
},--Black
},-- Black
}
function scene.draw()
FONT.set(40)
@@ -266,15 +266,15 @@ function scene.draw()
gc.print(push,1026,180)
if state==2 then
--Draw no-setting area
-- Draw no-setting area
gc.setColor(1,0,0,.3)
gc.rectangle('fill',15,295,285,340)
gc.setColor(.9,.9,0)--win
gc.setColor(.9,.9,0)-- win
elseif state==1 then
gc.setColor(.9,.9,.9)--game
gc.setColor(.9,.9,.9)-- game
elseif state==0 then
gc.setColor(.2,.8,.2)--ready
gc.setColor(.2,.8,.2)-- ready
end
gc.setLineWidth(10)
gc.rectangle('line',313,33,654,654,18)

View File

@@ -54,13 +54,13 @@ local tileColor={
{.22,.19,.17},
}
local tileFont={
80,80,80,--2/4/8
70,70,70,--16/32/64
60,60,60,--128/256/512
55,55,55,55,--1024/2048/4096/8192
50,50,50,--16384/32768/65536
45,45,45,--131072/262144/524288
30,--1048576
80,80,80,-- 2/4/8
70,70,70,-- 16/32/64
60,60,60,-- 128/256/512
55,55,55,55,-- 1024/2048/4096/8192
50,50,50,-- 16384/32768/65536
45,45,45,-- 131072/262144/524288
30,-- 1048576
}
local tileName={[0]="X","2","4","8","16","32","64","128","256","512","1024","2048","4096","8192","16384","32768","65536","131072","262144","524288","2^20"}
local function airExist()
@@ -71,7 +71,7 @@ local function airExist()
end
end
local function newTile()
--Select position & generate number
-- Select position & generate number
nextPos=(nextPos+6)%16+1
while board[nextPos] do
nextPos=(nextPos-4)%16+1
@@ -80,11 +80,11 @@ local function newTile()
prevPos=nextPos
prevSpawnTime=0
--Fresh score
-- Fresh score
score=score+2^nextTile
TEXT.show("+"..2^nextTile,1130+rnd(-60,60),575+rnd(-30,30),30,'score',1.5)
--Generate next number
-- Generate next number
nextCD=nextCD-1
if nextCD>0 then
nextTile=1
@@ -93,10 +93,10 @@ local function newTile()
nextCD=rnd(8,12)
end
--Check if board is full
-- Check if board is full
if airExist() then return end
--Check if board is locked in all-directions
-- Check if board is locked in all-directions
for i=1,12 do
if board[i]==board[i+4] then
return
@@ -112,7 +112,7 @@ local function newTile()
end
end
--Die.
-- Die.
state=2
SFX.play(maxTile>=10 and 'win' or 'fail')
end
@@ -139,10 +139,10 @@ local function squash(L)
p1=p1+1
end
else
if not L[p1] then--air←2
if not L[p1] then-- air←2
L[p1],L[p2]=L[p2],false
moved=true
elseif L[p1]==L[p2] then--2←2
elseif L[p1]==L[p2] then-- 2←2
L[p1],L[p2]=L[p1]+1,false
if L[p1]>maxTile then
freshMaxTile()
@@ -150,11 +150,11 @@ local function squash(L)
L[p2]=false
p1=p1+1
moved=true
elseif p1+1~=p2 then--2←4
elseif p1+1~=p2 then-- 2←4
L[p1+1],L[p2]=L[p2],false
p1=p1+1
moved=true
else--2,4
else-- 2,4
p1=p1+1
end
end
@@ -351,14 +351,14 @@ function scene.draw()
gc.print(("%.3f"):format(time),1000,10)
gc.print(move,1000,45)
--Progress time list
-- Progress time list
setFont(20)
setColor(.6,.6,.6)
for i=1,#progress do
gc.print(progress[i],1000,65+20*i)
end
--Repeater
-- Repeater
gc.setLineWidth(6)
setFont(25)
for i=1,2 do
@@ -377,27 +377,27 @@ function scene.draw()
gc.print(repeater.seq[i],1000,313+60*i)
end
--Score
-- Score
setFont(40)
setColor(1,.7,.7)
GC.mStr(score,1130,510)
--Messages
-- Messages
if state==2 then
--Draw no-setting area
-- Draw no-setting area
setColor(1,0,0,.3)
rectangle('fill',15,265,285,140)
setColor(.9,.9,0)--win
setColor(.9,.9,0)-- win
elseif state==1 then
setColor(.9,.9,.9)--game
setColor(.9,.9,.9)-- game
elseif state==0 then
setColor(.2,.8,.2)--ready
setColor(.2,.8,.2)-- ready
end
gc.setLineWidth(10)
rectangle('line',310,30,660,660)
--Board
-- Board
for i=1,16 do
if board[i] then
local x,y=1+(i-1)%4,int((i+3)/4)
@@ -429,7 +429,7 @@ function scene.draw()
end
end
--Next indicator
-- Next indicator
setColor(1,1,1)
if nextCD<=12 then
for i=1,nextCD do
@@ -437,7 +437,7 @@ function scene.draw()
end
end
--Next
-- Next
setFont(40)
gc.print("Next",50,195)
if nextTile>1 then
@@ -446,27 +446,27 @@ function scene.draw()
setFont(70)
GC.mStr(tileName[nextTile],220,175)
--Skip CoolDown
-- Skip CoolDown
if skipper.cd and skipper.cd>0 then
setFont(50)
setColor(1,1,.5)
GC.mStr(skipper.cd,155,600)
end
--Skip mark
-- Skip mark
if skipper.used then
setColor(1,1,.5)
gc.circle('fill',280,675,10)
end
--New tile position
-- New tile position
local x,y=1+(prevPos-1)%4,int((prevPos+3)/4)
gc.setLineWidth(8)
setColor(.2,.8,0,prevSpawnTime)
local d=25-prevSpawnTime*25
rectangle('line',x*160+163-d,y*160-117-d,154+2*d,154+2*d,15)
--Touch control border line
-- Touch control border line
if tapControl then
gc.setLineWidth(6)
setColor(1,1,1,.2)

View File

@@ -96,11 +96,11 @@ function scene.draw()
end
if state==2 then
gc.setColor(.9,.9,0)--win
gc.setColor(.9,.9,0)-- win
elseif state==1 then
gc.setColor(.9,.9,.9)--game
gc.setColor(.9,.9,.9)-- game
elseif state==0 then
gc.setColor(.2,.8,.2)--ready
gc.setColor(.2,.8,.2)-- ready
end
FONT.set(100)

View File

@@ -130,15 +130,15 @@ scene.touchUp=scene.mouseDown
function scene.draw()
gc.push('transform')
--origin pos:0,140; scale:4
-- origin pos:0,140; scale:4
gc.translate(280,0)
gc.scale(8)
--Draw board
-- Draw board
gc.setColor(COLOR.dX)
gc.rectangle('fill',0,0,90,90)
--Draw target area
-- Draw target area
gc.setColor(1,1,1,math.sin((TIME()-placeTime)*5)*.1+.15)
if target then
gc.rectangle('fill',(target-1)%3*30,int((target-1)/3)*30,30,30)
@@ -146,7 +146,7 @@ function scene.draw()
gc.rectangle('fill',0,0,90,90)
end
--Draw cursor
-- Draw cursor
if curX then
gc.setColor(1,1,1,.3)
gc.rectangle('fill',(curX-1)%3*30+(curx-1)%3*10-.5,int((curX-1)/3)*30+int((curx-1)/3)*10-.5,11,11)
@@ -181,7 +181,7 @@ function scene.draw()
end
end
--Draw board line
-- Draw board line
gc.setLineWidth(.8)
for x=0,9 do
gc.setColor(1,1,1,x%3==0 and 1 or .3)
@@ -189,7 +189,7 @@ function scene.draw()
gc.line(0,10*x,90,10*x)
end
--Draw last pos
-- Draw last pos
if lastX then
gc.setColor(.5,1,.4,.8)
local r=.5+.5*math.sin(TIME()*6.26)
@@ -198,7 +198,7 @@ function scene.draw()
gc.pop()
if gameover then
--Draw result
-- Draw result
FONT.set(60)
if gameover==0 then
gc.setColor(1,.6,.6)
@@ -211,7 +211,7 @@ function scene.draw()
GC.mStr("TIE",1140,240)
end
else
--Draw current round mark
-- Draw current round mark
gc.setColor(COLOR.X)
gc.rectangle('fill',80,80,160,160)
gc.setColor(COLOR.Z)

View File

@@ -12,9 +12,9 @@ local keySounds={
local scene={}
local reg--register
local val--result value
local sym--symbol
local reg-- register
local val-- result value
local sym-- symbol
local function _autoReturn()
if reg and sym then

View File

@@ -75,24 +75,24 @@ function scene.update()
end
local scoreColor={
'Z',--0
'A',--20
'N',--40
'B',--60
'P',--80
'W',--100
'R','F','O','Y','lA',--200
'lN','lB','lP','lW','lR',--300
'lF','lO','lY','dA','dN',--400
'dB','dP','dW','dR','dF',--500
'dY','lH','H','dH',--before 600, black after
'Z',-- 0
'A',-- 20
'N',-- 40
'B',-- 60
'P',-- 80
'W',-- 100
'R','F','O','Y','lA',-- 200
'lN','lB','lP','lW','lR',-- 300
'lF','lO','lY','dA','dN',-- 400
'dB','dP','dW','dR','dF',-- 500
'dY','lH','H','dH',-- before 600, black after
}
function scene.draw()
--Spawn area
-- Spawn area
gc.setColor(1,1,1,.2)
gc.rectangle('fill',85,0,190,720)
--Power & Angle
-- Power & Angle
gc.setColor(COLOR.Z)
if state~=2 then
gc.setLineWidth(2)
@@ -104,7 +104,7 @@ function scene.draw()
end
end
--Info
-- Info
FONT.set(40)
if combo>1 then
gc.setColor(1,1,.6)
@@ -113,15 +113,15 @@ function scene.draw()
gc.setColor(COLOR[scoreColor[int(score/20)+1] or 'D'])
gc.print(score,300,30)
--Cannon ball
-- Cannon ball
gc.circle('fill',x,y,15)
--Arrow
-- Arrow
if y<-15 then
gc.print("",x-20.5,0)
end
--Target
-- Target
gc.setColor(1,1,.4)
gc.circle('fill',ex,ey,15)
end

View File

@@ -27,13 +27,13 @@ local commands={} do
details: an array of strings containing documents, shows when user types 'help [command]'.
]]
local cmdList={}--List of all non-alias commands
local cmdList={}-- List of all non-alias commands
--Basic
-- Basic
commands.help={
code=function(arg)
if #arg>0 then
--help [command]
-- help [command]
if commands[arg] then
if commands[arg].description then
log{C.H,("%s"):format(commands[arg].description)}
@@ -47,7 +47,7 @@ local commands={} do
log{C.Y,("No command called '%s'"):format(arg)}
end
else
--help
-- help
for i=1,#cmdList do
local cmd=cmdList[i]
local body=commands[cmd]
@@ -111,8 +111,8 @@ local commands={} do
},
}
--File
do--tree
-- File
do-- tree
local function tree(path,name,depth)
local info=love.filesystem.getInfo(path..name)
if info.type=='file' then
@@ -144,7 +144,7 @@ local commands={} do
},
}
end
do--del
do-- del
local function delFile(name)
if love.filesystem.remove(name) then
log{C.Y,("Deleted: '%s'"):format(name)}
@@ -231,7 +231,7 @@ local commands={} do
end
commands.mv={
code=function(arg)
--Check arguments
-- Check arguments
arg=arg:split(" ")
if #arg>2 then
log{C.lY,"Warning: file names must have no spaces"}
@@ -241,7 +241,7 @@ local commands={} do
return
end
--Check file exist
-- Check file exist
local info
info=love.filesystem.getInfo(arg[1])
if not (info and info.type=='file') then
@@ -254,21 +254,21 @@ local commands={} do
return
end
--Read file
-- Read file
local data,err1=love.filesystem.read('data',arg[1])
if not data then
log{C.R,("Failed to read file '%s': "):format(arg[1],err1 or "Unknown error")}
return
end
--Write file
-- Write file
local res,err2=love.filesystem.write(arg[2],data)
if not res then
log{C.R,("Failed to write file: "):format(err2 or "Unknown error")}
return
end
--Delete file
-- Delete file
if not love.filesystem.remove(arg[1]) then
log{C.R,("Failed to delete old file ''"):format(arg[1])}
return
@@ -315,7 +315,7 @@ local commands={} do
},
}
--System
-- System
commands.crash={
code=function() error("ERROR") end,
description="Manually crash the game",
@@ -545,7 +545,7 @@ local commands={} do
"Usage: support",
},
}
do--app
do-- app
local APPs={
{
code="calc",
@@ -754,7 +754,7 @@ local commands={} do
end,
}
--Game
-- Game
commands.rmconf={
code=function(key)
if #key>0 then
@@ -869,7 +869,7 @@ local commands={} do
description="Show a random tip",
}
--Network
-- Network
commands.switchhost={
code=function(arg)
arg=arg:split(" ")
@@ -944,7 +944,7 @@ local combKey={
end,
}
--Environment for user's function
-- Environment for user's function
local userG={
timer=TIME,
@@ -992,7 +992,7 @@ setmetatable(userG.package,dangerousLibMeta)
setmetatable(userG.io,dangerousLibMeta)
setmetatable(userG.os,dangerousLibMeta)
--Puzzle box
-- Puzzle box
local first_key={}
local fleg={
pw=the_secret,
@@ -1028,16 +1028,16 @@ function scene.keyDown(key)
local input=STRING.trim(inputBox:getText())
if input=="" then return end
--Write History
-- Write History
ins(history,input)
if history[27] then
rem(history,1)
end
hisPtr=nil
--Execute
-- Execute
if input:byte()==35 then
--Execute lua code
-- Execute lua code
log{C.lC,"> "..input}
local code,err=loadstring(input:sub(2))
if code then
@@ -1062,7 +1062,7 @@ function scene.keyDown(key)
log{C.R,"[SyntaxErr] ",C.R,err}
end
else
--Execute builtin command
-- Execute builtin command
log{C.lS,"> "..input}
local p=input:find(" ")
local cmd,arg
@@ -1081,7 +1081,7 @@ function scene.keyDown(key)
end
inputBox:clear()
--Insert empty line
-- Insert empty line
log""
elseif key=='up' then
if not hisPtr then

View File

@@ -125,7 +125,7 @@ function scene.update(dt)
if dt>.06 then dt=.06 end
dt=dt*600
--Update cubes' position
-- Update cubes' position
local cy=cubesY
local step=speed*dt*.005
for i=1,40 do
@@ -141,7 +141,7 @@ function scene.update(dt)
end
end
--Collision detect
-- Collision detect
if play then
for j=1,40 do
local i=(j+lastCube-2)%40+1
@@ -159,7 +159,7 @@ function scene.update(dt)
end
end
--Screen rotation
-- Screen rotation
if moveDir~=0 then
player=player+moveDir*dt*.003*speed^.8
if abs(rot)<.16 or moveDir*rot>0 then
@@ -220,42 +220,42 @@ local function _sunStencil()
gc.rectangle('fill',-60,-440,120,120)
end
function scene.draw()
--Health bar
-- Health bar
if life1>0 then
gc.setColor(1,0,0)
gc.rectangle('fill',640-life1*.64,710,life1*1.28,10)
end
--Draw player
-- Draw player
if play and inv%8<4 then
gc.setColor(COLOR.Z)
gc.rectangle('fill',620,670,40,40)
end
--Set screen rotation
-- Set screen rotation
gc.push('transform')
gc.translate(640,690)
gc.rotate(rot)
--Draw sun
-- Draw sun
gc.setStencilTest('notequal',1)
gc.stencil(_sunStencil)
gc.setColor(.7,.5,.3)
gc.circle('fill',0,-380-sunH,60)
gc.setStencilTest()
--Draw direction
-- Draw direction
if play then
gc.setLineWidth(3)
gc.setColor(1,1,1,.1)
gc.polygon('fill',-15,30,0,-440,15,30)
end
--Draw Horizon/Direction
-- Draw Horizon/Direction
gc.setColor(COLOR.Z)
gc.line(-942,-440,942,-440)
--Draw cubes
-- Draw cubes
for j=1,40 do
local i=(j+lastCube-2)%40+1
local Y=cubesY[i]
@@ -273,7 +273,7 @@ function scene.draw()
end
end
--Draw menu
-- Draw menu
if play then
setFont(60)
mStr(int(score),-300,-640)

View File

@@ -2,9 +2,9 @@ local gc=love.graphics
local rnd,int,max=math.random,math.floor,math.max
local setFont,mStr=FONT.set,GC.mStr
--This mini-game is written for TI-nSpire CX CAS many years ago.
--Deliberately, some grammar mistakes and typos in the 'great' list remained.
--So no need to correct them.
-- This mini-game is written for TI-nSpire CX CAS many years ago.
-- Deliberately, some grammar mistakes and typos in the 'great' list remained.
-- So no need to correct them.
local perfect={"Perfect!","Excellent!","Nice!","Good!","Great!","Just!","300"}
local great={"Pay attention!","Be carefully!","Teacher behind you!","Feel tired?","You are in danger!","Do your homework!","A good game!","Minecraft!","y=ax^2+bx+c!","No music?","Internet unavailable.","It's raining!","Too hard!","Shorter?","Higher!","English messages!","Hi!","^_^","Drop!","Colorful!",":)","100$","~~~wave~~~","★★★","中文!","NOW!!!!!","Also try the TEN!","I'm a programer!","Also try minesweeperZ!","This si Dropper!","Hold your calculatoor!","Look! UFO!","Bonjour!","[string]","Author:MrZ","Boom!","PvZ!","China!","TI-nspire!","I love LUA!"}
@@ -175,7 +175,7 @@ backColor.__index=function(t,lv)
end
setmetatable(backColor,backColor)
function scene.draw()
--Background
-- Background
local lv,height=int(camY/700),camY%700
gc.setColor(backColor[lv+1] or COLOR.D)
gc.rectangle('fill',0,720,1280,height-700)
@@ -205,7 +205,7 @@ function scene.draw()
gc.print("Ported / Rewritten / Balanced by MrZ",740,260)
end
if state~='menu' then
--High floor
-- High floor
gc.setColor(COLOR.Z)
gc.setLineWidth(2)
local y=690+camY-30*highFloor

View File

@@ -20,7 +20,7 @@ local keyTime
local speed,maxSpeed
local arcade,rollSpeed
local reset=error--function, defined later
local reset=error-- function, defined later
local bgm="secret7th"
local tileColor="black"
@@ -134,37 +134,37 @@ local generator={
Singlestream=function()
ins(pos,get1(pos[#pos] or 0))
end,
Light_Jumpstream=function()--2111
Light_Jumpstream=function()-- 2111
ins(pos,get2(pos[#pos] or 0))
ins(pos,get1(pos[#pos]))
ins(pos,get1(pos[#pos]))
ins(pos,get1(pos[#pos]))
end,
Dense_Jumpstream=function()--2121
Dense_Jumpstream=function()-- 2121
ins(pos,get2(pos[#pos] or 0))
ins(pos,get1(pos[#pos]))
ins(pos,get2(pos[#pos]))
ins(pos,get1(pos[#pos]))
end,
Light_Handstream=function()--3111
Light_Handstream=function()-- 3111
ins(pos,get3(pos[#pos] or 0))
ins(pos,get1(pos[#pos]))
ins(pos,get1(pos[#pos]))
ins(pos,get1(pos[#pos]))
end,
Dense_Handstream=function()--3121
Dense_Handstream=function()-- 3121
ins(pos,get3(pos[#pos] or 0))
ins(pos,get1(pos[#pos]))
ins(pos,get2(pos[#pos]))
ins(pos,get1(pos[#pos]))
end,
Light_Quadstream=function()--4111
Light_Quadstream=function()-- 4111
ins(pos,1234)
ins(pos,get1(pos[#pos-1] or 0))
ins(pos,get1(pos[#pos]))
ins(pos,get1(pos[#pos]))
end,
Quadstream=function()--4121
Quadstream=function()-- 4121
ins(pos,1234)
ins(pos,get1(pos[#pos-1] or 0))
ins(pos,get2(pos[#pos]))
@@ -306,36 +306,36 @@ local function boardStencil() gc.rectangle('fill',300,0,680,720) end
function scene.draw()
setFont(50)
if arcade then
--Draw rolling speed
-- Draw rolling speed
mStr(("%.2f/s"):format(rollSpeed/2),155,490)
else
--Draw speed
-- Draw speed
setFont(45)
gc.setColor(1,.6,.6)
mStr(("%.2f"):format(maxSpeed/60),155,460)
gc.setColor(COLOR.Z)
mStr(("%.2f"):format(speed/60),155,520)
--Progress time list
-- Progress time list
setFont(30)
gc.setColor(.6,.6,.6)
for i=1,#progress do
gc.print(progress[i],1030,120+25*i)
end
--Draw time
-- Draw time
gc.setColor(COLOR.Z)
setFont(45)
gc.print(("%.3f"):format(time),1030,70)
end
--Draw mode
-- Draw mode
if state~=0 then
gc.setColor(COLOR.Z)
setFont(30)mStr(mode,155,212)
end
--Draw tiles
-- Draw tiles
gc.stencil(boardStencil)
gc.setStencilTest('equal',1)
gc.rectangle('fill',300,0,680,720)
@@ -351,7 +351,7 @@ function scene.draw()
end
gc.pop()
gc.setStencilTest()
--Draw track line
-- Draw track line
gc.setColor(COLOR.D)
gc.setLineWidth(2)
for x=1,5 do
@@ -363,13 +363,13 @@ function scene.draw()
gc.line(300,y,980,y)
end
--Draw red tile
-- Draw red tile
if diePos then
gc.setColor(1,.2,.2)
gc.rectangle('fill',130+170*diePos+8,600-height+8,170-16,120-16)
end
--Draw score
-- Draw score
setFont(100)
gc.push('transform')
gc.translate(640,26)

View File

@@ -72,7 +72,7 @@ local function resetBoard()
local colors=levels[level].color
field.c,field.r=levels[level].c,levels[level].r
local total=field.r*field.c/2--Total cell count
local total=field.r*field.c/2-- Total cell count
local pool=TABLE.new(int(total/colors),colors)
for i=1,total%colors do pool[i]=pool[i]+1 end
for i=1,#pool do pool[i]=pool[i]*2 end
@@ -117,7 +117,7 @@ local function addPoint(list,x,y)
end
end
local function checkLink(x1,y1,x2,y2)
--Y-X-Y Check
-- Y-X-Y Check
local bestLen,bestLine=1e99,false
do
if x1>x2 then x1,y1,x2,y2=x2,y2,x1,y1 end
@@ -141,7 +141,7 @@ local function checkLink(x1,y1,x2,y2)
::CONTINUE_nextRow::
end
end
--X-Y-X Check
-- X-Y-X Check
do
if y1>y2 then x1,y1,x2,y2=x2,y2,x1,y1 end
local ulx,urx,dlx,drx=x1,x1,x2,x2
@@ -177,18 +177,18 @@ local function tap(x,y)
if line then
ins(lines,{time=0,line=line})
--Clear
-- Clear
field[y][x]=false
field[selY][selX]=false
field.remain=field.remain-1
field.full=false
--Score
-- Score
local s=1000+int(combo^.9)
score=score+s
TEXT.show("+"..s,1205,600,20,'score')
--Combo
-- Combo
if comboTime==0 then
combo=0
noComboBreak=false
@@ -197,7 +197,7 @@ local function tap(x,y)
combo=combo+1
if combo>maxCombo then maxCombo=combo end
--Check win
-- Check win
if field.remain==0 then
if noComboBreak then
SFX.play('emit')
@@ -295,15 +295,15 @@ end
function scene.draw()
gc.push('transform')
--Camera
-- Camera
gc.translate(field.x,field.y)
gc.scale(field.w/field.c,field.h/field.r)
--Background
-- Background
gc.setColor(COLOR.dX)
gc.rectangle('fill',0,0,field.w,field.h)
--Matrix
-- Matrix
local mono=state==0 or invis and not field.full
if mono then
gc_setColor(COLOR.dH)
@@ -328,51 +328,51 @@ function scene.draw()
end
end
--Selecting box
-- Selecting box
gc.setLineWidth(.1)
if selX then
gc_setColor(1,1,1)
gc_rectangle('line',selX-1+.05,selY-1+.05,.9,.9)
end
--Clearing lines
-- Clearing lines
gc.translate(-.5,-.5)
for i=1,#lines do
gc_setColor(1,1,1,1-lines[i].time)
gc.line(lines[i].line)
end
gc.pop()
--Frame
-- Frame
if state==2 then
gc.setColor(.9,.9,0)--win
gc.setColor(.9,.9,0)-- win
elseif state==1 then
gc.setColor(.9,.9,.9)--game
gc.setColor(.9,.9,.9)-- game
elseif state==0 then
gc.setColor(.2,.8,.2)--ready
gc.setColor(.2,.8,.2)-- ready
end
gc.setLineWidth(6)
gc.rectangle('line',field.x-5,field.y-5,field.w+10,field.h+10)
--Draw no-setting area
-- Draw no-setting area
if state==2 then
gc.setColor(1,0,0,.3)
gc.rectangle('fill',0,100,155,80)
end
--Maxcombo
-- Maxcombo
setFont(20)gc.setColor(COLOR.dF)
gc.print(maxCombo,1142,1)
--Time
-- Time
setFont(30)gc.setColor(COLOR.Z)
gc.print(("%.3f"):format(time),1140,20)
--Progress time list
-- Progress time list
setFont(15)gc.setColor(.6,.6,.6)
for i=1,#progress do gc.print(progress[i],1140,40+20*i) end
--Combo Rectangle
-- Combo Rectangle
if comboTime>0 then
local r=32*comboTime^.3
gc.setColor(1,1,1,min(.6+comboTime,1)*.25)
@@ -382,7 +382,7 @@ function scene.draw()
gc.rectangle('line',1205-r,440-r,2*r,2*r,4)
end
--Combo Text
-- Combo Text
setFont(60)
if combo>50 then
gc.setColor(1,.2,.2,min(.3+comboTime*.5,1)*min(comboTime,1))
@@ -391,7 +391,7 @@ function scene.draw()
gc.setColor(1,1,max(1-combo*.001,.5),min(.4+comboTime,1))
mStr(combo,1205,398)
--Score
-- Score
setFont(25)gc.setColor(COLOR.Z)
mStr(score1,1205,560)
end

View File

@@ -1,6 +1,6 @@
local gc=love.graphics
local state--0=playing, 1=gameover
local state-- 0=playing, 1=gameover
local timeUsed
local level
local showNum

View File

@@ -19,7 +19,7 @@ function scene.sceneInit()
end
function scene.touchDown(x,y,k)
--TODO
-- TODO
end
scene.mouseDown=scene.touchDown

View File

@@ -49,11 +49,11 @@ function scene.keyDown(key,isRep)
SCN.back()
end
elseif key=='space' then
if state==0 then--main
if state==0 then-- main
if timer==0 then
state=1
end
elseif state==3 then--play
elseif state==3 then-- play
local c=(math.floor((pos-ang)*side/tau)-1)%side+1
if hit[c]==0 then
hit[c]=1
@@ -87,12 +87,12 @@ function scene.touchDown()
end
function scene.update()
if state==0 then--main
if state==0 then-- main
ang=ang-.02
if ang>0 then ang=ang-tau end
if pos<ang then pos=pos+tau end
if timer>0 then timer=timer-1 end
elseif state==1 or state==2 then--zoom
elseif state==1 or state==2 then-- zoom
ang=ang+.02+timer/260
pos=pos-.016
if ang>0 then ang=ang-tau end
@@ -115,7 +115,7 @@ function scene.update()
state=3
end
end
elseif state==3 then--play
elseif state==3 then-- play
ang=ang+.02
pos=pos-.016
if ang>0 then

View File

@@ -8,11 +8,11 @@ local rnd=math.random
local scene={}
local state
local bx,by=640,360--Ball posotion
local vx,vy=0,0--Ball velocity
local ry=0--Rotation Y
local bx,by=640,360-- Ball posotion
local vx,vy=0,0-- Ball velocity
local ry=0-- Rotation Y
local p1,p2--Player data
local p1,p2-- Player data
function scene.sceneInit()
BG.set('none')
@@ -70,9 +70,9 @@ end
function scene.touchMove(x,y)(x<640 and p1 or p2).y0=y end
function scene.mouseMove(x,y)(x<640 and p1 or p2).y0=y end
--Rect Area X:150~1130 Y:20~700
-- Rect Area X:150~1130 Y:20~700
function scene.update()
--Update pads
-- Update pads
local P=p1
while P do
if P.y0 then
@@ -105,7 +105,7 @@ function scene.update()
P=P==p1 and p2
end
--Update ball
-- Update ball
bx,by=bx+vx,by+vy
if ry~=0 then
if ry>0 then
@@ -116,7 +116,7 @@ function scene.update()
vy=vy+.1
end
end
if state==1 then--Playing
if state==1 then-- Playing
if bx<160 or bx>1120 then
P=bx<160 and p1 or p2
local d=by-P.y
@@ -134,7 +134,7 @@ function scene.update()
vy,ry=-vy,-ry
SFX.play('collect')
end
elseif state==2 then--Game over
elseif state==2 then-- Game over
if bx<-120 or bx>1400 or by<-40 or by>760 then
P=bx>640 and p1 or p2
P.score=P.score+1
@@ -150,25 +150,25 @@ function scene.update()
end
function scene.draw()
--Draw score
-- Draw score
gc.setColor(.4,.4,.4)
FONT.set(100)
GC.mStr(p1.score,470,20)
GC.mStr(p2.score,810,20)
--Draw boundary
-- Draw boundary
gc.setColor(COLOR.Z)
gc.setLineWidth(4)
gc.line(134,20,1146,20)
gc.line(134,700,1146,700)
--Draw ball & speed line
-- Draw ball & speed line
gc.setColor(1,1,1-abs(ry)*.16)
gc.circle('fill',bx,by,10)
gc.setColor(1,1,1,.1)
gc.line(bx+vx*22,by+vy*22,bx+vx*30,by+vy*30)
--Draw pads
-- Draw pads
gc.setColor(1,.8,.8)
gc.rectangle('fill',134,p1.y-50,16,100)
gc.setColor(.8,.8,1)

View File

@@ -31,12 +31,12 @@ function scene.keyDown(key,isRep)
elseif state==2 and #key==1 then
key=("qapl"):find(key,nil,true)
if key then
--BEAUTIFUL LOGIC BELOW:
-- BEAUTIFUL LOGIC BELOW:
--early = error, [UP-key]==[target is up] = correct sfx, else = wrong sfx
-- early = error, [UP-key]==[target is up] = correct sfx, else = wrong sfx
SFX.play(ct>6 and 'finesseError' or key%2==1==up and 'reach' or 'fail')
--(early && P2-key || not early && [P1-key]==[target is up]) = P1 win, else P2 win
-- (early && P2-key || not early && [P1-key]==[target is up]) = P1 win, else P2 win
if ct>6 and key>2 or ct<=6 and key%4<2==up then
winner=1; s1=s1+1
else
@@ -56,20 +56,20 @@ function scene.touchDown(x,y)
)
end
function scene.update()
if state==0 then--Menu
if state==0 then-- Menu
if ct>0 then
ct=ct-1
elseif rnd()<.00626 then
ct=30
end
elseif state==1 then--Waiting
elseif state==1 then-- Waiting
ct=ct-1
if ct==0 then
ct=rnd(26,162)
up=rnd()<.5
state=2
end
elseif state==2 then--Winking
elseif state==2 then-- Winking
ct=ct-1
if ct==0 then ct=6 end
elseif state==3 then
@@ -85,21 +85,21 @@ function scene.update()
end
end
function scene.draw()
--Dividing line
-- Dividing line
gc.setLineWidth(10)
gc.setColor(1,1,1,.9)
gc.line(640,0,640,720)
gc.setColor(1,1,1,.3)
gc.line(500,360,780,360)
--Help
-- Help
setFont(100)
mStr("Q",80,100)
mStr("A",80,480)
mStr("P",1200,100)
mStr("L",1200,480)
--Score
-- Score
setFont(80)
gc.printf(s1,50,300,200)
gc.printf(s2,1030,300,200,'right')

View File

@@ -128,16 +128,16 @@ function scene.draw()
gc.setColor(COLOR.dX)
gc.rectangle('fill',310,30,660,660)
if state==2 then
gc.setColor(.9,.9,0)--win
gc.setColor(.9,.9,0)-- win
elseif state==1 then
gc.setColor(.9,.9,.9)--game
gc.setColor(.9,.9,.9)-- game
elseif state==0 then
gc.setColor(.2,.8,.2)--ready
gc.setColor(.2,.8,.2)-- ready
end
gc.setLineWidth(10)
gc.rectangle('line',310,30,660,660)
--Draw no-setting area
-- Draw no-setting area
if state==2 then
gc.setColor(1,0,0,.3)
gc.rectangle('fill',15,295,285,250)

View File

@@ -232,14 +232,14 @@ function scene.draw()
gc.print(("%.3f"):format(time),1026,50)
gc.print(score,1026,100)
--Progress time list
-- Progress time list
setFont(25)
setColor(.7,.7,.7)
for i=1,#progress do
gc.print(progress[i],1000,140+30*i)
end
--Previews
-- Previews
if nexts then
gc.setColor(COLOR.dX)
rectangle('fill',20,450,280,75)
@@ -254,7 +254,7 @@ function scene.draw()
end
if state==2 then
--Draw no-setting area
-- Draw no-setting area
setColor(1,0,0,.3)
rectangle('fill',15,200,285,210)
end

View File

@@ -7,20 +7,20 @@ local ins,rem=table.insert,table.remove
local setFont,mStr=FONT.set,GC.mStr
local tileColor={
[-2]=COLOR.R, --Bomb
[-1]=COLOR.H, --Stone
{.39, 1.0, .39},--Tile 1
{.39, .39, 1.0},--Tile 2
{1.0, .70, .31},--Tile 3
{.94, .31, .31},--Tile 4
{.00, .71, .12},--Tile 5
{.90, .20, .90},--Tile 6
{.94, .47, .39},--Tile 7
{.90, .00, .00},--Tile 8
{.86, .86, .31},--Tile 9
{.78, .31, .00},--Tile 10
{.78, .55, .04},--Tile 11
{.12, .12, .51},--Tile 12
[-2]=COLOR.R, -- Bomb
[-1]=COLOR.H, -- Stone
{.39, 1.0, .39},-- Tile 1
{.39, .39, 1.0},-- Tile 2
{1.0, .70, .31},-- Tile 3
{.94, .31, .31},-- Tile 4
{.00, .71, .12},-- Tile 5
{.90, .20, .90},-- Tile 6
{.94, .47, .39},-- Tile 7
{.90, .00, .00},-- Tile 8
{.86, .86, .31},-- Tile 9
{.78, .31, .00},-- Tile 10
{.78, .55, .04},-- Tile 11
{.12, .12, .51},-- Tile 12
}
local textColor={
[-2]=COLOR.dR,
@@ -222,29 +222,29 @@ function player:drawBoard()
gc.push('transform')
gc.translate(self.x,self.y)
--Board background
-- Board background
setColor(COLOR.dX)
rectangle("fill",0,0,600,600)
--Hold slot
-- Hold slot
setColor(0,1,1,.4)
rectangle("fill",0,0,100,100)
gc.setLineWidth(10)
setColor(COLOR.lC)
rectangle("line",5,5,90,90)
--Hold tile
-- Hold tile
setFont(60)
drawTile(1,1,self.hold)
--Board tiles
-- Board tiles
local b=self.board
for y=1,6 do for x=1,6 do
drawTile(x,y,b[y][x])
end end
--Board lines
-- Board lines
setColor(COLOR.Z)
gc.setLineWidth(2)
for x=1,5 do gc.line(x*100,0,x*100,600) end
@@ -252,7 +252,7 @@ function player:drawBoard()
gc.setLineWidth(6)
rectangle("line",0,0,600,600)
--Select box
-- Select box
if self.selectX then
local c=tileColor[self.nexts[1]]
setColor(c[1],c[2],c[3],.6+.3*math.sin(TIME()*9.29))
@@ -325,7 +325,7 @@ function scene.draw()
gc.print(("%.3f"):format(player.time),1026,50)
gc.print(player.score,1026,100)
--Progress time list
-- Progress time list
setFont(25)
setColor(.7,.7,.7)
for i=1,#player.progress do

View File

@@ -127,13 +127,13 @@ function scene.draw()
gc.translate(0,-WIDGET.scrollPos)
setFont(30)
--Sequence
-- Sequence
if #MISSION>0 then
gc.setColor(1,CUSTOMENV.missionKill and 0 or 1,int(TIME()*6.26)%2)
gc.print("#"..#MISSION,70,220)
end
--Field content
-- Field content
if #FIELD[1]>0 then
gc.push('transform')
gc.translate(330,240)
@@ -159,7 +159,7 @@ function scene.draw()
end
end
--Sequence
-- Sequence
if #BAG>0 then
gc.setColor(1,1,int(TIME()*6.26)%2)
gc.print("#"..#BAG,615,220)
@@ -178,7 +178,7 @@ scene.widgetList={
WIDGET.newKey{name='reset', x=1110,y=90,w=230,h=90,color='R',code=pressKey'delete'},
WIDGET.newKey{name='mod', x=1110,y=200,w=230,h=90,color='Z',code=pressKey'f1'},
--Mission / Field / Sequence
-- Mission / Field / Sequence
WIDGET.newKey{name='mission', x=170,y=180,w=240,h=80,color='N',font=25,code=pressKey'm'},
WIDGET.newKey{name='field', x=450,y=180,w=240,h=80,color='A',font=25,code=pressKey'f'},
WIDGET.newKey{name='sequence', x=730,y=180,w=240,h=80,color='W',font=25,code=pressKey's'},
@@ -186,7 +186,7 @@ scene.widgetList={
WIDGET.newText{name='noMsn', x=50, y=220,align='L',color='H',hideF=function() return MISSION[1] end},
WIDGET.newText{name='defSeq', x=610,y=220,align='L',color='H',hideF=function() return BAG[1] end},
--Selectors
-- Selectors
WIDGET.newSelector{name='opponent', x=170,y=330,w=260,color='R',list=sList.opponent, disp=CUSval('opponent'), code=CUSsto('opponent')},
WIDGET.newSelector{name='life', x=170,y=410,w=260,color='R',list=sList.life, disp=CUSval('life'), code=CUSsto('life')},
WIDGET.newSelector{name='pushSpeed', x=170,y=520,w=260,color='V',list=sList.pushSpeed, disp=CUSval('pushSpeed'), code=CUSsto('pushSpeed')},
@@ -205,17 +205,17 @@ scene.widgetList={
WIDGET.newSelector{name='hurry', x=730,y=680,w=260,color='G',list=sList.hurry,disp=CUSval('hurry'),code=CUSsto('hurry')},
WIDGET.newSelector{name='hang', x=730,y=760,w=260,color='G',list=sList.hang,disp=CUSval('hang'),code=CUSsto('hang')},
--Copy / Paste / Start
-- Copy / Paste / Start
WIDGET.newButton{name='copy', x=1070,y=300,w=310,h=70,color='lR',font=25,code=pressKey'cC'},
WIDGET.newButton{name='paste', x=1070,y=380,w=310,h=70,color='lB',font=25,code=pressKey'cV'},
WIDGET.newButton{name='play_clear', x=1070,y=460,w=310,h=70,color='lY',font=35,code=pressKey'play1'},
WIDGET.newButton{name='play_puzzle', x=1070,y=540,w=310,h=70,color='lM',font=35,code=pressKey'play2',hideF=function() return #FIELD[1]==0 end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
--Rule set
-- Rule set
WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')},
--Special rules
-- Special rules
WIDGET.newSwitch{name='ospin', x=850, y=830, lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
WIDGET.newSwitch{name='fineKill', x=850, y=890, lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')},
WIDGET.newSwitch{name='b2bKill', x=850, y=950, lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')},
@@ -224,14 +224,14 @@ scene.widgetList={
WIDGET.newSwitch{name='deepDrop', x=1170,y=890, lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')},
WIDGET.newSwitch{name='bone', x=1170,y=950, lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
--Next & Hold
-- Next & Hold
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode'),hideF=function() return CUSTOMENV.holdCount==0 end},
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=180,axis={0,6,1},disp=CUSval('nextCount'),code=CUSsto('nextCount')},
WIDGET.newSlider{name='holdCount', x=140, y=1030,lim=130,w=180,axis={0,6,1},disp=CUSval('holdCount'),code=CUSsto('holdCount')},
WIDGET.newSwitch{name='infHold', x=560, y=960, lim=200, disp=CUSval('infHold'),code=CUSrev('infHold'),hideF=function() return CUSTOMENV.holdCount==0 end},
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function() return CUSTOMENV.holdCount==0 end},
--BG & BGM
-- BG & BGM
WIDGET.newSelector{name='bg', x=840, y=1090,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i) CUSTOMENV.bg=i BG.set(i) end},
WIDGET.newSelector{name='bgm', x=1120,y=1090,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i) CUSTOMENV.bgm=i BGM.play(i) end},
}

View File

@@ -8,11 +8,11 @@ local FIELD=FIELD
local scene={}
local curPen
local pens={-2,0,-1,[false]=false}--Color (air/smart)
local pens={-2,0,-1,[false]=false}-- Color (air/smart)
local penMode
local penPath={}
local penX,penY
local demo--If show x
local demo-- If show x
local page
local function isEmpty(L)
@@ -28,35 +28,35 @@ local penKey={
z=0,x=-1,c=-2,
}
local minoPosCode={
[102]=1,[1121]=1,--Z
[195]=2,[610]=2,--S
[39]=3,[1569]=3,[228]=3,[1091]=3,--J
[135]=4,[547]=4,[225]=4,[1602]=4,--L
[71]=5,[609]=5,[226]=5,[1122]=5,--T
[99]=6,--O
[15]=7,[4641]=7,--I
[1606]=8,[2273]=8,--Z5
[3139]=9,[740]=9,--S5
[103]=10,[1633]=10,[230]=10,[1123]=10,--P
[199]=11,[611]=11,[227]=11,[1634]=11,--Q
[738]=12,[3170]=12,[1252]=12,[1219]=12,--F
[2274]=13,[1126]=13,[1249]=13,[1730]=13,--E
[1095]=14,[737]=14,[3650]=14,[2276]=14,--T5
[167]=15,[1571]=15,[229]=15,[1603]=15,--U
[2183]=16,[551]=16,[3617]=16,[3716]=16,--V
[614]=17,[3169]=17,[1732]=17,[2243]=17,--W
[1250]=18,--X
[47]=19,[12833]=19,[488]=19,[9283]=19,--J5
[271]=20,[4643]=20,[481]=20,[13378]=20,--L5
[79]=21,[5665]=21,[484]=21,[9314]=21,--R
[143]=22,[4705]=22,[482]=22,[9794]=22,--Y
[110]=23,[9761]=23,[236]=23,[9313]=23,--N
[391]=24,[4706]=24,[451]=24,[5698]=24,--H
[31]=25,[21025]=25,--I5
[7]=26,[545]=26,--I3
[67]=27,[35]=27,[97]=27,[98]=27,--C
[3]=28,[33]=28,--I2
[1]=29,--O1
[102]=1,[1121]=1,-- Z
[195]=2,[610]=2,-- S
[39]=3,[1569]=3,[228]=3,[1091]=3,-- J
[135]=4,[547]=4,[225]=4,[1602]=4,-- L
[71]=5,[609]=5,[226]=5,[1122]=5,-- T
[99]=6,-- O
[15]=7,[4641]=7,-- I
[1606]=8,[2273]=8,-- Z5
[3139]=9,[740]=9,-- S5
[103]=10,[1633]=10,[230]=10,[1123]=10,-- P
[199]=11,[611]=11,[227]=11,[1634]=11,-- Q
[738]=12,[3170]=12,[1252]=12,[1219]=12,-- F
[2274]=13,[1126]=13,[1249]=13,[1730]=13,-- E
[1095]=14,[737]=14,[3650]=14,[2276]=14,-- T5
[167]=15,[1571]=15,[229]=15,[1603]=15,-- U
[2183]=16,[551]=16,[3617]=16,[3716]=16,-- V
[614]=17,[3169]=17,[1732]=17,[2243]=17,-- W
[1250]=18,-- X
[47]=19,[12833]=19,[488]=19,[9283]=19,-- J5
[271]=20,[4643]=20,[481]=20,[13378]=20,-- L5
[79]=21,[5665]=21,[484]=21,[9314]=21,-- R
[143]=22,[4705]=22,[482]=22,[9794]=22,-- Y
[110]=23,[9761]=23,[236]=23,[9313]=23,-- N
[391]=24,[4706]=24,[451]=24,[5698]=24,-- H
[31]=25,[21025]=25,-- I5
[7]=26,[545]=26,-- I3
[67]=27,[35]=27,[97]=27,[98]=27,-- C
[3]=28,[33]=28,-- I2
[1]=29,-- O1
}
local function _pTouch(x,y)
if not curPen then return end
@@ -78,7 +78,7 @@ local function _pDraw()
local l=#penPath
if l==0 then return end
local C--Color
local C-- Color
if penMode==0 then
if pens[curPen]==-2 then
if l<=5 then
@@ -227,7 +227,7 @@ function scene.keyDown(key)
MES.new('check',text.exportSuccess)
elseif key=='v' and kb.isDown('lctrl','rctrl') or key=='cV' then
local str=sys.getClipboardText()
local p=str:find(":")--ptr*
local p=str:find(":")-- ptr*
if p then
if not str:sub(1,p-1):find("Field") then
MES.new('error',text.pasteWrongPlace)
@@ -264,13 +264,13 @@ end
function scene.draw()
gc.translate(200,60)
--Draw grid
-- Draw grid
gc.setColor(1,1,1,.2)
gc.setLineWidth(1)
for x=1,9 do gc.line(30*x,0,30*x,600) end
for y=0,19 do gc.line(0,30*y,300,30*y) end
--Draw field
-- Draw field
gc.setColor(COLOR.Z)
gc.setLineWidth(2)
gc.rectangle('line',-2,-2,304,604,5)
@@ -287,7 +287,7 @@ function scene.draw()
end
end end
--Draw pen
-- Draw pen
if penX and penY then
local x,y=30*penX,600-30*penY
if curPen==1 or curPen==2 then
@@ -305,7 +305,7 @@ function scene.draw()
gc.rectangle('fill',x-30,y,30,30,3)
end
--Draw smart pen path
-- Draw smart pen path
if #penPath>0 then
gc.setLineWidth(4)
if penMode==0 then
@@ -344,23 +344,23 @@ function scene.draw()
end
gc.translate(-200,-60)
--Draw page
-- Draw page
setFont(55)
gc.setColor(COLOR.Z)
GC.mStr(page,100,530)
GC.mStr(#FIELD,100,600)
gc.rectangle('fill',50,600,100,6)
--Draw mouse & pen color
-- Draw mouse & pen color
gc.translate(560,475)
--Mouse
-- Mouse
gc.setLineWidth(2)
gc.rectangle('line',0,0,80,110,5)
gc.line(0,40,80,40)
gc.line(33,0,33,25,47,25,47,0)
gc.line(40,25,40,40)
--Left button
-- Left button
if pens[1]>0 then
gc.setColor(BLOCK_COLORS[pens[1]])
gc.rectangle('fill',5,5,23,30,3)
@@ -381,7 +381,7 @@ function scene.draw()
end
end
--Right button
-- Right button
if pens[2]>0 then
gc.setColor(BLOCK_COLORS[pens[2]])
gc.rectangle('fill',52,5,23,30,3)
@@ -403,7 +403,7 @@ function scene.draw()
end
end
--Middle button
-- Middle button
if pens[3]>0 then
gc.setColor(BLOCK_COLORS[pens[3]])
gc.rectangle('fill',35,2,10,21,3)
@@ -426,7 +426,7 @@ function scene.draw()
end
gc.translate(-560,-475)
--Block name
-- Block name
setFont(55)
gc.setColor(1,1,1)
for i=1,7 do
@@ -440,32 +440,32 @@ scene.widgetList={
WIDGET.newText{name='title', x=1020,y=5,lim=480,font=70,align='R'},
WIDGET.newText{name='subTitle', x=1030,y=50,lim=170,font=35,align='L',color='H'},
WIDGET.newButton{name='b1', x=580, y=130,w=73,fText="",color='R',code=_setPen(1)},--B1
WIDGET.newButton{name='b2', x=660, y=130,w=73,fText="",color='F',code=_setPen(2)},--B2
WIDGET.newButton{name='b3', x=740, y=130,w=73,fText="",color='O',code=_setPen(3)},--B3
WIDGET.newButton{name='b4', x=820, y=130,w=73,fText="",color='Y',code=_setPen(4)},--B4
WIDGET.newButton{name='b5', x=900, y=130,w=73,fText="",color='L',code=_setPen(5)},--B5
WIDGET.newButton{name='b6', x=980, y=130,w=73,fText="",color='J',code=_setPen(6)},--B6
WIDGET.newButton{name='b7', x=1060,y=130,w=73,fText="",color='G',code=_setPen(7)},--B7
WIDGET.newButton{name='b8', x=1140,y=130,w=73,fText="",color='A',code=_setPen(8)},--B8
WIDGET.newButton{name='b1', x=580, y=130,w=73,fText="",color='R',code=_setPen(1)},-- B1
WIDGET.newButton{name='b2', x=660, y=130,w=73,fText="",color='F',code=_setPen(2)},-- B2
WIDGET.newButton{name='b3', x=740, y=130,w=73,fText="",color='O',code=_setPen(3)},-- B3
WIDGET.newButton{name='b4', x=820, y=130,w=73,fText="",color='Y',code=_setPen(4)},-- B4
WIDGET.newButton{name='b5', x=900, y=130,w=73,fText="",color='L',code=_setPen(5)},-- B5
WIDGET.newButton{name='b6', x=980, y=130,w=73,fText="",color='J',code=_setPen(6)},-- B6
WIDGET.newButton{name='b7', x=1060,y=130,w=73,fText="",color='G',code=_setPen(7)},-- B7
WIDGET.newButton{name='b8', x=1140,y=130,w=73,fText="",color='A',code=_setPen(8)},-- B8
WIDGET.newButton{name='b9', x=580, y=210,w=73,fText="",color='C',code=_setPen(9)},--B9
WIDGET.newButton{name='b10', x=660, y=210,w=73,fText="",color='N',code=_setPen(10)},--B10
WIDGET.newButton{name='b11', x=740, y=210,w=73,fText="",color='S',code=_setPen(11)},--B11
WIDGET.newButton{name='b12', x=820, y=210,w=73,fText="",color='B',code=_setPen(12)},--B12
WIDGET.newButton{name='b13', x=900, y=210,w=73,fText="",color='V',code=_setPen(13)},--B13
WIDGET.newButton{name='b14', x=980, y=210,w=73,fText="",color='P',code=_setPen(14)},--B14
WIDGET.newButton{name='b15', x=1060,y=210,w=73,fText="",color='M',code=_setPen(15)},--B15
WIDGET.newButton{name='b16', x=1140,y=210,w=73,fText="",color='W',code=_setPen(16)},--B16
WIDGET.newButton{name='b9', x=580, y=210,w=73,fText="",color='C',code=_setPen(9)},-- B9
WIDGET.newButton{name='b10', x=660, y=210,w=73,fText="",color='N',code=_setPen(10)},-- B10
WIDGET.newButton{name='b11', x=740, y=210,w=73,fText="",color='S',code=_setPen(11)},-- B11
WIDGET.newButton{name='b12', x=820, y=210,w=73,fText="",color='B',code=_setPen(12)},-- B12
WIDGET.newButton{name='b13', x=900, y=210,w=73,fText="",color='V',code=_setPen(13)},-- B13
WIDGET.newButton{name='b14', x=980, y=210,w=73,fText="",color='P',code=_setPen(14)},-- B14
WIDGET.newButton{name='b15', x=1060,y=210,w=73,fText="",color='M',code=_setPen(15)},-- B15
WIDGET.newButton{name='b16', x=1140,y=210,w=73,fText="",color='W',code=_setPen(16)},-- B16
WIDGET.newButton{name='b17', x=580, y=290,w=73,font=40,fText=CHAR.icon.bone, color='dH',code=_setPen(17)},--BONE
WIDGET.newButton{name='b18', x=660, y=290,w=73,font=40,fText=CHAR.icon.invis, color='D', code=_setPen(18)},--HIDE
WIDGET.newButton{name='b19', x=740, y=290,w=73,font=40,fText=CHAR.icon.bomb, color='lY',code=_setPen(19)},--BOMB
WIDGET.newButton{name='b20', x=820, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='H', code=_setPen(20)},--GB1
WIDGET.newButton{name='b21', x=900, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='lH',code=_setPen(21)},--GB2
WIDGET.newButton{name='b22', x=980, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dV',code=_setPen(22)},--GB3
WIDGET.newButton{name='b23', x=1060,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dR',code=_setPen(23)},--GB4
WIDGET.newButton{name='b24', x=1140,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dG',code=_setPen(24)},--GB5
WIDGET.newButton{name='b17', x=580, y=290,w=73,font=40,fText=CHAR.icon.bone, color='dH',code=_setPen(17)},-- BONE
WIDGET.newButton{name='b18', x=660, y=290,w=73,font=40,fText=CHAR.icon.invis, color='D', code=_setPen(18)},-- HIDE
WIDGET.newButton{name='b19', x=740, y=290,w=73,font=40,fText=CHAR.icon.bomb, color='lY',code=_setPen(19)},-- BOMB
WIDGET.newButton{name='b20', x=820, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='H', code=_setPen(20)},-- GB1
WIDGET.newButton{name='b21', x=900, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='lH',code=_setPen(21)},-- GB2
WIDGET.newButton{name='b22', x=980, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dV',code=_setPen(22)},-- GB3
WIDGET.newButton{name='b23', x=1060,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dR',code=_setPen(23)},-- GB4
WIDGET.newButton{name='b24', x=1140,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dG',code=_setPen(24)},-- GB5
WIDGET.newButton{name='any', x=600, y=400,w=120,color='lH', font=40,code=_setPen(0)},
WIDGET.newButton{name='space', x=730, y=400,w=120,color='H', font=55,code=_setPen(-1),fText=CHAR.icon.cross_thick},

View File

@@ -6,8 +6,8 @@ local ins,rem=table.insert,table.remove
local scene={}
local input--Input buffer
local cur--Cursor position
local input-- Input buffer
local cur-- Cursor position
function scene.sceneInit()
input=""
@@ -72,7 +72,7 @@ function scene.keyDown(key)
end
elseif key=='v' and kb.isDown('lctrl','rctrl') or key=='cV' then
local str=sys.getClipboardText()
local p=str:find(":")--ptr*
local p=str:find(":")-- ptr*
if p then
if not str:sub(1,p-1):find("Target") then
MES.new('error',text.pasteWrongPlace)
@@ -112,22 +112,22 @@ function scene.keyDown(key)
end
function scene.draw()
--Draw frame
-- Draw frame
gc.setLineWidth(2)
gc.setColor(COLOR.Z)
gc.rectangle('line',58,108,1164,174,5)
--Draw inputing target
-- Draw inputing target
setFont(30)
gc.setColor(.9,.9,.9)
gc.print(input,1200,275)
--Draw targets
-- Draw targets
local libColor=BLOCK_COLORS
local set=SETTING.skin
local L=MISSION
local x,y=100,136--Next block pos
local cx,cy=100,136--Cursor-center pos
local x,y=100,136-- Next block pos
local cx,cy=100,136-- Cursor-center pos
local i,j=1,#L
local count=1
repeat
@@ -169,7 +169,7 @@ function scene.draw()
i=i+1
until i>j+1
--Draw cursor
-- Draw cursor
gc.setColor(1,1,.4,.6+.4*sin(TIME()*6.26))
gc.line(cx-5,cy-20,cx-5,cy+20)
end

View File

@@ -7,7 +7,7 @@ local gc_setColor,gc_print=gc.setColor,gc.print
local scene={}
local cur--Cursor position
local cur-- Cursor position
function scene.sceneInit()
cur=#BAG
@@ -80,7 +80,7 @@ function scene.keyDown(key)
end
elseif key=='v' and kb.isDown('lctrl','rctrl') or key=='cV' then
local str=sys.getClipboardText()
local p=str:find(":")--ptr*
local p=str:find(":")-- ptr*
if p then
if not str:sub(1,p-1):find("SEQ") then
MES.new('error',text.pasteWrongPlace)
@@ -114,17 +114,17 @@ end
local blockCharWidth={} for i=1,#BLOCK_CHARS do blockCharWidth[i]=gc.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth() end
function scene.draw()
--Draw frame
-- Draw frame
gc_setColor(COLOR.Z)
gc.setLineWidth(2)
gc.rectangle('line',100,110,1080,260,5)
--Draw sequence
-- Draw sequence
local BLOCK_COLORS=BLOCK_COLORS
local skinSetting=SETTING.skin
local BAG=BAG
local x,y=120,136--Next block pos
local cx,cy=120,136--Cursor-center pos
local x,y=120,136-- Next block pos
local cx,cy=120,136-- Cursor-center pos
local i,j=1,#BAG
local count=1
repeat
@@ -159,12 +159,12 @@ function scene.draw()
i=i+1
until i>j+1
--Draw lenth
-- Draw lenth
setFont(40)
gc_setColor(COLOR.Z)
gc_print(#BAG,120,310)
--Draw cursor
-- Draw cursor
gc_setColor(.5,1,.5,.6+.4*sin(TIME()*6.26))
gc.line(cx-5,cy-20,cx-5,cy+20)
end

View File

@@ -30,16 +30,16 @@ function scene.update(dt)
end
function scene.draw()
--Game scene
-- Game scene
SCN.scenes.game.draw()
--Gray screen cover
-- Gray screen cover
gc.setColor(.12,.12,.12,timer*8-7)
gc.replaceTransform(SCR.origin)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.replaceTransform(SCR.xOy)
--Counter bar
-- Counter bar
gc.setLineWidth(2)
gc.setColor(.9,.9,.9,math.min(1,12*timer,8*(1-timer))*.6)
gc.rectangle('line',494,336,292,48,14)

View File

@@ -8,15 +8,15 @@ local find=string.find
local scene={}
local dict--Dict list
local result--Result Lable
local dict-- Dict list
local result-- Result Lable
local lastTickInput
local searchWait--Searching animation timer
local selected--Selected option
local scrollPos--Scroll down length
local searchWait-- Searching animation timer
local selected-- Selected option
local scrollPos-- Scroll down length
local lastSearch--Last searched string
local lastSearch-- Last searched string
local typeColor={
help=COLOR.Y,

View File

@@ -130,7 +130,7 @@ local function _checkGameKeyDown(key)
return
end
end
return true--No key pressed
return true-- No key pressed
end
function scene.sceneInit()
@@ -283,19 +283,19 @@ function scene.gamepadUp(key)
end
local function _update_common(dt)
--Update control
-- Update control
touchMoveLastFrame=false
VK.update(dt)
--Update players
-- Update players
for p=1,#PLAYERS do PLAYERS[p]:update(dt) end
--Fresh royale target
-- Fresh royale target
if PLAYERS[1].frameRun%120==0 and PLAYERS[1].gameEnv.layout=='royale' then
freshMostDangerous()
end
--Warning check
-- Warning check
checkWarning(dt)
end
function scene.update(dt)
@@ -328,15 +328,15 @@ function scene.draw()
local repMode=GAME.replaying or tas
--Players
-- Players
for p=1,#PLAYERS do
PLAYERS[p]:draw(repMode)
end
--Virtual keys
-- Virtual keys
VK.draw()
--Attacking & Being attacked
-- Attacking & Being attacked
if PLAYERS[1].gameEnv.layout=='royale' then
local P=PLAYERS[1]
gc_setLineWidth(5)
@@ -357,7 +357,7 @@ function scene.draw()
end
end
--Mode info
-- Mode info
gc_setColor(1,1,1,.82)
gc_draw(TEXTOBJ.modeName,modeTextPos,10,0,modeTextWidK,1)
local M=GAME.curMode
@@ -378,7 +378,7 @@ function scene.draw()
end
end
--Replaying
-- Replaying
if replaying or tas then
setFont(20)
gc_setColor(1,1,TIME()%.8>.4 and 1 or 0)
@@ -387,7 +387,7 @@ function scene.draw()
mStr(("%s %sf"):format(repRateStrings[gameRate],PLAYERS[1].frameRun),770,31)
end
--Warning
-- Warning
drawWarning()
end
scene.widgetList={

View File

@@ -138,7 +138,7 @@ pad={x=140,y=65,page=1,
{{},{},{},{},{},{},{},{}},
{{},{},{},{},{},{},{},{}},
},
(function()--BGM page
(function()-- BGM page
local L=BGM.getList()
local B={}
for y=1,8 do
@@ -233,13 +233,13 @@ function scene.draw()
gc_translate(pad.x,pad.y)
gc_setLineWidth(2)
--Pad frame
-- Pad frame
gc_setColor(COLOR.dX)
gc_rectangle('fill',-3,-3,726,646,2)
gc_setColor(white)
gc_rectangle('line',-3,-3,726,646,2)
--Buttons
-- Buttons
for y=1,8 do
gc_setColor(COLOR.dX)
gc_circle('fill',40,(y-1)*80+40,34)

Some files were not shown because too many files have changed in this diff Show More