Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
937eed1ee6 | ||
|
|
0cd9d11d4e | ||
|
|
4809afe287 | ||
|
|
681802d030 | ||
|
|
ddbe1d9c97 | ||
|
|
aa3826ed8d | ||
|
|
c2333982fa | ||
|
|
5d963ce7ae | ||
|
|
8e1c53b1e7 | ||
|
|
5c073257b7 | ||
|
|
35e09b3acd | ||
|
|
7ed0248032 | ||
|
|
c7a813e8d5 | ||
|
|
b97b87bfb0 | ||
|
|
106a22eb27 | ||
|
|
0439a3e73d | ||
|
|
3fb6cfb1be | ||
|
|
4eba28fa96 | ||
|
|
0443d5baf7 | ||
|
|
19c393a8d9 | ||
|
|
f63db4dd19 | ||
|
|
106b2a7a98 | ||
|
|
876461e8d2 | ||
|
|
2f359025f2 | ||
|
|
d5fd82e8d6 | ||
|
|
123e453bd2 | ||
|
|
d4075c6fa9 | ||
|
|
dd1189c5ff | ||
|
|
e5af9f53e6 | ||
|
|
80eb2e8371 | ||
|
|
284d02d172 | ||
|
|
2124b24f61 | ||
|
|
fc39239be1 | ||
|
|
d018265175 | ||
|
|
62a039b672 | ||
|
|
9e1df8b804 | ||
|
|
fcac817f11 | ||
|
|
7d89676df6 | ||
|
|
96987add7b | ||
|
|
88a5e50256 | ||
|
|
7bc3f83e7b | ||
|
|
6bb6fb64d8 | ||
|
|
e7b737cba2 |
@@ -1,86 +1,96 @@
|
||||
local min=math.min
|
||||
|
||||
local function fadeOut(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=src:getVolume()-.025*SETTING.bgm
|
||||
src:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
src:stop()
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
local function fadeIn(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=SETTING.bgm
|
||||
v=min(v,src:getVolume()+.025*v)
|
||||
src:setVolume(v)
|
||||
if v>=SETTING.bgm then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
local function removeCurFadeOut(task,code,src)
|
||||
return task.code==code and task.args[1]==src
|
||||
end
|
||||
|
||||
local BGM={
|
||||
getList={},
|
||||
getCount=function()return 0 end,
|
||||
play=NULL,
|
||||
freshVolume=NULL,
|
||||
stop=NULL,
|
||||
reload=NULL,
|
||||
--nowPlay=[str:playing ID]
|
||||
--playing=[src:playing SRC]
|
||||
}
|
||||
function BGM.set(L)
|
||||
BGM.list=L
|
||||
BGM.len=#L
|
||||
end
|
||||
function BGM.loadOne(N)
|
||||
N=BGM.list[N]
|
||||
local file="media/BGM/"..N..".ogg"
|
||||
if love.filesystem.getInfo(file)then
|
||||
BGM.list[N]=love.audio.newSource(file,"stream")
|
||||
BGM.list[N]:setLooping(true)
|
||||
BGM.list[N]:setVolume(0)
|
||||
else
|
||||
LOG.print("No BGM file: "..N,5,COLOR.orange)
|
||||
end
|
||||
end
|
||||
function BGM.loadAll()
|
||||
for i=1,#BGM.list do
|
||||
BGM.loadOne(i)
|
||||
end
|
||||
end
|
||||
function BGM.play(s)
|
||||
if SETTING.bgm==0 then
|
||||
BGM.nowPlay=s
|
||||
BGM.playing=BGM.list[s]
|
||||
return
|
||||
end
|
||||
if s and BGM.list[s]and BGM.nowPlay~=s then
|
||||
if BGM.nowPlay then TASK.new(fadeOut,BGM.playing)end
|
||||
TASK.removeTask_iterate(removeCurFadeOut,fadeOut,BGM.list[s])
|
||||
TASK.removeTask_code(fadeIn)
|
||||
function BGM.init(list)
|
||||
BGM.init=nil
|
||||
local min=math.min
|
||||
local Sources={}function BGM.getList()return list end
|
||||
|
||||
TASK.new(fadeIn,BGM.list[s])
|
||||
BGM.nowPlay=s
|
||||
BGM.playing=BGM.list[s]
|
||||
BGM.playing:play()
|
||||
end
|
||||
end
|
||||
function BGM.freshVolume()
|
||||
if BGM.playing then
|
||||
local v=SETTING.bgm
|
||||
if v>0 then
|
||||
BGM.playing:setVolume(v)
|
||||
BGM.playing:play()
|
||||
elseif BGM.nowPlay then
|
||||
BGM.playing:pause()
|
||||
local count=#list function BGM.getCount()return count end
|
||||
local function fadeOut(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=src:getVolume()-.025*SETTING.bgm
|
||||
src:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
src:stop()
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.stop()
|
||||
TASK.removeTask_code(fadeIn)
|
||||
if BGM.nowPlay then TASK.new(fadeOut,BGM.playing)end
|
||||
BGM.nowPlay,BGM.playing=nil
|
||||
local function fadeIn(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=SETTING.bgm
|
||||
v=min(v,src:getVolume()+.025*v)
|
||||
src:setVolume(v)
|
||||
if v>=SETTING.bgm then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
local function removeCurFadeOut(task,code,src)
|
||||
return task.code==code and task.args[1]==src
|
||||
end
|
||||
local function load(skip)
|
||||
for i=1,count do
|
||||
local file="media/BGM/"..list[i]..".ogg"
|
||||
if love.filesystem.getInfo(file)then
|
||||
Sources[list[i]]=love.audio.newSource(file,"stream")
|
||||
Sources[list[i]]:setLooping(true)
|
||||
Sources[list[i]]:setVolume(0)
|
||||
else
|
||||
LOG.print("No BGM file: "..list[i],5,COLOR.orange)
|
||||
end
|
||||
if not skip and i~=count then
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
BGM.loadOne=nil
|
||||
|
||||
function BGM.play(s)
|
||||
if SETTING.bgm==0 then
|
||||
BGM.nowPlay=s
|
||||
BGM.playing=Sources[s]
|
||||
return
|
||||
end
|
||||
if s and Sources[s]and BGM.nowPlay~=s then
|
||||
if BGM.nowPlay then TASK.new(fadeOut,BGM.playing)end
|
||||
TASK.removeTask_iterate(removeCurFadeOut,fadeOut,Sources[s])
|
||||
TASK.removeTask_code(fadeIn)
|
||||
|
||||
TASK.new(fadeIn,Sources[s])
|
||||
BGM.nowPlay=s
|
||||
BGM.playing=Sources[s]
|
||||
BGM.playing:play()
|
||||
end
|
||||
end
|
||||
function BGM.freshVolume()
|
||||
if BGM.playing then
|
||||
local v=SETTING.bgm
|
||||
if v>0 then
|
||||
BGM.playing:setVolume(v)
|
||||
BGM.playing:play()
|
||||
elseif BGM.nowPlay then
|
||||
BGM.playing:pause()
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.stop()
|
||||
TASK.removeTask_code(fadeIn)
|
||||
if BGM.nowPlay then TASK.new(fadeOut,BGM.playing)end
|
||||
BGM.nowPlay,BGM.playing=nil
|
||||
end
|
||||
end
|
||||
|
||||
BGM.loadOne=coroutine.wrap(load)
|
||||
function BGM.loadAll()load(true)end
|
||||
end
|
||||
return BGM
|
||||
@@ -1,42 +1,25 @@
|
||||
local IMG={
|
||||
batteryImage="/mess/power.png",
|
||||
title="mess/title.png",
|
||||
title_color="mess/title_colored.png",
|
||||
dialCircle="mess/dialCircle.png",
|
||||
dialNeedle="mess/dialNeedle.png",
|
||||
lifeIcon="mess/life.png",
|
||||
badgeIcon="mess/badge.png",
|
||||
spinCenter="mess/spinCenter.png",
|
||||
ctrlSpeedLimit="mess/ctrlSpeedLimit.png",
|
||||
speedLimit="mess/speedLimit.png",
|
||||
pay1="mess/pay1.png",
|
||||
pay2="mess/pay2.png",
|
||||
|
||||
miyaCH="miya/ch.png",
|
||||
miyaF1="miya/f1.png",
|
||||
miyaF2="miya/f2.png",
|
||||
miyaF3="miya/f3.png",
|
||||
miyaF4="miya/f4.png",
|
||||
|
||||
electric="mess/electric.png",
|
||||
hbm="mess/hbm.png",
|
||||
getCount=function()return 0 end,
|
||||
}
|
||||
local list={}
|
||||
local count=0
|
||||
for k,_ in next,IMG do
|
||||
count=count+1
|
||||
list[count]=k
|
||||
end
|
||||
function IMG.getCount()
|
||||
return count
|
||||
end
|
||||
function IMG.loadOne(_)
|
||||
local N=list[_]
|
||||
IMG[N]=love.graphics.newImage("media/image/"..IMG[N])
|
||||
end
|
||||
function IMG.loadAll()
|
||||
for i=1,count do
|
||||
IMG.loadOne(i)
|
||||
function IMG.init(list)
|
||||
IMG.init=nil
|
||||
local count=0
|
||||
for k,v in next,list do
|
||||
count=count+1
|
||||
IMG[k]=v
|
||||
end
|
||||
function IMG.getCount()return count end
|
||||
local function load(skip)
|
||||
for k,v in next,list do
|
||||
IMG[k]=love.graphics.newImage("media/image/"..v)
|
||||
if not skip and i~=count then
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
IMG.loadOne=nil
|
||||
end
|
||||
|
||||
IMG.loadOne=coroutine.wrap(load)
|
||||
function IMG.loadAll()load(true)end
|
||||
end
|
||||
return IMG
|
||||
@@ -48,7 +48,7 @@ local function updatePowerInfo()
|
||||
if state=="nobattery"then
|
||||
gc.setColor(1,1,1)
|
||||
gc.setLineWidth(2)
|
||||
gc.line(74,5,100,22)
|
||||
gc.line(74,SCR.safeX+5,100,22)
|
||||
elseif pow then
|
||||
if charging then gc.setColor(0,1,0)
|
||||
elseif pow>50 then gc.setColor(1,1,1)
|
||||
@@ -177,9 +177,6 @@ function love.keypressed(i)
|
||||
LOG.print("luaVer:".._VERSION)
|
||||
LOG.print("jitVer:"..jit.version)
|
||||
LOG.print("jitVerNum:"..jit.version_num)
|
||||
local r=rnd()<.5
|
||||
love._setGammaCorrect(r)
|
||||
LOG.print("GammaCorrect: "..(r and"on"or"off"),"warn")
|
||||
elseif i=="f3"then
|
||||
for _=1,8 do
|
||||
local P=PLAYERS.alive[rnd(#PLAYERS.alive)]
|
||||
@@ -313,19 +310,7 @@ function love.lowmemory()
|
||||
collectgarbage()
|
||||
end
|
||||
function love.resize(w,h)
|
||||
SCR.w,SCR.h,SCR.dpi=w,h,gc.getDPIScale()
|
||||
SCR.W,SCR.H=SCR.w*SCR.dpi,SCR.h*SCR.dpi
|
||||
SCR.r=h/w
|
||||
SCR.rad=(w^2+h^2)^.5
|
||||
|
||||
if SCR.r>=SCR.h0/SCR.w0 then
|
||||
SCR.k=w/SCR.w0
|
||||
SCR.x,SCR.y=0,(h-w*SCR.h0/SCR.w0)/2
|
||||
else
|
||||
SCR.k=h/SCR.h0
|
||||
SCR.x,SCR.y=(w-h*SCR.w0/SCR.h0)/2,0
|
||||
end
|
||||
xOy:setTransformation(w/2,h/2,nil,SCR.k,nil,SCR.w0/2,SCR.h0/2)
|
||||
SCR.resize(w,h)
|
||||
if BG.resize then BG.resize(w,h)end
|
||||
|
||||
SHADER.warning:send("w",w*SCR.dpi)
|
||||
@@ -518,7 +503,7 @@ function love.run()
|
||||
--Draw power info.
|
||||
gc.setColor(1,1,1)
|
||||
if SETTING.powerInfo then
|
||||
gc.draw(infoCanvas,0,0,0,SCR.k)
|
||||
gc.draw(infoCanvas,SCR.safeX,0,0,SCR.k)
|
||||
end
|
||||
|
||||
--Draw scene swapping animation
|
||||
@@ -538,16 +523,16 @@ function love.run()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(15)
|
||||
_=SCR.h
|
||||
gc.print(FPS(),5,_-20)
|
||||
gc.print(FPS(),SCR.safeX+5,_-20)
|
||||
|
||||
--Debug info.
|
||||
if devMode then
|
||||
gc.setColor(devColor[devMode])
|
||||
gc.print("Memory:"..gcinfo(),5,_-40)
|
||||
gc.print("Lines:"..FREEROW.getCount(),5,_-60)
|
||||
gc.print("Cursor:"..int(mx+.5).." "..int(my+.5),5,_-80)
|
||||
gc.print("Voices:"..VOC.getCount(),5,_-100)
|
||||
gc.print("Tasks:"..TASK.getCount(),5,_-120)
|
||||
gc.print("Memory:"..gcinfo(),SCR.safeX+5,_-40)
|
||||
gc.print("Lines:"..FREEROW.getCount(),SCR.safeX+5,_-60)
|
||||
gc.print("Cursor:"..int(mx+.5).." "..int(my+.5),SCR.safeX+5,_-80)
|
||||
gc.print("Voices:"..VOC.getQueueCount(),SCR.safeX+5,_-100)
|
||||
gc.print("Tasks:"..TASK.getCount(),SCR.safeX+5,_-120)
|
||||
ins(frameTimeList,1,dt)rem(frameTimeList,126)
|
||||
gc.setColor(1,1,1,.3)
|
||||
for i=1,#frameTimeList do
|
||||
|
||||
@@ -1,52 +1,3 @@
|
||||
local langList={
|
||||
require"parts/language/lang_zh",
|
||||
require"parts/language/lang_zh2",
|
||||
require"parts/language/lang_en",
|
||||
require"parts/language/lang_fr",
|
||||
require"parts/language/lang_sp",
|
||||
require"parts/language/lang_symbol",
|
||||
require"parts/language/lang_yygq",
|
||||
--Add new language file to LANG folder. Attention, new language won't show in-game when you add language
|
||||
}
|
||||
local publicText={
|
||||
block={
|
||||
"Z","S","J","L","T","O","I",
|
||||
"Z5","S5","Q","P","F","E",
|
||||
"T5","U","V","W","X",
|
||||
"J5","L5","R","Y","N","H","I5"
|
||||
},
|
||||
}
|
||||
local publicWidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
_4="4",_5="5",_6="6",
|
||||
_7="7",_8="8",_9="9",
|
||||
_0="0",["."]=".",e="e",
|
||||
["+"]="+",["-"]="-",["*"]="*",["/"]="/",
|
||||
["<"]="<",["="]="=",
|
||||
play="-->",
|
||||
},
|
||||
staff={},
|
||||
history={
|
||||
prev="↑",
|
||||
next="↓",
|
||||
},
|
||||
lang={
|
||||
zh="中文",
|
||||
zh2="全中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
sp="Español",
|
||||
symbol="?????",
|
||||
yygq="就这?",
|
||||
},
|
||||
custom_field={
|
||||
b0="",b1="",b2="",b3="",b4="",b5="",b6="",b7="",
|
||||
b8="",b9="",b10="",b11="",b12="",b13="",b14="",b15="",b16="",
|
||||
b17="[ ]",b18="N",b19="B",b20="_",b21="_",b22="_",b23="_",b24="_",
|
||||
},
|
||||
mg_cubefield={},
|
||||
}
|
||||
local function langFallback(T0,T)
|
||||
for k,v in next,T0 do
|
||||
if type(v)=="table"and not v.refuseCopy then--refuseCopy: just copy pointer, not contents
|
||||
@@ -58,48 +9,59 @@ local function langFallback(T0,T)
|
||||
end
|
||||
end
|
||||
local tipMeta={__call=function(L)return L[math.random(#L)]end}
|
||||
for i=1,#langList do
|
||||
local L=langList[i]
|
||||
|
||||
--Set public text
|
||||
for key,list in next,publicText do
|
||||
L[key]=list
|
||||
end
|
||||
|
||||
--Set public widget text
|
||||
for key,list in next,publicWidgetText do
|
||||
local WT=L.WidgetText
|
||||
if not WT[key]then WT[key]={}end
|
||||
for k,v in next,list do
|
||||
WT[key][k]=v
|
||||
end
|
||||
end
|
||||
|
||||
--Fallback to other language, default zh
|
||||
if i>1 then
|
||||
langFallback(langList[L.fallback or 1],L)
|
||||
end
|
||||
|
||||
--Metatable:__call for table:getTip
|
||||
if type(L.getTip)=="table"then
|
||||
setmetatable(L.getTip,tipMeta)
|
||||
end
|
||||
|
||||
--set global name for all back button
|
||||
for _,v in next,L.WidgetText do
|
||||
v.back=L.back
|
||||
end
|
||||
end
|
||||
|
||||
local LANG={}
|
||||
function LANG.getLen()
|
||||
return #langList
|
||||
end
|
||||
function LANG.set(l)
|
||||
local langList={}
|
||||
local publicText,publicWidgetText={},{}
|
||||
local function lang_set(l)
|
||||
text=langList[l]
|
||||
WIDGET.setLang(text.WidgetText)
|
||||
for _,s in next,drawableTextLoad do
|
||||
drawableText[s]:set(text[s])
|
||||
end
|
||||
end
|
||||
|
||||
local LANG={}
|
||||
|
||||
--Call these before call LANG.init()
|
||||
function LANG.setLangList(list)langList=list end
|
||||
function LANG.setPublicText(L)publicText=L end
|
||||
function LANG.setPublicWidgetText(L)publicWidgetText=L end
|
||||
|
||||
function LANG.init()--Attention, calling this will DESTORY ALL METHODS, only left LANG.set()!
|
||||
for i=1,#langList do
|
||||
local L=langList[i]
|
||||
|
||||
--Set public text
|
||||
for key,list in next,publicText do
|
||||
L[key]=list
|
||||
end
|
||||
|
||||
--Set public widget text
|
||||
for key,list in next,publicWidgetText do
|
||||
local WT=L.WidgetText
|
||||
if not WT[key]then WT[key]={}end
|
||||
for k,v in next,list do
|
||||
WT[key][k]=v
|
||||
end
|
||||
end
|
||||
|
||||
--Fallback to other language, default zh
|
||||
if i>1 then
|
||||
langFallback(langList[L.fallback or 1],L)
|
||||
end
|
||||
|
||||
--Metatable:__call for table:getTip
|
||||
if type(rawget(L,"getTip"))=="table"then
|
||||
setmetatable(L.getTip,tipMeta)
|
||||
end
|
||||
|
||||
--set global name for all back button
|
||||
for _,v in next,L.WidgetText do
|
||||
v.back=L.back
|
||||
end
|
||||
end
|
||||
LANG.init,LANG.setLangList,LANG.setPublicText,LANG.setPublicWidgetText=nil
|
||||
LANG.set=lang_set
|
||||
end
|
||||
|
||||
return LANG
|
||||
@@ -39,6 +39,8 @@ local SCN={
|
||||
|
||||
function SCN.add(name,scene)
|
||||
scenes[name]=scene
|
||||
if not scene.widgetList then scene.widgetList={}end
|
||||
setmetatable(scene.widgetList,WIDGET.indexMeta)
|
||||
end
|
||||
|
||||
function SCN.swapUpdate()
|
||||
@@ -76,7 +78,7 @@ function SCN.init(s,org)
|
||||
SCN.gamepadUp=S.gamepadUp
|
||||
SCN.socketRead=S.socketRead
|
||||
if S.sceneInit then S.sceneInit(org)end
|
||||
WIDGET.set(s)
|
||||
WIDGET.set(S.widgetList)
|
||||
end
|
||||
function SCN.push(tar,style)
|
||||
if not SCN.swapping then
|
||||
|
||||
@@ -1,14 +1,32 @@
|
||||
local SCR={
|
||||
w0=1280,h0=720,--Default Screen Size
|
||||
x=0,y=0,--Up-left Coord on screen
|
||||
w=0,h=0,--Fullscreen w/h in gc
|
||||
W=0,H=0,--Fullscreen w/h in shader
|
||||
rad=0,--Radius
|
||||
k=1,--Scale size
|
||||
dpi=1,--DPI from gc.getDPIScale()
|
||||
w0=1280,h0=720, --Default Screen Size
|
||||
x=0,y=0, --Up-left Coord on screen
|
||||
w=0,h=0, --Fullscreen w/h in gc
|
||||
W=0,H=0, --Fullscreen w/h in shader
|
||||
safeX=0,safeY=0,--Safe area
|
||||
safeW=0,safeH=0,--Safe area
|
||||
rad=0, --Radius
|
||||
k=1, --Scale size
|
||||
dpi=1, --DPI from gc.getDPIScale()
|
||||
xOy=love.math.newTransform(),--Screen transformation object
|
||||
}
|
||||
function SCR.setSize(w,h)
|
||||
SCR.w0,SCR.h0=w,h
|
||||
end
|
||||
function SCR.resize(w,h)
|
||||
SCR.w,SCR.h,SCR.dpi=w,h,love.graphics.getDPIScale()
|
||||
SCR.W,SCR.H=SCR.w*SCR.dpi,SCR.h*SCR.dpi
|
||||
SCR.r=h/w
|
||||
SCR.rad=(w^2+h^2)^.5
|
||||
|
||||
if SCR.r>=SCR.h0/SCR.w0 then
|
||||
SCR.k=w/SCR.w0
|
||||
SCR.x,SCR.y=0,(h-w*SCR.h0/SCR.w0)/2
|
||||
else
|
||||
SCR.k=h/SCR.h0
|
||||
SCR.x,SCR.y=(w-h*SCR.w0/SCR.h0)/2,0
|
||||
end
|
||||
SCR.safeX,SCR.safeY,SCR.safeW,SCR.safeH=love.window.getSafeArea()
|
||||
SCR.xOy:setTransformation(w/2,h/2,nil,SCR.k,nil,SCR.w0/2,SCR.h0/2)
|
||||
end
|
||||
return SCR
|
||||
@@ -1,85 +1,97 @@
|
||||
local rem=table.remove
|
||||
local SFX={
|
||||
getCount=function()return 0 end,
|
||||
fieldPlay=NULL,
|
||||
play=NULL,
|
||||
fplay=NULL,
|
||||
reset=NULL,
|
||||
reload=NULL,
|
||||
}
|
||||
function SFX.init(list)
|
||||
SFX.init=nil
|
||||
local rem=table.remove
|
||||
local Sources={}
|
||||
|
||||
local SFX={}
|
||||
function SFX.set(L)
|
||||
SFX.list=L
|
||||
SFX.len=#L
|
||||
end
|
||||
function SFX.loadOne(_)
|
||||
_,SFX.list[_]=SFX.list[_]
|
||||
local N="media/SFX/".._..".ogg"
|
||||
if love.filesystem.getInfo(N)then
|
||||
SFX.list[_]={love.audio.newSource(N,"static")}
|
||||
else
|
||||
LOG.print("No SFX file: "..N,5,COLOR.orange)
|
||||
end
|
||||
end
|
||||
function SFX.loadAll()
|
||||
for i=1,#SFX.list do
|
||||
SFX.loadOne(i)
|
||||
end
|
||||
end
|
||||
function SFX.fieldPlay(s,v,P)
|
||||
SFX.play(s,v,(P.curX+P.sc[2]-5.5)*.15)
|
||||
end
|
||||
function SFX.play(s,vol,pos)
|
||||
if SETTING.sfx==0 then return end
|
||||
local S=SFX.list[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
local count=#list function SFX.getCount()return count end
|
||||
local function load(skip)
|
||||
for i=1,count do
|
||||
local N="media/SFX/"..list[i]..".ogg"
|
||||
if love.filesystem.getInfo(N)then
|
||||
Sources[list[i]]={love.audio.newSource(N,"static")}
|
||||
else
|
||||
LOG.print("No SFX file: "..N,5,COLOR.orange)
|
||||
end
|
||||
if not skip and i~=count then
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
SFX.loadOne=nil
|
||||
|
||||
function SFX.fieldPlay(s,v,P)
|
||||
SFX.play(s,v,(P.curX+P.sc[2]-5.5)*.15)
|
||||
end
|
||||
end
|
||||
S:setVolume(((vol or 1)*SETTING.sfx)^1.626)
|
||||
S:play()
|
||||
end
|
||||
function SFX.fplay(s,vol,pos)
|
||||
local S=SFX.list[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
function SFX.play(s,vol,pos)
|
||||
if SETTING.sfx==0 then return end
|
||||
local S=Sources[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume(((vol or 1)*SETTING.sfx)^1.626)
|
||||
S:play()
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
function SFX.fplay(s,vol,pos)
|
||||
local S=Sources[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume(vol^1.626)
|
||||
S:play()
|
||||
end
|
||||
end
|
||||
S:setVolume(vol^1.626)
|
||||
S:play()
|
||||
end
|
||||
function SFX.reset()
|
||||
for _,L in next,SFX.list do
|
||||
if type(L)=="table"then
|
||||
for i=#L,1,-1 do
|
||||
if not L[i]:isPlaying()then
|
||||
rem(L,i)
|
||||
function SFX.reset()
|
||||
for _,L in next,Sources do
|
||||
if type(L)=="table"then
|
||||
for i=#L,1,-1 do
|
||||
if not L[i]:isPlaying()then
|
||||
rem(L,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SFX.loadOne=coroutine.wrap(load)
|
||||
function SFX.loadAll()load(true)end
|
||||
end
|
||||
return SFX
|
||||
@@ -41,6 +41,7 @@ function FXupdate.cell(S,dt)
|
||||
S.t=S.t+dt*S.rate
|
||||
return S.t>1
|
||||
end
|
||||
FXupdate.line=normUpdate
|
||||
|
||||
local FXdraw={}
|
||||
function FXdraw.badge(S)
|
||||
@@ -88,6 +89,10 @@ function FXdraw.cell(S)
|
||||
setColor(1,1,1,1-S.t)
|
||||
gc.draw(S.image,S.x,S.y,nil,S.size,nil,S.cx,S.cy)
|
||||
end
|
||||
function FXdraw.line(S)
|
||||
setColor(1,1,1,S.a*(1-S.t))
|
||||
gc.line(S.x1,S.y1,S.x2,S.y2)
|
||||
end
|
||||
|
||||
local SYSFX={}
|
||||
function SYSFX.update(dt)
|
||||
@@ -143,14 +148,14 @@ function SYSFX.newRectRipple(rate,x,y,w,h)
|
||||
x=x,y=y,w=w,h=h,
|
||||
}
|
||||
end
|
||||
function SYSFX.newShade(rate,r,g,b,x,y,w,h)
|
||||
function SYSFX.newShade(rate,x,y,w,h,r,g,b)
|
||||
fx[#fx+1]={
|
||||
update=FXupdate.shade,
|
||||
draw=FXdraw.shade,
|
||||
t=0,
|
||||
rate=rate,
|
||||
r=r,g=g,b=b,
|
||||
x=x,y=y,w=w,h=h,
|
||||
r=r or 1,g=g or 1,b=b or 1,
|
||||
}
|
||||
end
|
||||
function SYSFX.newCell(rate,image,size,x,y,vx,vy,ax,ay)
|
||||
@@ -166,4 +171,15 @@ function SYSFX.newCell(rate,image,size,x,y,vx,vy,ax,ay)
|
||||
ax=ax,ay=ay,
|
||||
}
|
||||
end
|
||||
function SYSFX.newLine(rate,x1,y1,x2,y2,r,g,b,a)
|
||||
fx[#fx+1]={
|
||||
update=FXupdate.line,
|
||||
draw=FXdraw.line,
|
||||
t=0,
|
||||
rate=rate,
|
||||
x1=x1 or 0,y1=y1 or 0,
|
||||
x2=x2 or x1 or 1280,y2=y2 or y1 or 720,
|
||||
r=r or 1,g=g or 1,b=b or 1,a=a or 1,
|
||||
}
|
||||
end
|
||||
return SYSFX
|
||||
@@ -23,7 +23,7 @@ function TASK.update()
|
||||
end
|
||||
function TASK.new(code,...)
|
||||
local thread=ct.create(code)
|
||||
if ...~=nil then ct.resume(thread,...)end
|
||||
ct.resume(thread,...)
|
||||
if ct.status(thread)~="dead"then
|
||||
tasks[#tasks+1]={
|
||||
thread=thread,
|
||||
@@ -34,7 +34,7 @@ function TASK.new(code,...)
|
||||
end
|
||||
function TASK.newNet(code,...)
|
||||
local thread=ct.create(code)
|
||||
if ...~=nil then ct.resume(thread,...)end
|
||||
ct.resume(thread,...)
|
||||
if ct.status(thread)~="dead"then
|
||||
tasks[#tasks+1]={
|
||||
thread=thread,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
local gc=love.graphics
|
||||
local rnd=math.random
|
||||
local rem=table.remove
|
||||
local rnd,rem=math.random,table.remove
|
||||
local setFont,mStr=setFont,mStr
|
||||
|
||||
local texts={}
|
||||
@@ -74,18 +73,6 @@ local TEXT={}
|
||||
function TEXT.clear()
|
||||
texts={}
|
||||
end
|
||||
function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT()
|
||||
return{
|
||||
c=0,
|
||||
text=text,
|
||||
x=x or 0,
|
||||
y=y or 0,
|
||||
font=font or 40,
|
||||
spd=(spd or 1)/60,
|
||||
stop=stop,
|
||||
draw=textFX[style]or assert(false,"unavailable type:"..style),
|
||||
}
|
||||
end
|
||||
function TEXT.show(text,x,y,font,style,spd,stop)
|
||||
texts[#texts+1]={
|
||||
c=0, --Timer
|
||||
@@ -95,7 +82,19 @@ function TEXT.show(text,x,y,font,style,spd,stop)
|
||||
font=font or 40, --Font
|
||||
spd=(spd or 1)/60, --Timing speed(1=last 1 sec)
|
||||
stop=stop, --Stop time(sustained text)
|
||||
draw=textFX[style]or assert(false,"unavailable type:"..style), --Draw method
|
||||
draw=textFX[style]or error("unavailable type:"..style), --Draw method
|
||||
}
|
||||
end
|
||||
function TEXT.getText(text,x,y,font,style,spd,stop)--Another version of TEXT.show(), but only return text object, need manual management
|
||||
return{
|
||||
c=0,
|
||||
text=text,
|
||||
x=x or 0,
|
||||
y=y or 0,
|
||||
font=font or 40,
|
||||
spd=(spd or 1)/60,
|
||||
stop=stop,
|
||||
draw=textFX[style]or error("unavailable type:"..style),
|
||||
}
|
||||
end
|
||||
function TEXT.update(list)
|
||||
|
||||
@@ -152,14 +152,14 @@ do--dumpTable
|
||||
k=k.."="
|
||||
end
|
||||
elseif T=="boolean"then k="["..k.."]="
|
||||
else assert(false,"Error key type!")
|
||||
else error("Error key type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=dumpTable(v,t+1)
|
||||
elseif T=="boolean"then v=tostring(v)
|
||||
else assert(false,"Error data type!")
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..tabs[t]..k..v..",\n"
|
||||
end
|
||||
@@ -167,21 +167,21 @@ do--dumpTable
|
||||
end
|
||||
end
|
||||
do--json
|
||||
--
|
||||
|
||||
-- json.lua
|
||||
--
|
||||
|
||||
-- Copyright (c) 2020 rxi
|
||||
--
|
||||
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
-- this software and associated documentation files (the "Software"), to deal in
|
||||
-- the Software without restriction, including without limitation the rights to
|
||||
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
-- of the Software, and to permit persons to whom the Software is furnished to do
|
||||
-- so, subject to the following conditions:
|
||||
--
|
||||
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
--
|
||||
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
@@ -189,7 +189,7 @@ do--json
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
--
|
||||
|
||||
|
||||
local char=string.char
|
||||
json = {}
|
||||
@@ -588,7 +588,7 @@ do--httpRequest & wsConnect
|
||||
end
|
||||
else
|
||||
local function noNetLib()
|
||||
LOG.print("[NO NETlib]",5,COLOR.yellow)
|
||||
LOG.print("[NO NETlib for "..SYSTEM.."]",5,COLOR.yellow)
|
||||
end
|
||||
httpRequest=noNetLib
|
||||
wsConnect=noNetLib
|
||||
|
||||
@@ -1,117 +1,125 @@
|
||||
local rnd=math.random
|
||||
local rem=table.remove
|
||||
local voiceQueue={free=0}
|
||||
local bank={}--{vocName1={SRC1s},vocName2={SRC2s},...}
|
||||
local VOC={}
|
||||
VOC.list={}
|
||||
local VOC={
|
||||
getCount=function()return 0 end,
|
||||
getQueueCount=NULL,
|
||||
getFreeChannel=NULL,
|
||||
play=NULL,
|
||||
update=NULL,
|
||||
reload=NULL,
|
||||
}
|
||||
function VOC.init(list)
|
||||
VOC.init=nil
|
||||
local rnd=math.random
|
||||
local rem=table.remove
|
||||
local voiceQueue={free=0}
|
||||
local bank={}--{vocName1={SRC1s},vocName2={SRC2s},...}
|
||||
local Source={}
|
||||
|
||||
local function loadVoiceFile(N,vocName)
|
||||
local fileName="media/VOICE/"..SETTING.cv.."/"..vocName..".ogg"
|
||||
if love.filesystem.getInfo(fileName)then
|
||||
bank[vocName]={love.audio.newSource(fileName,"static")}
|
||||
table.insert(VOC.list[N],vocName)
|
||||
return true
|
||||
end
|
||||
end
|
||||
function VOC.set(L)
|
||||
VOC.name=L
|
||||
VOC.len=#L
|
||||
end
|
||||
|
||||
function VOC.loadOne(name)
|
||||
local N=VOC.name[name]
|
||||
VOC.list[N]={}
|
||||
|
||||
local i=0
|
||||
repeat i=i+1 until not loadVoiceFile(N,N.."_"..i)
|
||||
|
||||
if i==1 then
|
||||
if not loadVoiceFile(N,N)then
|
||||
LOG.print("No VOICE file: "..N,5,COLOR.orange)
|
||||
local count=#list function VOC.getCount()return count end
|
||||
local function loadVoiceFile(N,vocName)
|
||||
local fileName="media/VOICE/"..SETTING.cv.."/"..vocName..".ogg"
|
||||
if love.filesystem.getInfo(fileName)then
|
||||
bank[vocName]={love.audio.newSource(fileName,"static")}
|
||||
table.insert(Source[N],vocName)
|
||||
return true
|
||||
end
|
||||
end
|
||||
if not VOC.list[N][1]then VOC.list[N]=nil end
|
||||
end
|
||||
function VOC.loadAll()
|
||||
for i=1,#VOC.name do
|
||||
VOC.loadOne(i)
|
||||
end
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
function VOC.getFreeChannel()
|
||||
local l=#voiceQueue
|
||||
for i=1,l do
|
||||
if #voiceQueue[i]==0 then return i end
|
||||
end
|
||||
voiceQueue[l+1]={s=0}
|
||||
return l+1
|
||||
end
|
||||
function VOC.getCount()
|
||||
return #voiceQueue
|
||||
end
|
||||
|
||||
local function getVoice(str)
|
||||
local L=bank[str]
|
||||
local n=1
|
||||
while L[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not L[n]then
|
||||
L[n]=L[1]:clone()
|
||||
L[n]:seek(0)
|
||||
break
|
||||
local function getVoice(str)
|
||||
local L=bank[str]
|
||||
local n=1
|
||||
while L[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not L[n]then
|
||||
L[n]=L[1]:clone()
|
||||
L[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
return L[n]
|
||||
--Load voice with string
|
||||
end
|
||||
return L[n]
|
||||
--Load voice with string
|
||||
end
|
||||
function VOC.update()
|
||||
for i=#voiceQueue,1,-1 do
|
||||
local Q=voiceQueue[i]
|
||||
if Q.s==0 then--Free channel, auto delete when >3
|
||||
if i>3 then
|
||||
rem(voiceQueue,i)
|
||||
end
|
||||
elseif Q.s==1 then--Waiting load source
|
||||
Q[1]=getVoice(Q[1])
|
||||
Q[1]:setVolume(SETTING.voc)
|
||||
Q[1]:play()
|
||||
Q.s=Q[2]and 2 or 4
|
||||
elseif Q.s==2 then--Playing 1,ready 2
|
||||
if Q[1]:getDuration()-Q[1]:tell()<.08 then
|
||||
Q[2]=getVoice(Q[2])
|
||||
Q[2]:setVolume(SETTING.voc)
|
||||
Q[2]:play()
|
||||
Q.s=3
|
||||
end
|
||||
elseif Q.s==3 then--Playing 12 same time
|
||||
if not Q[1]:isPlaying()then
|
||||
for j=1,#Q do
|
||||
Q[j]=Q[j+1]
|
||||
local function load(skip)
|
||||
for i=1,count do
|
||||
Source[list[i]]={}
|
||||
|
||||
local n=0
|
||||
repeat n=n+1 until not loadVoiceFile(list[i],list[i].."_"..n)
|
||||
|
||||
if n==1 then
|
||||
if not loadVoiceFile(list[i],list[i])then
|
||||
LOG.print("No VOICE file: "..list[i],5,COLOR.orange)
|
||||
end
|
||||
Q.s=Q[2]and 2 or 4
|
||||
end
|
||||
elseif Q.s==4 then--Playing last
|
||||
if not Q[1].isPlaying(Q[1])then
|
||||
Q[1]=nil
|
||||
Q.s=0
|
||||
if not Source[list[i]][1]then Source[list[i]]=nil end
|
||||
if not skip and i~=count then
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
VOC.loadOne=nil
|
||||
|
||||
function VOC.getQueueCount()
|
||||
return #voiceQueue
|
||||
end
|
||||
function VOC.getFreeChannel()
|
||||
local l=#voiceQueue
|
||||
for i=1,l do
|
||||
if #voiceQueue[i]==0 then return i end
|
||||
end
|
||||
voiceQueue[l+1]={s=0}
|
||||
return l+1
|
||||
end
|
||||
|
||||
function VOC.play(s,chn)
|
||||
if SETTING.voc>0 then
|
||||
local _=Source[s]
|
||||
if not _ then return end
|
||||
if chn then
|
||||
local L=voiceQueue[chn]
|
||||
L[#L+1]=_[rnd(#_)]
|
||||
L.s=1
|
||||
--Add to queue[chn]
|
||||
else
|
||||
voiceQueue[VOC.getFreeChannel()]={s=1,_[rnd(#_)]}
|
||||
--Create new channel & play
|
||||
end
|
||||
end
|
||||
end
|
||||
function VOC.update()
|
||||
for i=#voiceQueue,1,-1 do
|
||||
local Q=voiceQueue[i]
|
||||
if Q.s==0 then--Free channel, auto delete when >3
|
||||
if i>3 then
|
||||
rem(voiceQueue,i)
|
||||
end
|
||||
elseif Q.s==1 then--Waiting load source
|
||||
Q[1]=getVoice(Q[1])
|
||||
Q[1]:setVolume(SETTING.voc)
|
||||
Q[1]:play()
|
||||
Q.s=Q[2]and 2 or 4
|
||||
elseif Q.s==2 then--Playing 1,ready 2
|
||||
if Q[1]:getDuration()-Q[1]:tell()<.08 then
|
||||
Q[2]=getVoice(Q[2])
|
||||
Q[2]:setVolume(SETTING.voc)
|
||||
Q[2]:play()
|
||||
Q.s=3
|
||||
end
|
||||
elseif Q.s==3 then--Playing 12 same time
|
||||
if not Q[1]:isPlaying()then
|
||||
for j=1,#Q do
|
||||
Q[j]=Q[j+1]
|
||||
end
|
||||
Q.s=Q[2]and 2 or 4
|
||||
end
|
||||
elseif Q.s==4 then--Playing last
|
||||
if not Q[1].isPlaying(Q[1])then
|
||||
Q[1]=nil
|
||||
Q.s=0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function VOC.play(s,chn)
|
||||
if SETTING.voc>0 then
|
||||
local _=VOC.list[s]
|
||||
if not _ then return end
|
||||
if chn then
|
||||
local L=voiceQueue[chn]
|
||||
L[#L+1]=_[rnd(#_)]
|
||||
L.s=1
|
||||
--Add to queue[chn]
|
||||
else
|
||||
voiceQueue[VOC.getFreeChannel()]={s=1,_[rnd(#_)]}
|
||||
--Create new channel & play
|
||||
end
|
||||
end
|
||||
|
||||
VOC.loadOne=coroutine.wrap(load)
|
||||
function VOC.loadAll()load(true)end
|
||||
end
|
||||
return VOC
|
||||
@@ -3,12 +3,10 @@ local kb=love.keyboard
|
||||
local int,abs=math.floor,math.abs
|
||||
local max,min=math.max,math.min
|
||||
local sub,format=string.sub,string.format
|
||||
local ins=table.insert
|
||||
|
||||
local Timer=love.timer.getTime
|
||||
local setFont,mStr=setFont,mStr
|
||||
|
||||
local widgetList={}
|
||||
local WIDGET={}
|
||||
local widgetMetatable={
|
||||
__tostring=function(self)
|
||||
@@ -236,6 +234,9 @@ function key:draw()
|
||||
setFont(self.font)
|
||||
gc.setColor(r,g,b,1.2)
|
||||
gc.printf(t,x,y+h*.5-self.font*.7,w,"center")
|
||||
else
|
||||
self.text=self.name or"NONAME"
|
||||
self.color=COLOR.dPurple
|
||||
end
|
||||
end
|
||||
function key:getInfo()
|
||||
@@ -619,12 +620,12 @@ function selector:press(x)
|
||||
if x<self.x+self.w*.5 then
|
||||
if s>1 then
|
||||
s=s-1
|
||||
SYSFX.newShade(3,1,1,1,self.x,self.y,self.w*.5,60)
|
||||
SYSFX.newShade(3,self.x,self.y,self.w*.5,60)
|
||||
end
|
||||
else
|
||||
if s<#self.list then
|
||||
s=s+1
|
||||
SYSFX.newShade(3,1,1,1,self.x+self.w*.5,self.y,self.w*.5,60)
|
||||
SYSFX.newShade(3,self.x+self.w*.5,self.y,self.w*.5,60)
|
||||
end
|
||||
end
|
||||
if self.select~=s then
|
||||
@@ -640,10 +641,10 @@ function selector:arrowKey(isLeft)
|
||||
if isLeft and s==1 or not isLeft and s==#self.list then return end
|
||||
if isLeft then
|
||||
s=s-1
|
||||
SYSFX.newShade(3,1,1,1,self.x,self.y,self.w*.5,60)
|
||||
SYSFX.newShade(3,self.x,self.y,self.w*.5,60)
|
||||
else
|
||||
s=s+1
|
||||
SYSFX.newShade(3,1,1,1,self.x+self.w*.5,self.y,self.w*.5,60)
|
||||
SYSFX.newShade(3,self.x+self.w*.5,self.y,self.w*.5,60)
|
||||
end
|
||||
self.code(self.list[s])
|
||||
self.select=s
|
||||
@@ -807,7 +808,7 @@ function WIDGET.lnk_pressKey(k) return function() love.keypressed(k) end end
|
||||
function WIDGET.lnk_goScene(t,s) return function() SCN.go(t,s) end end
|
||||
function WIDGET.lnk_swapScene(t,s) return function() SCN.swapTo(t,s) end end
|
||||
|
||||
local indexMeta={
|
||||
WIDGET.indexMeta={
|
||||
__index=function(L,k)
|
||||
for i=1,#L do
|
||||
if L[i].name==k then
|
||||
@@ -816,16 +817,7 @@ local indexMeta={
|
||||
end
|
||||
end
|
||||
}
|
||||
function WIDGET.init(sceneName,list)
|
||||
local L={}
|
||||
for i=1,#list do
|
||||
ins(L,list[i])
|
||||
end
|
||||
setmetatable(L,indexMeta)
|
||||
widgetList[sceneName]=L
|
||||
end
|
||||
function WIDGET.set(sceneName)
|
||||
local list=widgetList[sceneName]
|
||||
function WIDGET.set(list)
|
||||
kb.setTextInput(false)
|
||||
WIDGET.sel=nil
|
||||
WIDGET.active=list or NONE
|
||||
@@ -837,10 +829,12 @@ function WIDGET.set(sceneName)
|
||||
end
|
||||
end
|
||||
end
|
||||
function WIDGET.setLang(lang)
|
||||
for S,L in next,widgetList do
|
||||
for _,W in next,L do
|
||||
W.text=lang[S][W.name]
|
||||
function WIDGET.setLang(widgetText)
|
||||
for S,L in next,SCN.scenes do
|
||||
if widgetText[S]then
|
||||
for _,W in next,L.widgetList do
|
||||
W.text=widgetText[S][W.name]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
4
conf.lua
4
conf.lua
@@ -1,5 +1,5 @@
|
||||
VERSION_CODE=1204
|
||||
VERSION_NAME="Alpha V0.12.4"
|
||||
VERSION_CODE=1205
|
||||
VERSION_NAME="Alpha V0.12.5"
|
||||
love.setDeprecationOutput(false)
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Saving folder
|
||||
|
||||
@@ -118,13 +118,13 @@ return{--返回一个table,你也可以在之前定义一些常量或者函数
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()--生成玩家
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)--1是玩家编号,默认用户控制1号玩家
|
||||
end,
|
||||
mesDisp=function(P)--40行模式需要显示的信息
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)--把计算出来的剩余行数r显示出来
|
||||
mStr(r,69,265)--把计算出来的剩余行数r显示出来
|
||||
PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,--游戏结束时需要保存的本局关键信息
|
||||
|
||||
120
main.lua
120
main.lua
@@ -51,8 +51,56 @@ AIFUNC= require"parts/ai"
|
||||
MODES= require"parts/modes"
|
||||
TICK= require"parts/tick"
|
||||
|
||||
--Initialize image libs
|
||||
IMG.init{
|
||||
batteryImage="/mess/power.png",
|
||||
title="mess/title.png",
|
||||
title_color="mess/title_colored.png",
|
||||
dialCircle="mess/dialCircle.png",
|
||||
dialNeedle="mess/dialNeedle.png",
|
||||
lifeIcon="mess/life.png",
|
||||
badgeIcon="mess/badge.png",
|
||||
spinCenter="mess/spinCenter.png",
|
||||
ctrlSpeedLimit="mess/ctrlSpeedLimit.png",
|
||||
speedLimit="mess/speedLimit.png",
|
||||
pay1="mess/pay1.png",
|
||||
pay2="mess/pay2.png",
|
||||
|
||||
miyaCH="miya/ch.png",
|
||||
miyaF1="miya/f1.png",
|
||||
miyaF2="miya/f2.png",
|
||||
miyaF3="miya/f3.png",
|
||||
miyaF4="miya/f4.png",
|
||||
|
||||
electric="mess/electric.png",
|
||||
hbm="mess/hbm.png",
|
||||
}
|
||||
SKIN.init{
|
||||
"normal(mrz)",
|
||||
"smooth(mrz)",
|
||||
"contrast(mrz)",
|
||||
"glow(mrz)",
|
||||
"plastic(mrz)",
|
||||
"jelly(miya)",
|
||||
"steel(kulumi)",
|
||||
"pure(mrz)",
|
||||
"ball(shaw)",
|
||||
"paper(mrz)",
|
||||
"gem(notypey)",
|
||||
"classic(_)",
|
||||
"brick(notypey)",
|
||||
"brick_light(notypey)",
|
||||
"cartoon_cup(earety)",
|
||||
"crack(earety)",
|
||||
"retro(notypey)",
|
||||
"retro_grey(notypey)",
|
||||
"text_bone(mrz)",
|
||||
"colored_bone(mrz)",
|
||||
"white_bone(mrz)",
|
||||
"WTF",
|
||||
}
|
||||
--Initialize sound libs
|
||||
SFX.set{
|
||||
SFX.init{
|
||||
--Stereo sfxs(cannot set position)
|
||||
"welcome_sfx",
|
||||
"click","enter",
|
||||
@@ -74,7 +122,7 @@ SFX.set{
|
||||
"clear",
|
||||
"error",
|
||||
}
|
||||
BGM.set{
|
||||
BGM.init{
|
||||
"blank",--menu
|
||||
"race",--sprint, solo
|
||||
"infinite",--infinite norm/dig, ultra, zen, tech-finesse
|
||||
@@ -99,7 +147,7 @@ BGM.set{
|
||||
"rockblock",--classic, 49/99
|
||||
"cruelty","final","8-bit happiness","end","how feeling",--49/99
|
||||
}
|
||||
VOC.set{
|
||||
VOC.init{
|
||||
"zspin","sspin","lspin","jspin","tspin","ospin","ispin",
|
||||
"single","double","triple","techrash",
|
||||
"mini","b2b","b3b",
|
||||
@@ -109,6 +157,58 @@ VOC.set{
|
||||
"welcome_voc",
|
||||
}
|
||||
|
||||
--Initialize language lib
|
||||
LANG.setLangList{
|
||||
require"parts/language/lang_zh",
|
||||
require"parts/language/lang_zh2",
|
||||
require"parts/language/lang_en",
|
||||
require"parts/language/lang_fr",
|
||||
require"parts/language/lang_sp",
|
||||
require"parts/language/lang_symbol",
|
||||
require"parts/language/lang_yygq",
|
||||
--Add new language file to LANG folder. Attention, new language won't show in-game when you add language
|
||||
}
|
||||
LANG.setPublicText{
|
||||
block={
|
||||
"Z","S","J","L","T","O","I",
|
||||
"Z5","S5","Q","P","F","E",
|
||||
"T5","U","V","W","X",
|
||||
"J5","L5","R","Y","N","H","I5"
|
||||
},
|
||||
}
|
||||
LANG.setPublicWidgetText{
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
_4="4",_5="5",_6="6",
|
||||
_7="7",_8="8",_9="9",
|
||||
_0="0",["."]=".",e="e",
|
||||
["+"]="+",["-"]="-",["*"]="*",["/"]="/",
|
||||
["<"]="<",["="]="=",
|
||||
play="-->",
|
||||
},
|
||||
custom_field={
|
||||
b0="",b1="",b2="",b3="",b4="",b5="",b6="",b7="",
|
||||
b8="",b9="",b10="",b11="",b12="",b13="",b14="",b15="",b16="",
|
||||
b17="[ ]",b18="N",b19="B",b20="_",b21="_",b22="_",b23="_",b24="_",
|
||||
},
|
||||
lang={
|
||||
zh="中文",
|
||||
zh2="全中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
sp="Español",
|
||||
symbol="?????",
|
||||
yygq="就这?",
|
||||
},
|
||||
staff={},
|
||||
history={
|
||||
prev="↑",
|
||||
next="↓",
|
||||
},
|
||||
mg_cubefield={},
|
||||
}
|
||||
LANG.init()
|
||||
|
||||
--Load shader files from SOURCE ONLY
|
||||
SHADER={}
|
||||
for _,v in next,love.filesystem.getDirectoryItems("parts/shaders")do
|
||||
@@ -134,9 +234,7 @@ end
|
||||
for _,v in next,fs.getDirectoryItems("parts/scenes")do
|
||||
if fs.getRealDirectory("parts/scenes/"..v)~=SAVEDIR then
|
||||
local sceneName=v:sub(1,-5)
|
||||
local scene=require("parts/scenes/"..sceneName)
|
||||
SCN.add(sceneName,scene)
|
||||
if scene.widgetList then WIDGET.init(sceneName,scene.widgetList)end
|
||||
SCN.add(sceneName,require("parts/scenes/"..sceneName))
|
||||
else
|
||||
LOG.print("Dangerous file : %SAVE%/parts/scenes/"..v)
|
||||
end
|
||||
@@ -190,6 +288,7 @@ do
|
||||
type(S.spawn)~="number"or
|
||||
type(S.ghost)~="number"or
|
||||
type(S.center)~="number"or
|
||||
type(S.grid)~="number"or
|
||||
S.bgm>1 or S.sfx>1 or S.voc>1 or
|
||||
S.stereo>1 or S.VKSFX>1 or S.VKAlpha>1
|
||||
then
|
||||
@@ -210,7 +309,10 @@ do
|
||||
S.finesseRate=5*(S.piece-S.extraRate)
|
||||
end
|
||||
if S.version~=VERSION_CODE then
|
||||
if(tonumber(S.version)or 0)<1204 then
|
||||
if type(S.version)~="number"then
|
||||
S.version=0
|
||||
end
|
||||
if S.version<1204 then
|
||||
STAT.frame=math.floor(STAT.time*60)
|
||||
STAT.lastPlay="sprint_10"
|
||||
RANKS.sprintFix=nil
|
||||
@@ -218,6 +320,10 @@ do
|
||||
fs.remove("sprintFix.dat")
|
||||
fs.remove("sprintLock.dat")
|
||||
end
|
||||
if S.version<1205 then
|
||||
SETTING.VKCurW=SETTING.VKCurW*.1
|
||||
SETTING.VKTchW=SETTING.VKTchW*.1
|
||||
end
|
||||
newVersionLaunch=true
|
||||
|
||||
--Try unlock modes which should be unlocked
|
||||
|
||||
@@ -142,7 +142,7 @@ function pasteSequence(str)
|
||||
return true
|
||||
end
|
||||
|
||||
function newBoard(f)
|
||||
function newBoard(f)--Generate a new board
|
||||
if f then
|
||||
return copyList(f)
|
||||
else
|
||||
@@ -151,7 +151,7 @@ function newBoard(f)
|
||||
return F
|
||||
end
|
||||
end
|
||||
function copyBoard(page)
|
||||
function copyBoard(page)--Copy the [page] board
|
||||
local F=FIELD[page or 1]
|
||||
local str=""
|
||||
local H=0
|
||||
@@ -177,7 +177,7 @@ function copyBoard(page)
|
||||
end
|
||||
return data.encode("string","base64",data.compress("string","zlib",str))
|
||||
end
|
||||
function pasteBoard(str,page)
|
||||
function pasteBoard(str,page)--Paste [str] data to [page] board
|
||||
local F=FIELD[page or 1]
|
||||
local _,__
|
||||
|
||||
@@ -339,6 +339,7 @@ function mergeStat(stat,delta)
|
||||
end
|
||||
end
|
||||
|
||||
--Functions for royale mode
|
||||
function randomTarget(P)--Return a random opponent for P
|
||||
if #PLAYERS.alive>1 then
|
||||
local R
|
||||
@@ -430,9 +431,6 @@ end
|
||||
function pauseGame()
|
||||
if not SCN.swapping then
|
||||
GAME.restartCount=0--Avoid strange darkness
|
||||
if not GAME.result then
|
||||
GAME.pauseCount=GAME.pauseCount+1
|
||||
end
|
||||
if not GAME.replaying then
|
||||
for i=1,#PLAYERS do
|
||||
local l=PLAYERS[i].keyPressing
|
||||
@@ -449,7 +447,22 @@ end
|
||||
function resumeGame()
|
||||
SCN.swapTo("play","none")
|
||||
end
|
||||
function loadGame(M,ifQuickPlay)
|
||||
function applyCustomGame()
|
||||
for k,v in next,CUSTOMENV do
|
||||
GAME.modeEnv[k]=v
|
||||
end
|
||||
if BAG[1]then
|
||||
GAME.modeEnv.bag=BAG
|
||||
else
|
||||
GAME.modeEnv.bag=nil
|
||||
end
|
||||
if MISSION[1]then
|
||||
GAME.modeEnv.mission=MISSION
|
||||
else
|
||||
GAME.modeEnv.mission=nil
|
||||
end
|
||||
end
|
||||
function loadGame(M,ifQuickPlay)--Load a mode and go to game scene
|
||||
freshDate()
|
||||
if legalGameTime()then
|
||||
if MODES[M].score then STAT.lastPlay=M end
|
||||
@@ -462,6 +475,36 @@ function loadGame(M,ifQuickPlay)
|
||||
SFX.play("enter")
|
||||
end
|
||||
end
|
||||
function resetPlayerPosition()--Set position & size for every players
|
||||
local L=PLAYERS.alive
|
||||
L[1]:setPosition(340,75)
|
||||
if #L<=5 then
|
||||
if L[2]then L[2]:setPosition(965,390,.5)end
|
||||
if L[3]then L[3]:setPosition(965,30,.5)end
|
||||
if L[4]then L[4]:setPosition(20,390,.5)end
|
||||
if L[5]then L[5]:setPosition(20,30,.5)end
|
||||
elseif #L==49 then
|
||||
local n=2
|
||||
for i=1,4 do for j=1,6 do
|
||||
L[n]:setPosition(78*i-54,115*j-98,.09)
|
||||
n=n+1
|
||||
end end
|
||||
for i=9,12 do for j=1,6 do
|
||||
L[n]:setPosition(78*i+267,115*j-98,.09)
|
||||
n=n+1
|
||||
end end
|
||||
elseif #L==99 then
|
||||
local n=2
|
||||
for i=1,7 do for j=1,7 do
|
||||
L[n]:setPosition(46*i-36,97*j-72,.068)
|
||||
n=n+1
|
||||
end end
|
||||
for i=15,21 do for j=1,7 do
|
||||
L[n]:setPosition(46*i+264,97*j-72,.068)
|
||||
n=n+1
|
||||
end end
|
||||
end
|
||||
end
|
||||
local function tick_showMods()
|
||||
local time=0
|
||||
while true do
|
||||
@@ -506,6 +549,7 @@ function resetGameData(replaying)
|
||||
|
||||
destroyPlayers()
|
||||
GAME.curMode.load()
|
||||
resetPlayerPosition()
|
||||
restoreVirtualKey()
|
||||
if GAME.modeEnv.task then
|
||||
for i=1,#PLAYERS do
|
||||
@@ -544,7 +588,7 @@ function gameStart()
|
||||
P:popNext()
|
||||
end
|
||||
end
|
||||
function scoreValid()
|
||||
function scoreValid()--Check if any unranked mods are activated
|
||||
for _,M in next,GAME.mod do
|
||||
if M.unranked then
|
||||
return false
|
||||
@@ -552,6 +596,22 @@ function scoreValid()
|
||||
end
|
||||
return true
|
||||
end
|
||||
--[[
|
||||
Byte data format: (1 byte each period)
|
||||
KeyID, dt, KeyID, dt, ......
|
||||
KeyID range from 1 to 20, negative when release key
|
||||
dt from 0 to infinity, 0~254 when 0~254, read next byte as dt(if there is an 255, add next byte to dt as well)
|
||||
|
||||
Example:
|
||||
1,6, -1,20, 2,0, -2,255,0, 4,255,255,255,62, ......
|
||||
This means:
|
||||
Press key1 at 6f
|
||||
Release key1 at 26f (6+20)
|
||||
Press key2 at the same time(26+0)
|
||||
Release key 2 after 255+0 frame
|
||||
Press key 4 after 255+255+255+62 frame
|
||||
......
|
||||
]]
|
||||
function dumpRecording(list)
|
||||
local out=""
|
||||
local buffer=""
|
||||
|
||||
@@ -223,7 +223,7 @@ RANKS={sprint_10=0}
|
||||
|
||||
SETTING={
|
||||
--Game
|
||||
das=10,arr=2,
|
||||
das=10,arr=2,dascut=0,
|
||||
sddas=0,sdarr=2,
|
||||
ihs=true,irs=true,ims=true,
|
||||
maxNext=6,
|
||||
@@ -242,7 +242,7 @@ SETTING={
|
||||
|
||||
--Graphic
|
||||
block=true,ghost=.3,center=1,
|
||||
smooth=true,grid=false,
|
||||
smooth=true,grid=.16,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=2,
|
||||
@@ -264,9 +264,9 @@ SETTING={
|
||||
|
||||
--Sound
|
||||
sfx=1,
|
||||
spawn=0,
|
||||
spawn=.3,
|
||||
bgm=.7,
|
||||
stereo=.6,
|
||||
stereo=.7,
|
||||
vib=0,
|
||||
voc=0,
|
||||
cv="miya",
|
||||
@@ -277,8 +277,8 @@ SETTING={
|
||||
VKSwitch=false,--If disp
|
||||
VKTrack=false,--If tracked
|
||||
VKDodge=false,--If dodge
|
||||
VKTchW=3,--Touch-Pos Weight
|
||||
VKCurW=4,--Cur-Pos Weight
|
||||
VKTchW=.3,--Touch-Pos Weight
|
||||
VKCurW=.4,--Cur-Pos Weight
|
||||
VKIcon=true,--If disp icon
|
||||
VKAlpha=.3,
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ return{
|
||||
{"新人须知",
|
||||
"xinren new noob readme",
|
||||
"help",
|
||||
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(top/jstris/tetrjs/tech),别用编程练习渣版本\n\t\t2.踏实打好基础(next预判稳定消四),别只想着炫酷T旋\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角的按钮打开链接]",
|
||||
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(tetrio/jstris/top/tetrjs/tech),别用编程练习渣版本\n\t\t2.踏实打好基础(next预判稳定消四),别只想着炫酷T旋\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角的按钮打开链接]",
|
||||
"http://bilibili.com/read/cv2352939",
|
||||
},
|
||||
{"HardDrop wiki",
|
||||
@@ -90,7 +90,7 @@ return{
|
||||
{"TGM",
|
||||
"tgm tetrisgrandmaster",
|
||||
"game",
|
||||
"一个街机平台方块系列,S13/GM等称号出自该系列,可以在win平台运行\n\n其中TGM3目前玩得最普遍,部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四,字幕战中消除和通关,每100的前70小于【标准时间,上一个0~70秒数+2】中小的一个,每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式,类似于techmino中的20G-极限,开局就是高速20G,500和1000有铁门,500开始底下开始涨垃圾行,1000开始出现骨块,1300通关进入大方块字幕战;段位结算:每通100加1段从S1到S13,如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
|
||||
"一个街机平台方块系列,S13/GM等称号出自该系列,可以在win平台运行\n\n其中TGM3目前玩得最普遍,部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四,字幕战中消除和通关,每100的前70小于【标准时间,上一个0~70秒数+2】中小的一个,每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式,类似于techmino中的20G-极限,开局就是高速20G,500和1000有铁门,500开始底下开始涨垃圾行,1000开始出现骨块,1300通关进入大方块字幕战;段位结算:每通100加1段从S1到S13,如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
|
||||
"http://139.199.75.237/TGMGUIDE/",
|
||||
},
|
||||
{"DTET",
|
||||
@@ -602,7 +602,7 @@ return{
|
||||
{"死亡判定",
|
||||
"die death siwang",
|
||||
"term",
|
||||
"现代方块的死亡判定:\n1.新出现的方块和场地方块有重叠(窒息)(c4w比s4w强的原因,因为被打进18行都不会窒息)\n2.方块锁定时完全在场地的外面\n3.所有东西的总高度超出40。\n\n注:本游戏使用的死亡判定没有上述的第二条,第三条的40改成42",
|
||||
"现代方块普遍使用的死亡判定:\n1.新出现的方块和场地方块有重叠(窒息)(c4w比s4w强的原因,因为被打进18行都不会窒息)\n2.方块锁定时完全在场地的外面\n3.所有东西的总高度超出40。\n\n注:本游戏使用的死亡判定不包含上述的第二条,并且第三条的40改成42",
|
||||
},
|
||||
{"下落速度",
|
||||
"drop speed",
|
||||
@@ -634,6 +634,11 @@ return{
|
||||
"term",
|
||||
"打字时按住o,你会看到:Ooooooooooo\n在时间轴上:O-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度,-就是arr长度",
|
||||
},
|
||||
{"DAS打断",
|
||||
"dascut",
|
||||
"term",
|
||||
"在放了一个方块后会取消/重置/减小das计时器,让自动移动不会立刻生效,减少移动键松开晚了导致下一块一出现就立即开始移动的情况",
|
||||
},
|
||||
{"bag7",
|
||||
"bag7bag",
|
||||
"term",
|
||||
@@ -657,7 +662,7 @@ return{
|
||||
{"Hypertap",
|
||||
"hypertap",
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为das不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人被称为Hypertapper",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"top attack",
|
||||
@@ -699,7 +704,7 @@ return{
|
||||
"term",
|
||||
"指长时间不来i方块(长条),但在现代方块使用的bag7出块规则下干旱几乎不可能,平均7块就会有一个i,理论极限两个i最远中间隔12块",
|
||||
},
|
||||
{"MPH mode",
|
||||
{"MPH模式",
|
||||
"mph",
|
||||
"term",
|
||||
"一个游戏模式:\nMemoryless, Previewless, Holdless\n纯随机+无next+无hold,一个非常考验玩家反应速度的模式",
|
||||
@@ -717,13 +722,13 @@ return{
|
||||
{"ZZZbot",
|
||||
"zzzbot",
|
||||
"term",
|
||||
"一个ai的名字(就跟alphaGo一样)\n由研究群群友奏之章开发,在各游戏表现都很不错",
|
||||
"一个ai的名字(就跟alphaGo一样)\n由研究群群友奏之章开发,重新调参后在各个游戏平台上的表现都很不错",
|
||||
},
|
||||
|
||||
{"研究群号",
|
||||
{"研究群",
|
||||
"yanjiu study",
|
||||
"other",
|
||||
"俄罗斯方块·[研究]群号112897780,“中国俄罗斯方块群”",
|
||||
"俄罗斯方块·[研究]群号112897780,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"茶服",
|
||||
"chafu study",
|
||||
@@ -910,7 +915,7 @@ return{
|
||||
{"吴淞昊",
|
||||
"electric modian zhunbei 283",
|
||||
"name",
|
||||
"【研究群】「T283」\n国内一流高端隐形方块玩家,上过最强大脑",
|
||||
"【研究群】「T283」\n国内一流隐形方块玩家,上过最强大脑",
|
||||
"https://space.bilibili.com/17583394",
|
||||
},
|
||||
{"他天一",
|
||||
|
||||
@@ -96,6 +96,7 @@ return{
|
||||
-- chatRemain="人数:",
|
||||
-- chatStart="------消息的开头------",
|
||||
-- chatHistory="------以上是历史消息------",
|
||||
-- chatQuit="再按一次退出",
|
||||
|
||||
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
||||
|
||||
@@ -294,7 +295,7 @@ return{
|
||||
title="Control Settings",
|
||||
preview="Preview",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
das="DAS",arr="ARR",dascut="DAS cut",
|
||||
sddas="Soft Drop DAS",sdarr="Soft Drop ARR",
|
||||
ihs="Initial Hold",
|
||||
irs="Initial Rotation",
|
||||
|
||||
@@ -99,6 +99,7 @@ return{
|
||||
-- chatRemain="人数:",
|
||||
-- chatStart="------消息的开头------",
|
||||
-- chatHistory="------以上是历史消息------",
|
||||
-- chatQuit="再按一次退出",
|
||||
|
||||
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
||||
|
||||
@@ -254,13 +255,13 @@ return{
|
||||
game="Jeu→",
|
||||
|
||||
block="Dessiner le bloc",
|
||||
ghost="Pièce fantôme",
|
||||
center="Centre",
|
||||
|
||||
smooth="Chute fluide",
|
||||
grid="Grille",
|
||||
bagLine="Ligne du Sac",
|
||||
|
||||
ghost="Pièce fantôme",
|
||||
grid="Grille",
|
||||
center="Centre",
|
||||
|
||||
lockFX="Effets de verrouillage",
|
||||
dropFX="Effets de chute",
|
||||
moveFX="Effets de déplacement",
|
||||
@@ -296,7 +297,7 @@ return{
|
||||
title="Paramètres de contrôle",
|
||||
preview="Aperçu",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
das="DAS",arr="ARR",-- dascut="DAS cut",
|
||||
sddas="DAS de chute rapide",sdarr="ARR de chute rapide",
|
||||
ihs="Réserve Initiale",
|
||||
irs="Rotation Initiale",
|
||||
|
||||
@@ -100,6 +100,7 @@ return{
|
||||
-- chatRemain="人数:",
|
||||
-- chatStart="------消息的开头------",
|
||||
-- chatHistory="------以上是历史消息------",
|
||||
-- chatQuit="再按一次退出",
|
||||
|
||||
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
||||
|
||||
@@ -256,13 +257,13 @@ return{
|
||||
game="Juego→",
|
||||
|
||||
block="Dibujar Bloques",
|
||||
ghost="Fantasma",
|
||||
center="Centrar",
|
||||
|
||||
smooth="Caída Fluida",
|
||||
grid="Grilla",
|
||||
bagLine="Línea de Bag de Pzas.",
|
||||
|
||||
ghost="Fantasma",
|
||||
grid="Grilla",
|
||||
center="Centrar",
|
||||
|
||||
lockFX="FX Vis. de Bloqueo",
|
||||
dropFX="FX Vis. de Caída",
|
||||
moveFX="FX Vis. de Movim.",
|
||||
@@ -297,7 +298,7 @@ return{
|
||||
title="Ajustes de Controles",
|
||||
preview="Ejemplo",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
das="DAS",arr="ARR",-- dascut="DAS cut",
|
||||
sddas="DAS de C. Ráp.",sdarr="ARR de C. Rápida",
|
||||
ihs="Resv. Inicial",
|
||||
irs="Rot. Inicial",
|
||||
|
||||
@@ -161,13 +161,13 @@ return{
|
||||
game="Game→",
|
||||
|
||||
block="==↓==",
|
||||
ghost="__↓__",
|
||||
center="+",
|
||||
|
||||
smooth="~~↓~~",
|
||||
grid="#",
|
||||
bagLine="123|123",
|
||||
|
||||
ghost="__↓__",
|
||||
grid="#",
|
||||
center="+",
|
||||
|
||||
lockFX="↓_~",
|
||||
dropFX="↓~",
|
||||
moveFX="←→~",
|
||||
@@ -203,7 +203,7 @@ return{
|
||||
title="[~~]",
|
||||
preview="?:",
|
||||
|
||||
das="x---x x x",arr="x x-x-x",
|
||||
das="x---x x x",arr="x x-x-x",dascut="x x ↓___x x",
|
||||
sddas="↓---↓ ↓ ↓",sdarr="↓ ↓-↓-↓",
|
||||
ihs="![ ]",
|
||||
irs="!''",
|
||||
|
||||
@@ -97,6 +97,7 @@ return{
|
||||
chatRemain="人数:",
|
||||
chatStart="------消息的开头------",
|
||||
chatHistory="------以上是历史消息------",
|
||||
chatQuit="再按一次退出",
|
||||
|
||||
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
@@ -276,13 +277,13 @@ return{
|
||||
game="游戏设置→",
|
||||
|
||||
block="方块可见",
|
||||
ghost="阴影透明度",
|
||||
center="旋转中心透明度",
|
||||
|
||||
smooth="平滑下落",
|
||||
grid="网格",
|
||||
bagLine="包分界线",
|
||||
|
||||
ghost="阴影透明度",
|
||||
grid="网格",
|
||||
center="旋转中心透明度",
|
||||
|
||||
lockFX="锁定特效",
|
||||
dropFX="下落特效",
|
||||
moveFX="移动特效",
|
||||
@@ -319,7 +320,7 @@ return{
|
||||
title="控制设置",
|
||||
preview="预览",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
das="DAS",arr="ARR",dascut="DAS打断",
|
||||
sddas="软降DAS",sdarr="软降ARR",
|
||||
ihs="提前Hold",
|
||||
irs="提前旋转",
|
||||
@@ -743,7 +744,12 @@ return{
|
||||
"3.1415926535897932384",
|
||||
"40行世界纪录:15.654s",
|
||||
"626r/s",
|
||||
"0next 0hold.",
|
||||
"1next 0hold",
|
||||
"1next 1hold!",
|
||||
"3next 1hold?",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"7宽三SZ架空捐了解一下",
|
||||
"把手机调到特殊的日期也不会发生什么的(真的",
|
||||
"报时机器人:新的一天开始了",
|
||||
@@ -804,7 +810,6 @@ return{
|
||||
"请不要一直看主页机器人玩,可能比较费电",
|
||||
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
|
||||
"去玩别的方块的时候记得没有Ospin!",
|
||||
"如果有不认识的术语,可以去 帮助-词典 自行查询",
|
||||
"扫雷好玩!",
|
||||
"少女祈祷中",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
@@ -870,7 +875,7 @@ return{
|
||||
"Z块等身抱枕来一个(x",
|
||||
{COLOR.B,"COLOR.blue"},
|
||||
{COLOR.C,"Xspin",COLOR.W,"是个啥玩意"},
|
||||
{COLOR.cyan,"♦PU",COLOR.grape,"RE♦"},
|
||||
{COLOR.cyan,"□PURE ",COLOR.grape,"MEMORY□"},
|
||||
{COLOR.cyan,"COLOR.cyan"},
|
||||
{COLOR.cyan,"VVVVVV好玩!"},
|
||||
{COLOR.fire,"COLOR.fire"},
|
||||
@@ -899,7 +904,7 @@ return{
|
||||
{COLOR.lGrey,"你有一个好"},
|
||||
{COLOR.lR,"Z ",COLOR.lG,"S ",COLOR.lSea,"J ",COLOR.lOrange,"L ",COLOR.lGrape,"T ",COLOR.lY,"O ",COLOR.lC,"I"},
|
||||
{COLOR.lSea,"茶娘",COLOR.W," 可爱!"},
|
||||
{COLOR.lSky,"Naki",COLOR.W," 可爱!"},
|
||||
{COLOR.lGrape,"Naki",COLOR.W," 可爱!"},
|
||||
{COLOR.lY,"暂定段位:GM"},
|
||||
{COLOR.lY,"暂定段位:MM"},
|
||||
{COLOR.lY,"COOL!!"},
|
||||
|
||||
@@ -200,7 +200,6 @@ do--drawableTextLoad, drawableText
|
||||
"combo","maxcmb",
|
||||
"pc","ko",
|
||||
|
||||
"VKTchW","VKOrgW","VKCurW",
|
||||
"noScore","highScore",
|
||||
}
|
||||
drawableText={
|
||||
@@ -224,7 +223,6 @@ do--drawableTextLoad, drawableText
|
||||
win=T(120),finish=T(120),
|
||||
gameover=T(100),pause=T(120),
|
||||
|
||||
VKTchW=T(30),VKOrgW=T(30),VKCurW=T(30),
|
||||
noScore=T(45),highScore=T(30),
|
||||
}
|
||||
end
|
||||
|
||||
@@ -37,18 +37,18 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
PLAYERS[1].modeData.event="M7"
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.grade,69,240)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
mText(drawableText.grade,69,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,69,180)
|
||||
mStr(P.modeData.event,69,110)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.score}end,
|
||||
scoreDisp=function(D)return sectionName[int(D[1]*.1)+1].." "..D[2]end,
|
||||
|
||||
@@ -39,14 +39,14 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,69,270)
|
||||
mStr("22",69,390)
|
||||
mText(drawableText.wave,69,330)
|
||||
mText(drawableText.nextWave,69,450)
|
||||
mStr(P.modeData.event,69,200)
|
||||
mStr("22",69,320)
|
||||
mText(drawableText.wave,69,260)
|
||||
mText(drawableText.nextWave,69,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -46,18 +46,18 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,69,270)
|
||||
mStr(P.modeData.event,69,200)
|
||||
mStr(
|
||||
P.modeData.event<10 and 20
|
||||
or P.modeData.event<20 and 24
|
||||
or 28
|
||||
,69,390)
|
||||
mText(drawableText.wave,69,330)
|
||||
mText(drawableText.nextWave,69,450)
|
||||
,69,320)
|
||||
mText(drawableText.wave,69,260)
|
||||
mText(drawableText.nextWave,69,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -10,7 +10,7 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.finesseRate*25/P.stat.piece}end,
|
||||
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end,
|
||||
|
||||
@@ -11,14 +11,14 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -15,16 +15,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
gc.setColor(1,1,1,.2)
|
||||
gc.draw(IMG.electric,124,176,0,2.6)
|
||||
gc.draw(IMG.electric,124,106,0,2.6)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -16,16 +16,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
gc.setColor(1,1,1,.2)
|
||||
gc.draw(IMG.electric,124,176,0,2.6)
|
||||
gc.draw(IMG.electric,124,106,0,2.6)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -12,16 +12,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
gc.setColor(1,1,1,.2)
|
||||
gc.draw(IMG.electric,124,176,0,2.6)
|
||||
gc.draw(IMG.electric,124,106,0,2.6)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -15,16 +15,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
gc.setColor(1,1,1,.2)
|
||||
gc.draw(IMG.electric,124,176,0,2.6)
|
||||
gc.draw(IMG.electric,124,106,0,2.6)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -16,7 +16,7 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
if SETTING.spawn==0 then
|
||||
LOG.print(text.switchSpawnSFX,COLOR.yellow)
|
||||
end
|
||||
@@ -34,7 +34,7 @@ return{
|
||||
--Frame
|
||||
gc.setColor(.5,.5,.5)
|
||||
gc.push("transform")
|
||||
gc.translate(150,70)
|
||||
gc.translate(150,0)
|
||||
gc.rectangle("line",-1,-11,302,612)--Boarder
|
||||
gc.rectangle("line",301,-3,15,604)--AtkBuffer boarder
|
||||
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
|
||||
@@ -45,16 +45,16 @@ return{
|
||||
--Figures
|
||||
local t=Timer()
|
||||
gc.setColor(1,1,1,.5+.2*sin(t))
|
||||
gc.draw(IMG.hbm,-276,-16,0,1.5)
|
||||
gc.draw(IMG.electric,476,212,0,2.6)
|
||||
gc.draw(IMG.hbm,-276,-86,0,1.5)
|
||||
gc.draw(IMG.electric,476,142,0,2.6)
|
||||
|
||||
--Texts
|
||||
gc.setColor(.8,.8,.8)
|
||||
mText(drawableText.line,69,370)
|
||||
mText(drawableText.techrash,69,490)
|
||||
mText(drawableText.line,69,300)
|
||||
mText(drawableText.techrash,69,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,69,290)
|
||||
mStr(P.stat.clears[4],69,410)
|
||||
mStr(P.stat.row,69,220)
|
||||
mStr(P.stat.clears[4],69,340)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,40),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -27,7 +27,7 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
@@ -46,10 +46,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,69,380)
|
||||
mStr(P.modeData.point,69,470)
|
||||
mText(drawableText.combo,69,428)
|
||||
mText(drawableText.maxcmb,69,520)
|
||||
mStr(P.combo,69,310)
|
||||
mStr(P.modeData.point,69,400)
|
||||
mText(drawableText.combo,69,358)
|
||||
mText(drawableText.maxcmb,69,450)
|
||||
end,
|
||||
score=function(P)return{min(P.modeData.point,100),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,
|
||||
|
||||
@@ -25,7 +25,7 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
@@ -44,10 +44,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.combo,69,380)
|
||||
mStr(P.modeData.point,69,470)
|
||||
mText(drawableText.combo,69,428)
|
||||
mText(drawableText.maxcmb,69,520)
|
||||
mStr(P.combo,69,310)
|
||||
mStr(P.modeData.point,69,400)
|
||||
mText(drawableText.combo,69,358)
|
||||
mText(drawableText.maxcmb,69,450)
|
||||
end,
|
||||
score=function(P)return{min(P.modeData.point,100),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,
|
||||
|
||||
@@ -34,17 +34,17 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.gameEnv.target*.1
|
||||
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),69,280)
|
||||
mText(drawableText.speedLV,69,360)
|
||||
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),69,210)
|
||||
mText(drawableText.speedLV,69,290)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,390)
|
||||
mStr(P.gameEnv.target,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.gameEnv.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,
|
||||
|
||||
@@ -38,7 +38,7 @@ local function checkClear(P)
|
||||
P.field[_],P.visTime[_]=nil
|
||||
end
|
||||
setField(P,P.modeData.point+1)
|
||||
SYSFX.newShade(1.4,.6,.8,.6,P.x+150*P.size,P.y+60*P.size,300*P.size,610*P.size)
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
||||
SFX.play("blip_1")
|
||||
else
|
||||
P:win("finish")
|
||||
@@ -49,51 +49,37 @@ return{
|
||||
color=COLOR.white,
|
||||
env={},
|
||||
load=function()
|
||||
for k,v in next,CUSTOMENV do
|
||||
GAME.modeEnv[k]=v
|
||||
end
|
||||
if BAG[1]then
|
||||
GAME.modeEnv.bag=BAG
|
||||
else
|
||||
GAME.modeEnv.bag=nil
|
||||
end
|
||||
if MISSION[1]then
|
||||
GAME.modeEnv.mission=MISSION
|
||||
else
|
||||
GAME.modeEnv.mission=nil
|
||||
end
|
||||
applyCustomGame()
|
||||
GAME.modeEnv.dropPiece=PLY.check_lineReach
|
||||
for y=1,20 do
|
||||
if notAir(FIELD[1][y])then
|
||||
--Switch clear mode on
|
||||
--Switch clear sprint mode on
|
||||
GAME.modeEnv.dropPiece=checkClear
|
||||
break
|
||||
end
|
||||
end
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local L=GAME.modeEnv.opponent
|
||||
if L~=0 then
|
||||
GAME.modeEnv.target=nil
|
||||
if L<6 then
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("9S",2*L))
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",2*L))
|
||||
else
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",2*L-11,int(L*.5-1.5),true,4000*L))
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",2*L-11,int(L*.5-1.5),true,4000*L))
|
||||
end
|
||||
end
|
||||
for _,P in next,PLAYERS.alive do
|
||||
setField(P,1)
|
||||
end
|
||||
GAME.modeEnv.bg=CUSTOMENV.bg
|
||||
GAME.modeEnv.bgm=CUSTOMENV.bgm
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
if P.gameEnv.target>1e10 then
|
||||
mStr(P.stat.row,69,295)
|
||||
mText(drawableText.line,69,360)
|
||||
mStr(P.stat.row,69,225)
|
||||
mText(drawableText.line,69,290)
|
||||
else
|
||||
local R=P.gameEnv.target-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,310)
|
||||
mStr(R>=0 and R or 0,69,240)
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -22,7 +22,7 @@ local function puzzleCheck(P)
|
||||
FREEROW.discard(P.visTime[_])
|
||||
P.field[_],P.visTime[_]=nil
|
||||
end
|
||||
SYSFX.newShade(1.4,.3,1,.3,P.x+150*P.size,P.y+60*P.size,300*P.size,610*P.size)
|
||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)
|
||||
SFX.play("reach")
|
||||
P.modeData.event=0
|
||||
else
|
||||
@@ -38,44 +38,30 @@ return{
|
||||
dropPiece=puzzleCheck,
|
||||
},
|
||||
load=function()
|
||||
for k,v in next,CUSTOMENV do
|
||||
GAME.modeEnv[k]=v
|
||||
end
|
||||
if BAG[1]then
|
||||
GAME.modeEnv.bag=BAG
|
||||
else
|
||||
GAME.modeEnv.bag=nil
|
||||
end
|
||||
if MISSION[1]then
|
||||
GAME.modeEnv.mission=MISSION
|
||||
else
|
||||
GAME.modeEnv.mission=nil
|
||||
end
|
||||
PLY.newPlayer(1,340,15)
|
||||
applyCustomGame()
|
||||
PLY.newPlayer(1)
|
||||
local L=GAME.modeEnv.opponent
|
||||
if L~=0 then
|
||||
GAME.modeEnv.target=nil
|
||||
if L<6 then
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("9S",2*L))
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",2*L))
|
||||
else
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",2*L-11,int(L*.5-1.5),true,4000*L))
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",2*L-11,int(L*.5-1.5),true,4000*L))
|
||||
end
|
||||
end
|
||||
GAME.modeEnv.bg=CUSTOMENV.bg
|
||||
GAME.modeEnv.bgm=CUSTOMENV.bgm
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
local dx,dy=P.fieldOff.x,P.fieldOff.y
|
||||
setFont(55)
|
||||
mStr(P.stat.row,69,295)
|
||||
mText(drawableText.line,69,360)
|
||||
mStr(P.stat.row,69,225)
|
||||
mText(drawableText.line,69,290)
|
||||
if P.modeData.event==0 then
|
||||
local m=puzzleMark
|
||||
local F=FIELD[P.modeData.point+1]
|
||||
for y=1,20 do for x=1,10 do
|
||||
local T=F[y][x]
|
||||
if T~=0 then
|
||||
gc.draw(m[T],150+30*x-30+dx,70+600-30*y+dy)
|
||||
gc.draw(m[T],150+30*x-30+dx,600-30*y+dy)
|
||||
end
|
||||
end end
|
||||
end
|
||||
|
||||
@@ -11,19 +11,19 @@ return{
|
||||
while true do
|
||||
coroutine.yield()
|
||||
if P.control and SCN.cur=="play"then
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
local t=240-2*P.modeData.event
|
||||
if P.modeData.counter>=t then
|
||||
P.modeData.counter=0
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(240-2*D.event,40)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,4 do
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(10),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2}
|
||||
end
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+4
|
||||
P.stat.recv=P.stat.recv+4
|
||||
local D=P.modeData
|
||||
if D.event<75 then
|
||||
D.event=D.event+1
|
||||
D.point=int(144e3/(240-2*D.event))*.1
|
||||
D.event=D.event+1
|
||||
if D.event<=75 then
|
||||
D.point=int(144e3/t)*.1
|
||||
if D.event==25 then
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
@@ -45,14 +45,14 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,69,270)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mText(drawableText.wave,69,330)
|
||||
mText(drawableText.rpm,69,450)
|
||||
mStr(P.modeData.event,69,200)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mText(drawableText.wave,69,260)
|
||||
mText(drawableText.rpm,69,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -11,19 +11,19 @@ return{
|
||||
while true do
|
||||
coroutine.yield()
|
||||
if P.control and SCN.cur=="play"then
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
local t=360-P.modeData.event*2
|
||||
if P.modeData.counter>=t then
|
||||
P.modeData.counter=0
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
local t=math.max(360-D.event*2,60)
|
||||
if D.counter>=t then
|
||||
D.counter=0
|
||||
for _=1,3 do
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(2,9),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1}
|
||||
end
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+3
|
||||
P.stat.recv=P.stat.recv+3
|
||||
local D=P.modeData
|
||||
if D.event<90 then
|
||||
D.event=D.event+1
|
||||
D.point=int(108e3/(360-D.event*2))*.1
|
||||
D.event=D.event+1
|
||||
if D.event<=90 then
|
||||
D.point=int(108e3/t)*.1
|
||||
if D.event==25 then
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=2
|
||||
@@ -45,14 +45,14 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,69,270)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mText(drawableText.wave,69,330)
|
||||
mText(drawableText.rpm,69,450)
|
||||
mStr(P.modeData.event,69,200)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mText(drawableText.wave,69,260)
|
||||
mText(drawableText.rpm,69,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -12,7 +12,7 @@ return{
|
||||
bg="bg1",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(10-P.stat.dig,69,335)
|
||||
mStr(10-P.stat.dig,69,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,
|
||||
|
||||
@@ -15,7 +15,7 @@ return{
|
||||
bg="bg2",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(100-P.stat.dig,69,335)
|
||||
mStr(100-P.stat.dig,69,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,
|
||||
|
||||
@@ -15,7 +15,7 @@ return{
|
||||
bg="bg1",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(40-P.stat.dig,69,335)
|
||||
mStr(40-P.stat.dig,69,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,
|
||||
|
||||
@@ -15,7 +15,7 @@ return{
|
||||
bg="bg2",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,10 do
|
||||
P:garbageRise(21,1,P:getHolePos())
|
||||
@@ -24,7 +24,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
mStr(400-P.stat.dig,69,335)
|
||||
mStr(400-P.stat.dig,69,265)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,
|
||||
|
||||
@@ -23,12 +23,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
|
||||
@@ -22,12 +22,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
|
||||
@@ -99,12 +99,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(70)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,335)
|
||||
mStr(R>=0 and R or 0,69,265)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
@@ -114,8 +114,8 @@ return{
|
||||
if L>=100 then
|
||||
local T=P.stat.frame/60
|
||||
return
|
||||
T<=90 and 5 or
|
||||
T<=105 and 4 or
|
||||
T<=100 and 5 or
|
||||
T<=120 and 4 or
|
||||
T<=160 and 3 or
|
||||
T<=240 and 2 or
|
||||
1
|
||||
|
||||
@@ -13,12 +13,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(70)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,335)
|
||||
mStr(R>=0 and R or 0,69,265)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
@@ -28,10 +28,10 @@ return{
|
||||
if L>=100 then
|
||||
local T=P.stat.frame/60
|
||||
return
|
||||
T<=65 and 5 or
|
||||
T<=80 and 5 or
|
||||
T<=100 and 4 or
|
||||
T<=145 and 3 or
|
||||
T<=220 and 2 or
|
||||
T<=150 and 3 or
|
||||
T<=210 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
|
||||
@@ -7,13 +7,13 @@ return{
|
||||
bg="glow",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
}
|
||||
@@ -36,7 +36,7 @@ return{
|
||||
bg="wing",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local P=PLAYERS[1]
|
||||
for _=1,8 do
|
||||
P:garbageRise(13,1,P:RND(10))
|
||||
@@ -45,11 +45,11 @@ return{
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.dig,69,260)
|
||||
mStr(P.stat.atk,69,380)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,490)
|
||||
mText(drawableText.line,69,313)
|
||||
mText(drawableText.atk,69,433)
|
||||
mText(drawableText.eff,69,545)
|
||||
mStr(P.stat.dig,69,190)
|
||||
mStr(P.stat.atk,69,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,420)
|
||||
mText(drawableText.line,69,243)
|
||||
mText(drawableText.atk,69,363)
|
||||
mText(drawableText.eff,69,475)
|
||||
end,
|
||||
}
|
||||
@@ -28,13 +28,13 @@ return{
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,390)
|
||||
mStr(P.gameEnv.target,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.gameEnv.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -25,13 +25,13 @@ return{
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,390)
|
||||
mStr(P.modeData.point+10,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.point+10,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -32,13 +32,13 @@ return{
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,69,390)
|
||||
mStr(P.modeData.point+10,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.stat.row,69,320)
|
||||
mStr(P.modeData.point+10,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -54,13 +54,13 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mStr((P.modeData.event+1)*100,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mStr((P.modeData.event+1)*100,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].."P "..toTime(D[2])end,
|
||||
|
||||
@@ -56,13 +56,13 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mStr((P.modeData.event+1)*100,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mStr((P.modeData.event+1)*100,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].."P "..toTime(D[2])end,
|
||||
|
||||
@@ -53,13 +53,13 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mStr((P.modeData.event+1)*100,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mStr((P.modeData.event+1)*100,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].."P "..toTime(D[2])end,
|
||||
|
||||
@@ -52,7 +52,7 @@ local function check_LVup(P)
|
||||
for i=1,10 do
|
||||
P:createClearingFX(i,1.5)
|
||||
end
|
||||
SYSFX.newShade(2.5,1,1,1,P.x+150*P.size,P.y+370*P.size,300*P.size,300*P.size)
|
||||
SYSFX.newShade(2.5,P.absFieldX,P.y+300*P.size,300*P.size,300*P.size)
|
||||
|
||||
ENV.lock=13
|
||||
ENV.wait=6
|
||||
@@ -146,13 +146,13 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,69,390)
|
||||
mStr(P.gameEnv.target,69,440)
|
||||
gc.rectangle("fill",25,445,90,4)
|
||||
mStr(P.modeData.point,69,320)
|
||||
mStr(P.gameEnv.target,69,370)
|
||||
gc.rectangle("fill",25,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.result=="WIN"and 260 or P.modeData.point,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].."P "..toTime(D[2])end,
|
||||
|
||||
@@ -10,16 +10,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,320)
|
||||
mStr(R>=0 and R or 0,69,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,69,420)
|
||||
mText(drawableText.pc,69,502)
|
||||
mStr(P.stat.pc,69,350)
|
||||
mText(drawableText.pc,69,432)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -10,16 +10,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,320)
|
||||
mStr(R>=0 and R or 0,69,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,69,420)
|
||||
mText(drawableText.pc,69,502)
|
||||
mStr(P.stat.pc,69,350)
|
||||
mText(drawableText.pc,69,432)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -8,16 +8,16 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,69,320)
|
||||
mStr(R>=0 and R or 0,69,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,69,420)
|
||||
mText(drawableText.pc,69,502)
|
||||
mStr(P.stat.pc,69,350)
|
||||
mText(drawableText.pc,69,432)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -65,13 +65,13 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,69,400)
|
||||
mText(drawableText.pc,69,482)
|
||||
mStr(P.stat.pc,69,330)
|
||||
mText(drawableText.pc,69,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -57,13 +57,13 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
check(PLAYERS[1])
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,69,400)
|
||||
mText(drawableText.pc,69,482)
|
||||
mStr(P.stat.pc,69,330)
|
||||
mText(drawableText.pc,69,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -19,8 +19,8 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",10,1,true,10000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",10,1,true,10000))
|
||||
GAME.garbageSpeed=1e99
|
||||
end,
|
||||
score=function(P)return{P.stat.piece,P.stat.frame/60}end,
|
||||
|
||||
@@ -19,8 +19,8 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",10,1,true,13000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",10,1,true,13000))
|
||||
GAME.garbageSpeed=1e99
|
||||
end,
|
||||
score=function(P)return{P.stat.piece,P.stat.frame/60}end,
|
||||
|
||||
@@ -19,8 +19,8 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",10,2,true,16000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",10,2,true,16000))
|
||||
GAME.garbageSpeed=1e99
|
||||
end,
|
||||
score=function(P)return{P.stat.piece,P.stat.frame/60}end,
|
||||
|
||||
@@ -19,8 +19,8 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",10,3,true,26000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",10,3,true,26000))
|
||||
GAME.garbageSpeed=1e99
|
||||
end,
|
||||
score=function(P)return{P.stat.piece,P.stat.frame/60}end,
|
||||
|
||||
@@ -19,8 +19,8 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",10,3,true,40000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",10,3,true,40000))
|
||||
GAME.garbageSpeed=1e99
|
||||
end,
|
||||
score=function(P)return{P.stat.piece,P.stat.frame/60}end,
|
||||
|
||||
@@ -8,8 +8,8 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("9S",4))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",4))
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return toTime(D[1])end,
|
||||
|
||||
@@ -8,8 +8,8 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("9S",5))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",5))
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return toTime(D[1])end,
|
||||
|
||||
@@ -8,8 +8,8 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("9S",6))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("9S",6))
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return toTime(D[1])end,
|
||||
|
||||
@@ -8,8 +8,8 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",6,2,true,30000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",6,2,true,30000))
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return toTime(D[1])end,
|
||||
|
||||
@@ -8,8 +8,8 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newAIPlayer(2,965,360,.5,AIBUILDER("CC",7,3,true,50000))
|
||||
PLY.newPlayer(1)
|
||||
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,50000))
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return toTime(D[1])end,
|
||||
|
||||
@@ -8,13 +8,13 @@ return{
|
||||
bg="aura",bgm="waterfall",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -7,13 +7,13 @@ return{
|
||||
bg="aura",bgm="waterfall",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -8,13 +8,13 @@ return{
|
||||
bg="aura",bgm="waterfall",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -7,13 +7,13 @@ return{
|
||||
bg="aura",bgm="waterfall",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=10-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=1000-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
@@ -22,11 +22,11 @@ return{
|
||||
if P.stat.row<1000 then return end
|
||||
local T=P.stat.frame/60
|
||||
return
|
||||
T<=626 and 5 or
|
||||
T<=800 and 4 or
|
||||
T<=900 and 3 or
|
||||
T<=1050 and 2 or
|
||||
T<=1200 and 1 or
|
||||
T<=750 and 5 or
|
||||
T<=950 and 4 or
|
||||
T<=1100 and 3 or
|
||||
T<=1260 and 2 or
|
||||
T<=1600 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=20-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="bg2",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
|
||||
@@ -6,13 +6,13 @@ return{
|
||||
bg="rainbow",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=400-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,69,335)
|
||||
mStr(r,69,265)
|
||||
PLY.draw.drawTargetLine(P,r)
|
||||
end,
|
||||
score=function(P)return{P.stat.frame/60,P.stat.piece}end,
|
||||
@@ -23,10 +23,10 @@ return{
|
||||
local T=P.stat.frame/60
|
||||
return
|
||||
T<=300 and 5 or
|
||||
T<=330 and 4 or
|
||||
T<=360 and 3 or
|
||||
T<=390 and 2 or
|
||||
T<=420 and 1 or
|
||||
T<=380 and 4 or
|
||||
T<=440 and 3 or
|
||||
T<=500 and 2 or
|
||||
T<=640 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -23,12 +23,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -29,12 +29,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -24,12 +24,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -28,12 +28,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -30,12 +30,12 @@ return{
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,69,380)
|
||||
mText(drawableText.wave,69,445)
|
||||
mStr(P.modeData.event,69,310)
|
||||
mText(drawableText.wave,69,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -13,14 +13,14 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -25,14 +25,14 @@ return{
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -12,14 +12,14 @@ return{
|
||||
bg="matrix",bgm="down",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -22,14 +22,14 @@ return{
|
||||
bg="matrix",bgm="down",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -12,14 +12,14 @@ return{
|
||||
bg="matrix",bgm="down",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -22,14 +22,14 @@ return{
|
||||
bg="matrix",bgm="down",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -12,14 +12,14 @@ return{
|
||||
bg="matrix",bgm="new era",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -22,14 +22,14 @@ return{
|
||||
bg="matrix",bgm="new era",
|
||||
},
|
||||
load=function()
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
mStr(format("%.1f",P.stat.atk),69,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,380)
|
||||
mText(drawableText.atk,69,313)
|
||||
mText(drawableText.eff,69,433)
|
||||
mStr(format("%.1f",P.stat.atk),69,190)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),69,310)
|
||||
mText(drawableText.atk,69,243)
|
||||
mText(drawableText.eff,69,363)
|
||||
end,
|
||||
score=function(P)return{P.stat.atk<=200 and int(P.stat.atk)or 200,P.stat.frame/60}end,
|
||||
scoreDisp=function(D)return D[1].." Attack "..toTime(D[2])end,
|
||||
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
powerUp={2,5,10,20},
|
||||
stage={30,20,15,10,5},
|
||||
}
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local L={}for i=1,49 do L[i]=true end
|
||||
local t=CC and 2 or 0
|
||||
while t>0 do
|
||||
@@ -39,36 +39,36 @@ return{
|
||||
if L[r]then L[r],t=false,t-1 end
|
||||
end
|
||||
local n=2
|
||||
for i=1,4 do for j=1,6 do
|
||||
for _=1,4 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("9S",rnd(4,6)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(4,6)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("CC",rnd(2,4),2,true,20000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(2,4),2,true,20000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
for i=9,12 do for j=1,6 do
|
||||
for _=9,12 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("9S",rnd(4,5)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(4,5)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("CC",rnd(3,5),2,true,20000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(3,5),2,true,20000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(35)
|
||||
mStr(#PLAYERS.alive.."/49",69,245)
|
||||
mStr(P.modeData.point,80,285)
|
||||
gc.draw(drawableText.ko,23,295)
|
||||
mStr(#PLAYERS.alive.."/49",69,175)
|
||||
mStr(P.modeData.point,80,215)
|
||||
gc.draw(drawableText.ko,23,225)
|
||||
setFont(20)
|
||||
gc.setColor(1,.5,0,.6)
|
||||
gc.print(P.badge,103,297)
|
||||
gc.print(P.badge,103,227)
|
||||
gc.setColor(1,1,1)
|
||||
setFont(25)
|
||||
gc.print(powerUp[P.strength],18,360)
|
||||
gc.print(powerUp[P.strength],18,290)
|
||||
for i=1,P.strength do
|
||||
gc.draw(IMG.badgeIcon,16*i+12,330)
|
||||
gc.draw(IMG.badgeIcon,16*i+12,260)
|
||||
end
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.modeData.point}end,
|
||||
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
powerUp={2,5,10,20},
|
||||
stage={30,20,15,10,5},
|
||||
}
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local L={}for i=1,49 do L[i]=true end
|
||||
local t=CC and 4 or 0
|
||||
while t>0 do
|
||||
@@ -39,36 +39,36 @@ return{
|
||||
if L[r]then L[r],t=false,t-1 end
|
||||
end
|
||||
local n=2
|
||||
for i=1,4 do for j=1,6 do
|
||||
for _=1,4 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("9S",rnd(4,8)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(4,8)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("CC",rnd(3,6),3,true,30000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(3,6),3,true,30000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
for i=9,12 do for j=1,6 do
|
||||
for _=9,12 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("9S",rnd(4,7)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(4,7)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("CC",rnd(4,6),3,true,30000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(4,6),3,true,30000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(35)
|
||||
mStr(#PLAYERS.alive.."/49",69,245)
|
||||
mStr(P.modeData.point,80,285)
|
||||
gc.draw(drawableText.ko,23,295)
|
||||
mStr(#PLAYERS.alive.."/49",69,175)
|
||||
mStr(P.modeData.point,80,215)
|
||||
gc.draw(drawableText.ko,23,225)
|
||||
setFont(20)
|
||||
gc.setColor(1,.5,0,.6)
|
||||
gc.print(P.badge,103,297)
|
||||
gc.print(P.badge,103,227)
|
||||
gc.setColor(1,1,1)
|
||||
setFont(25)
|
||||
gc.print(powerUp[P.strength],18,360)
|
||||
gc.print(powerUp[P.strength],18,290)
|
||||
for i=1,P.strength do
|
||||
gc.draw(IMG.badgeIcon,16*i+12,330)
|
||||
gc.draw(IMG.badgeIcon,16*i+12,260)
|
||||
end
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.modeData.point}end,
|
||||
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
powerUp={2,5,10,20},
|
||||
stage={30,20,15,10,5},
|
||||
}
|
||||
PLY.newPlayer(1,340,15)
|
||||
PLY.newPlayer(1)
|
||||
local L={}for i=1,49 do L[i]=true end
|
||||
local t=CC and 6 or 0
|
||||
while t>0 do
|
||||
@@ -39,36 +39,36 @@ return{
|
||||
if L[r]then L[r],t=false,t-1 end
|
||||
end
|
||||
local n=2
|
||||
for i=1,4 do for j=1,6 do
|
||||
for _=1,4 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("9S",rnd(8,10)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(8,10)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AIBUILDER("CC",rnd(4,7),3,true,40000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(4,7),3,true,40000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
for i=9,12 do for j=1,6 do
|
||||
for _=9,12 do for _=1,6 do
|
||||
if L[n]then
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("9S",rnd(8,9)))
|
||||
PLY.newAIPlayer(n,AIBUILDER("9S",rnd(8,9)),true)
|
||||
else
|
||||
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AIBUILDER("CC",rnd(5,8),3,true,40000))
|
||||
PLY.newAIPlayer(n,AIBUILDER("CC",rnd(5,8),3,true,40000),true)
|
||||
end
|
||||
n=n+1
|
||||
end end
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
setFont(35)
|
||||
mStr(#PLAYERS.alive.."/49",69,245)
|
||||
mStr(P.modeData.point,80,285)
|
||||
gc.draw(drawableText.ko,23,295)
|
||||
mStr(#PLAYERS.alive.."/49",69,175)
|
||||
mStr(P.modeData.point,80,215)
|
||||
gc.draw(drawableText.ko,23,225)
|
||||
setFont(20)
|
||||
gc.setColor(1,.5,0,.6)
|
||||
gc.print(P.badge,103,297)
|
||||
gc.print(P.badge,103,227)
|
||||
gc.setColor(1,1,1)
|
||||
setFont(25)
|
||||
gc.print(powerUp[P.strength],18,360)
|
||||
gc.print(powerUp[P.strength],18,290)
|
||||
for i=1,P.strength do
|
||||
gc.draw(IMG.badgeIcon,16*i+12,330)
|
||||
gc.draw(IMG.badgeIcon,16*i+12,260)
|
||||
end
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.modeData.point}end,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user