Compare commits

..

34 Commits

Author SHA1 Message Date
MrZ626
963b57a49b 0.10.9:舒尔特方格 2020-09-09 10:02:54 +08:00
MrZ626
9b57f55285 把音乐室装修得更好看了 2020-09-09 01:19:20 +08:00
MrZ626
86266731cd 美化隐形方块回放显示 2020-09-09 00:43:54 +08:00
MrZ626
78c0c7d18d 新BGM: Down 2020-09-09 00:25:17 +08:00
MrZ626
be7f7fe17b 优化15p开关排版和机制 2020-09-08 23:31:02 +08:00
MrZ626
b673892b7d LOG.print新增"short"输出方式,仅显示一个时长很短的不重要提示信息 2020-09-08 23:21:04 +08:00
MrZ626
7ab34480cd BGM文件夹不再追踪 2020-09-08 23:19:53 +08:00
MrZ626
f46cdbec47 排版微调 2020-09-08 23:19:33 +08:00
MrZ626
30f4073bc6 不允许使用瞬移操作的模式虚拟按键也不显示 2020-09-08 23:08:18 +08:00
MrZ626
6bc0da712d BGM重新转码,并不再使用git追踪 2020-09-08 22:45:25 +08:00
MrZ626
d553b2cb05 新增舒尔特方格 2020-09-08 19:07:01 +08:00
MrZ626
aebf6fafc2 优化15p细节 2020-09-08 13:09:21 +08:00
MrZ626
0287dd390d 画图界面新增顶起一行和消除满行功能 2020-09-06 22:28:45 +08:00
MrZ626
7f6d0e8c45 复活动画时长缩短 2020-09-06 22:20:32 +08:00
MrZ626
68c4a9fceb 缺失字体时使用引擎自带字体 2020-09-06 21:35:32 +08:00
MrZ626
e47e0e1c78 15p可关闭滑动轨迹显示 2020-09-06 21:22:43 +08:00
MrZ626
e5478739bb 修复左侧信息排版 2020-09-06 21:12:03 +08:00
MrZ626
0c7f56b656 调整ai难度 2020-09-06 01:20:43 +08:00
MrZ626
0b5c19b459 隐型模式回放时方块不会完全隐藏 2020-09-05 01:56:09 +08:00
MrZ626
f86d98bfde 代码再整理,移出do内local 2020-09-04 23:47:26 +08:00
MrZ626
e681a43fb1 优化LOG库,LOG.print功能更多 2020-09-04 20:20:51 +08:00
MrZ626
4f8810a693 优化splitS函数 2020-09-04 20:19:48 +08:00
MrZ626
0e5bcaa21e 主界面ai演示ghost受设置影响 2020-09-03 23:41:16 +08:00
MrZ626
6cc0b262be debug模式下帧间隔显示位置和颜色,非特殊功能键fallback到普通按键 2020-09-03 22:29:58 +08:00
MrZ626
4c94952052 代码整理 2020-09-03 18:10:27 +08:00
MrZ626
c82f04e115 屏幕尺寸相关代码整理,修复部分背景显示不正确 2020-09-03 16:07:46 +08:00
MrZ626
4da23852a7 部分弹出消息改用LOG.print输出到屏幕左上角 2020-09-03 16:00:28 +08:00
MrZ626
b873aa09d6 释放死掉的CC进程 2020-09-03 11:54:03 +08:00
MrZ626
d3ae0e28a8 单挑评分标准适配三条命 2020-09-03 11:53:38 +08:00
MrZ626
b730d5e485 修复CC死后不能正常复活 2020-09-03 01:22:50 +08:00
MrZ626
ffbfa525d4 略微降低单挑CC的难度 2020-09-03 01:21:53 +08:00
MrZ_26
ff9d63c910 Merge pull request #25 from flaribbit/master
add CI for windows-x64
2020-09-02 23:03:50 +08:00
flaribbit
ef32b917a8 Update build.yml 2020-09-01 16:51:27 +08:00
flaribbit
198e4bdaab add CI for windows-x64 2020-09-01 16:48:55 +08:00
57 changed files with 1621 additions and 1203 deletions

37
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: Techmino CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Download font
run: curl -LO https://github.com/flaribbit/Techmino/releases/download/font/font.ttf
- name: Download love
run: |
curl -LO https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
7z x love-11.3-win64.zip
- name: Download ColdClear
run: |
curl -LO https://github.com/flaribbit/Techmino/releases/download/coldclear/lib.zip
7z x lib.zip -olib
move lib\Windows\x86_64\cold_clear.dll love-11.3-win64
- name: Pack Techmino
run: |
7z a game.zip BGM image lib modes parts SFX VOICE Zframework conf.lua document.txt font.ttf main.lua
move game.zip game.love
cmd /c copy /b love-11.3-win64\love.exe + game.love love-11.3-win64\Techmino.exe
del love-11.3-win64\love.exe
del love-11.3-win64\lovec.exe
cmd /c rmdir /S/Q lib\windows\x86
- name: Artifact
uses: actions/upload-artifact@v1.0.0
with:
name: Techmino_x64
path: love-11.3-win64

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
lib
font.ttf
font.ttf
BGM

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -345,16 +345,18 @@ back.matrix={
t=t+dt
end,
draw=function()
gc.scale(scr.k)
gc.clear(.15,.15,.15)
local Y=ceil(scr.H/80)
for x=1,ceil(scr.W/80)do
for y=1,Y do
gc.setColor(1,1,1,sin(x+matrixT[x][y]*t)*.1+.1)
gc.rectangle("fill",80*x,80*y,-80,-80)
gc.push("transform")
local k=scr.k
gc.scale(k)
local Y=ceil(scr.h/80/k)
for x=1,ceil(scr.w/80/k)do
for y=1,Y do
gc.setColor(1,1,1,sin(x+matrixT[x][y]*t)*.1+.1)
gc.rectangle("fill",80*x,80*y,-80,-80)
end
end
end
gc.scale(1/scr.k)
gc.pop()
end,
}

View File

@@ -26,7 +26,7 @@ local BGM={
BGM.list={
"blank",
"race","push","way","reason",
"newera","oxygen","infinite",
"newera","oxygen","infinite","down",
"secret7th","secret8th",
"shining terminal","distortion","far",
"rockblock","cruelty","final","8-bit happiness","end",
@@ -55,7 +55,7 @@ function BGM.play(s)
elseif not s then
return
elseif not BGM.list[s]then
LOG.print("Cannot find BGM: "..s,color.lRed)
LOG.print("Cannot find BGM: "..s,"short",color.red)
return
end
if BGM.nowPlay~=s then

View File

@@ -5,14 +5,14 @@ local toN,toS=tonumber,tostring
local concat=table.concat
local function splitS(s,sep)
local t,n={},1
repeat
local p=find(s,sep)or #s+1
t[n]=sub(s,1,p-1)
n=n+1
s=sub(s,p+#sep)
until #s==0
return t
local L={}
local p1,p2=1--start,target
while p1<=#s do
p2=find(s,sep,p1)or #s+1
L[#L+1]=sub(s,p1,p2-1)
p1=p2+#sep
end
return L
end
local tabs={
[0]="",
@@ -99,7 +99,7 @@ function FILE.saveRecord(N,L)
local _,mes=F:write(dumpTable(L))
F:flush()F:close()
if not _ then
TEXT.show(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
LOG.print(text.recSavingError..(mes or"unknown error"),color.red)
end
end
function FILE.delRecord(N)
@@ -125,10 +125,9 @@ function FILE.saveUnlock()
local _,mes=F:write(dumpTable(modeRanks))
F:flush()F:close()
if not _ then
TEXT.show(text.unlockSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
LOG.print(text.unlockSavingError..(mes or"unknown error"),color.red)
end
end
function FILE.loadData()
local F=files.data
if F:open("r")then
@@ -151,7 +150,7 @@ function FILE.saveData()
local _,mes=F:write(dumpTable(stat))
F:flush()F:close()
if not _ then
TEXT.show(text.statSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
LOG.print(text.statSavingError..(mes or"unknown error"),color.red)
end
end
@@ -175,8 +174,8 @@ function FILE.saveSetting()
F:open("w")
local _,mes=F:write(dumpTable(setting))
F:flush()F:close()
if _ then TEXT.show(text.settingSaved,1140,650,40,"sudden",.5)
else TEXT.show(text.settingSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
if _ then LOG.print(text.settingSaved,color.green)
else LOG.print(text.settingSavingError..(mes or"unknown error"),color.red)
end
end
@@ -196,8 +195,8 @@ function FILE.saveKeyMap()
F:open("w")
local _,mes=F:write(dumpTable(keyMap))
F:flush()F:close()
if _ then TEXT.show(text.keyMapSaved,1140,650,26,"sudden",.5)
else TEXT.show(text.keyMapSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
if _ then LOG.print(text.keyMapSaved,color.green)
else LOG.print(text.keyMapSavingError..(mes or"unknown error"),color.red)
end
end
@@ -217,8 +216,8 @@ function FILE.saveVK()
F:open("w")
local _,mes=F:write(dumpTable(VK_org))
F:flush()F:close()
if _ then TEXT.show(text.VKSaved,1140,650,26,"sudden",.5)
else TEXT.show(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
if _ then LOG.print(text.VKSaved,color.green)
else LOG.print(text.VKSavingError..(mes or"unknown error"),color.red)
end
end
return FILE

View File

@@ -32,7 +32,6 @@ xOy=love.math.newTransform()
joysticks={}
local devMode
debugMesHistory={}
local infoCanvas=gc.newCanvas(108,27)
local function updatePowerInfo()
@@ -191,13 +190,13 @@ function love.keypressed(i)
if devMode then
if i=="f5"then
DBP("DEBUG:")
elseif i=="f3"then
LOG.print("挂了.gif")
elseif i=="f8"then devMode=nil TEXT.show("DEBUG OFF",640,360,80,"fly",.8)
elseif i=="f9"then devMode=1 TEXT.show("DEBUG 1",640,360,80,"fly",.8)
elseif i=="f10"then devMode=2 TEXT.show("DEBUG 2",640,360,80,"fly",.8)
elseif i=="f11"then devMode=3 TEXT.show("DEBUG 3",640,360,80,"fly",8)
elseif i=="f12"then devMode=4 TEXT.show("DEBUG 4",640,360,80,"fly",12)
elseif i=="f3"then LOG.print("挂了.gif")
elseif i=="f4"then LOG.copy()
elseif i=="f8"then devMode=nil LOG.print("DEBUG OFF",color.yellow)
elseif i=="f9"then devMode=1 LOG.print("DEBUG 1",color.yellow)
elseif i=="f10"then devMode=2 LOG.print("DEBUG 2",color.yellow)
elseif i=="f11"then devMode=3 LOG.print("DEBUG 3",color.yellow)
elseif i=="f12"then devMode=4 LOG.print("DEBUG 4",color.yellow)
elseif devMode==2 then
if i=="k"then
for i=1,8 do
@@ -210,8 +209,6 @@ function love.keypressed(i)
elseif i=="q"then
local W=WIDGET.sel
if W then W:printInfo()end
elseif i=="f3"then
assert(false,"Techmino:挂了")
elseif i=="e"then
for k,v in next,_G do
DBP(k,v)
@@ -228,7 +225,10 @@ function love.keypressed(i)
elseif i=="'"then W.h=W.h+10
elseif i=="["then W.font=W.font-1
elseif i=="]"then W.font=W.font+1
else goto NORMAL
end
else
goto NORMAL
end
else
goto NORMAL
@@ -245,7 +245,7 @@ function love.keypressed(i)
end
else
devMode=1
TEXT.show("DEBUG ON",640,360,80,"fly",.8)
LOG.print("DEBUG ON",color.yellow)
end
end
function love.keyreleased(i)
@@ -260,7 +260,7 @@ function love.joystickremoved(JS)
for i=1,#joysticks do
if joysticks[i]==JS then
rem(joysticks,i)
LOG.print("Joystick removed")
LOG.print("Joystick removed",color.yellow)
return
end
end
@@ -518,8 +518,9 @@ function love.run()
gc.print("Voices:"..VOC.getCount(),5,_-80)
gc.print("Tasks:"..TASK.getCount(),5,_-100)
ins(frameTimeList,1,dt)rem(frameTimeList,126)
gc.setColor(1,1,1,.3)
for i=1,#frameTimeList do
gc.rectangle("fill",900+2*i,_,2,-frameTimeList[i]*4000)
gc.rectangle("fill",150+2*i,_,2,-frameTimeList[i]*4000)
end
if devMode==3 then WAIT(.1)
elseif devMode==4 then WAIT(.5)
@@ -537,7 +538,7 @@ function love.run()
lastFreshPow=Timer()
if gc.getWidth()~=scr.w then
love.resize(gc.getWidth(),gc.getHeight())
TEXT.show("resized",200,100,30,"stretch")
LOG.print("Resized",color.yellow)
end
end

View File

@@ -253,6 +253,8 @@ local langList={
copy="复制",
paste="粘贴",
clear="清除",
pushLine="增加一行(K)",
delLine="消除行(L)",
demo="不显示×",
custom="参数(E)",
back="返回",
@@ -373,6 +375,7 @@ local langList={
},--LangName added later
minigame={
p15="15 Puzzle",
schulte_G="舒尔特方格",
back="返回",
},
p15={
@@ -380,9 +383,17 @@ local langList={
color="颜色",
blind="盲打",
slide="滑动操作",
pathVis="路径显示",
revKB="键盘反向",
back="返回",
},
schulte_G={
reset="重来",
rank="尺寸",
blind="盲打",
disappear="消失",
back="返回",
},
help={
staff="制作人员",
his="更新历史",
@@ -736,8 +747,10 @@ local langList={
copy="复制",
paste="粘贴",
clear="清除",
pushLine="增加一行(K)",
delLine="消除行(L)",
demo="不显示×",
custom="参数",
custom="参数(E)",
back="返回",
},
play={
@@ -856,6 +869,7 @@ local langList={
},--LangName added later
minigame={
p15="15 Puzzle",
schulte_G="舒尔特方格",
back="返回",
},
p15={
@@ -863,9 +877,17 @@ local langList={
color="颜色",
blind="盲打",
slide="滑动操作",
pathVis="路径显示",
revKB="键盘反向",
back="返回",
},
schulte_G={
reset="重来",
rank="尺寸",
blind="盲打",
disappear="消失",
back="返回",
},
help={
staff="制作人员",
his="更新历史",
@@ -1209,6 +1231,8 @@ local langList={
copy="Copy",
paste="Paste",
clear="Clear",
pushLine="Add Line(K)",
delLine="Del Line(L)",
demo="Don't show ×",
custom="Args(E)",
back="Back",
@@ -1329,6 +1353,7 @@ local langList={
},--LangName added later
minigame={
p15="15 Puzzle",
schulte_G="Schulte Grid",
back="Back",
},
p15={
@@ -1336,9 +1361,17 @@ local langList={
color="Color",
blind="Blind",
slide="Slide",
pathVis="Path show",
revKB="Reverse",
back="Back",
},
schulte_G={
reset="Reset",
rank="Size",
blind="Blind",
disappear="Hide",
back="Back",
},
help={
staff="Staff",
his="History",
@@ -1680,6 +1713,8 @@ local langList={
copy="→__",
paste="__→",
clear="XXX",
pushLine="↑↑↑↑↑(K)",
delLine="==X==(L)",
demo="X ×",
custom="_?_(E)",
back="X",
@@ -1800,6 +1835,7 @@ local langList={
},--LangName added later
minigame={
p15="15 Puzzle",
schulte_G="Schulte Grid",
back="X",
},
p15={
@@ -1807,9 +1843,17 @@ local langList={
color="~~~",
blind="???",
slide="~_~",
pathVis="--==>",
revKB="Reverse",
back="X",
},
schulte_G={
reset="!@#$%",
rank="←?→",
blind="???",
disappear="=X=",
back="X",
},
help={
staff="Orz",
his="_&_",
@@ -2165,6 +2209,8 @@ local langList={
copy="复制",
paste="粘贴",
clear="清除",
pushLine="增加一行",
delLine="消除行",
demo="不显示×",
custom="参数(E)",
back="返回",
@@ -2285,6 +2331,7 @@ local langList={
},--LangName added later
minigame={
p15="15 Puzzle",
schulte_G="舒尔特方格",
back="返回",
},
p15={
@@ -2292,9 +2339,17 @@ local langList={
color="",
blind="",
slide="滑动",
pathVis="路径显示",
revKB="键盘反向",
back="返回",
},
schulte_G={
reset="重开",
rank="尺寸",
blind="",
disappear="消失",
back="返回",
},
help={
staff="制作人员",
his="更新历史",

View File

@@ -3,29 +3,32 @@ local int,min=math.floor,math.min
local ins,rem=table.insert,table.remove
local debugMesList={}
local debugMesHistory={
"Version: "..gameVersion,
os.date("Launched at %Y/%m/%d %H:%M"),
}
local debugMesFloat=0
local LOG={}
function LOG.print(text,clr)--use this for print for debug in-game
if not clr then clr=color.white end
ins(debugMesList,{text=text,r=clr[1],g=clr[2],b=clr[3],time=240})
ins(debugMesHistory,SCN.cur..": "..tostring(text))
end
function LOG.update()
if debugMesList[1]then
for i=#debugMesList,1,-1 do
local M=debugMesList[i]
M.time=M.time-1
if i==1 and M.time==0 then
rem(debugMesList,i)
if not debugMesList[1]then
debugMesFloat=0
else
debugMesFloat=debugMesFloat+25
if M.blink>0 then
M.blink=M.blink-1
else
M.time=M.time-1
if i==1 and M.time==0 then
rem(debugMesList,i)
if not debugMesList[1]then
debugMesFloat=0
else
debugMesFloat=debugMesFloat+25
end
end
end
if debugMesFloat>0 then
debugMesFloat=int(debugMesFloat*.9)
end
end
if debugMesFloat>0 then
debugMesFloat=int(debugMesFloat*.9)
end
end
end
@@ -35,9 +38,41 @@ function LOG.draw()
for i=1,#debugMesList do
local M=debugMesList[i]
local t=M.time
gc.setColor(M.r,M.g,M.b,t>200 and int(t/3)%2 or min(t/26,1))
gc.setColor(M.r,M.g,M.b,M.blink>0 and int(M.blink/3)%2 or min(t/26,1))
gc.print(M.text,10+(20-min(t,20))^1.5/4,25*i+debugMesFloat)
end
end
end
function LOG.print(text,T,C)--type/time,color
local time
local his
if type(T)=="table"then
C,T=T or color.white
elseif T=="warn"then
C=C or color.yellow
his=true
time=180
elseif T=="error"then
C=C or color.red
his=true
time=210
elseif T=="message"then
C=C or color.green
his=true
elseif T=="short"then
C=C or color.orange
time=30
elseif not C then
C=color.white
end
if his then
ins(debugMesHistory,SCN.cur..": "..tostring(text))
end
ins(debugMesList,{text=text,r=C[1],g=C[2],b=C[3],blink=30,time=time or 150})
end
function LOG.copy()
local str=table.concat(debugMesHistory,"\n")
love.system.setClipboardText(str)
LOG.print("Log copied",color.blue)
end
return LOG

View File

@@ -54,23 +54,23 @@ local swap={
fade={30,15,function(t)
local t=t>15 and 2-t/15 or t/15
gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,scr.W,scr.H)
gc.rectangle("fill",0,0,scr.w,scr.h)
end},
fade_togame={120,20,function(t)
local t=t>20 and(120-t)/100 or t/20
gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,scr.W,scr.H)
gc.rectangle("fill",0,0,scr.w,scr.h)
end},
slowFade={180,90,function(t)
local t=t>90 and 2-t/90 or t/90
gc.setColor(0,0,0,t)
gc.rectangle("fill",0,0,scr.W,scr.H)
gc.rectangle("fill",0,0,scr.w,scr.h)
end},
swipe={30,15,function(t)
t=t/30
gc.setColor(.1,.1,.1,1-abs(t-.5))
t=t*t*(3-2*t)*2-1
gc.rectangle("fill",t*scr.W,0,scr.W,scr.H)
gc.rectangle("fill",t*scr.w,0,scr.w,scr.h)
end},
}--Scene swapping animations
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back

View File

@@ -2,23 +2,42 @@ local gc=love.graphics
local int=math.floor
local format=string.format
local fontData=love.filesystem.newFile("font.ttf")
local newFont=gc.setNewFont
local setNewFont=gc.setFont
local fontCache,currentFontSize={}
function setFont(s)
local f=fontCache[s]
if s~=currentFontSize then
if f then
setNewFont(f)
else
f=newFont(fontData,s)
fontCache[s]=f
setNewFont(f)
do
local newFont=gc.setNewFont
local setNewFont=gc.setFont
local fontCache,currentFontSize={}
if love.filesystem.getInfo("font.ttf")then
local fontData=love.filesystem.newFile("font.ttf")
function setFont(s)
local f=fontCache[s]
if s~=currentFontSize then
if f then
setNewFont(f)
else
f=newFont(fontData,s)
fontCache[s]=f
setNewFont(f)
end
currentFontSize=s
end
return f
end
else
function setFont(s)
local f=fontCache[s]
if s~=currentFontSize then
if f then
setNewFont(f)
else
f=newFont(s)
fontCache[s]=f
setNewFont(f)
end
currentFontSize=s
end
return f
end
currentFontSize=s
end
return f
end
function toTime(s)

View File

@@ -142,9 +142,9 @@ local Widgets={
},
music={
newSlider({name="bgm", x=760, y=80, w=400, font=35,disp=SETval("bgm"),code=function(v)setting.bgm=v;BGM.freshVolume()end}),
newButton({name="up", x=1100, y=200, w=120, color="white", font=55,code=pressKey("up")}),
newButton({name="up", x=1100, y=200, w=120, color="white", font=55,code=pressKey("up"),hide=function()return sceneTemp==1 end}),
newButton({name="play", x=1100, y=340, w=120, color="white", font=35,code=pressKey("space"),hide=function()return setting.bgm==0 end}),
newButton({name="down", x=1100, y=480, w=120, color="white", font=55,code=pressKey("down")}),
newButton({name="down", x=1100, y=480, w=120, color="white", font=55,code=pressKey("down"),hide=function()return sceneTemp==BGM.len end}),
newButton({name="back", x=1140, y=640, w=180,h=80, color="white", font=35,code=BACK}),
},
custom={
@@ -221,10 +221,12 @@ local Widgets={
newButton({name="any", x=600, y=360, w=120, color="lGrey", font=40,code=setPen(0)}),
newButton({name="space", x=730, y=360, w=120, color="grey", font=65,code=setPen(-1)}),
newButton({name="copy", x=920, y=500, w=120, color="lRed", font=35,code=pressKey("cC")}),
newButton({name="paste", x=1060, y=500, w=120, color="lBlue", font=35,code=pressKey("cV")}),
newButton({name="clear", x=1200, y=500, w=120, color="white", font=40,code=pressKey("delete")}),
newSwitch({name="demo", x=755, y=640, font=30,disp=function()return sceneTemp.demo end,code=function()sceneTemp.demo=not sceneTemp.demo end}),
newButton({name="copy", x=920, y=360, w=120, color="lRed", font=35,code=pressKey("cC")}),
newButton({name="paste", x=1060, y=360, w=120, color="lBlue", font=35,code=pressKey("cV")}),
newButton({name="clear", x=1200, y=360, w=120, color="white", font=40,code=pressKey("delete")}),
newButton({name="pushLine", x=1060, y=500, w=120, color="lYellow",font=20,code=pressKey("k")}),
newButton({name="delLine", x=1200, y=500, w=120, color="lYellow",font=20,code=pressKey("l")}),
newSwitch({name="demo", x=755, y=640, font=30,disp=function()return sceneTemp.demo end,code=function()sceneTemp.demo=not sceneTemp.demo end}),
newButton({name="custom", x=110, y=80, w=140,h=80, color="white", font=35,code=pressKey("e")}),
newButton({name="back", x=1140, y=640, w=180,h=80, color="white", font=35,code=BACK}),
},
@@ -421,16 +423,16 @@ local Widgets={
newSwitch({name="b8", x=280, y=500, font=35,disp=VKAdisp(8),code=VKAcode(8)}),
newSwitch({name="b9", x=280, y=560, font=35,disp=VKAdisp(9),code=VKAcode(9)}),
newSwitch({name="b10", x=280, y=620, font=35,disp=VKAdisp(10),code=VKAcode(10)}),
newSwitch({name="b11", x=620, y=80, font=35,disp=VKAdisp(11),code=VKAcode(11)}),
newSwitch({name="b12", x=620, y=140, font=35,disp=VKAdisp(12),code=VKAcode(12)}),
newSwitch({name="b13", x=620, y=200, font=35,disp=VKAdisp(13),code=VKAcode(13)}),
newSwitch({name="b14", x=620, y=260, font=35,disp=VKAdisp(14),code=VKAcode(14)}),
newSwitch({name="b15", x=620, y=320, font=35,disp=VKAdisp(15),code=VKAcode(15)}),
newSwitch({name="b16", x=620, y=380, font=35,disp=VKAdisp(16),code=VKAcode(16)}),
newSwitch({name="b17", x=620, y=440, font=35,disp=VKAdisp(17),code=VKAcode(17)}),
newSwitch({name="b18", x=620, y=500, font=35,disp=VKAdisp(18),code=VKAcode(18)}),
newSwitch({name="b19", x=620, y=560, font=35,disp=VKAdisp(19),code=VKAcode(19)}),
newSwitch({name="b20", x=620, y=620, font=35,disp=VKAdisp(20),code=VKAcode(20)}),
newSwitch({name="b11", x=580, y=80, font=35,disp=VKAdisp(11),code=VKAcode(11)}),
newSwitch({name="b12", x=580, y=140, font=35,disp=VKAdisp(12),code=VKAcode(12)}),
newSwitch({name="b13", x=580, y=200, font=35,disp=VKAdisp(13),code=VKAcode(13)}),
newSwitch({name="b14", x=580, y=260, font=35,disp=VKAdisp(14),code=VKAcode(14)}),
newSwitch({name="b15", x=580, y=320, font=35,disp=VKAdisp(15),code=VKAcode(15)}),
newSwitch({name="b16", x=580, y=380, font=35,disp=VKAdisp(16),code=VKAcode(16)}),
newSwitch({name="b17", x=580, y=440, font=35,disp=VKAdisp(17),code=VKAcode(17)}),
newSwitch({name="b18", x=580, y=500, font=35,disp=VKAdisp(18),code=VKAcode(18)}),
newSwitch({name="b19", x=580, y=560, font=35,disp=VKAdisp(19),code=VKAcode(19)}),
newSwitch({name="b20", x=580, y=620, font=35,disp=VKAdisp(20),code=VKAcode(20)}),
newButton({name="norm", x=840, y=100, w=240,h=80,color="white",font=35,code=function()for i=1,20 do VK_org[i].ava=i<11 end end}),
newButton({name="pro", x=1120, y=100, w=240,h=80,color="white",font=35,code=function()for i=1,20 do VK_org[i].ava=true end end}),
newSwitch({name="hide", x=1170, y=200, font=40,disp=SETval("VKSwitch"),code=SETrev("VKSwitch")}),
@@ -464,14 +466,23 @@ local Widgets={
},
minigame={
newButton({name="p15", x=640, y=100,w=350,h=120,color="white",font=40,code=goScene("p15")}),
newButton({name="schulte_G",x=640, y=250,w=350,h=120,color="white",font=40,code=goScene("schulte_G")}),
newButton({name="back", x=1140, y=640,w=180,h=80,color="white", font=35,code=BACK}),
},
p15={
newButton({name="reset", x=160,y=100,w=180,h=100,color="lGreen", font=40,code=pressKey("space")}),
newSlider({name="color", x=110,y=250,w=170,unit=4,show=false, font=30,disp=function()return sceneTemp.color end,code=function(v)sceneTemp.color=v end,hide=function()return sceneTemp.state<2 end}),
newSwitch({name="blind", x=200,y=350,w=60, font=40,disp=function()return sceneTemp.blind end,code=pressKey("b"),hide=function()return sceneTemp.state>0 end}),
newSwitch({name="slide", x=200,y=450,w=60, font=40,disp=function()return sceneTemp.slide end,code=pressKey("s"),hide=function()return sceneTemp.state>0 end}),
newSwitch({name="revKB", x=200,y=550,w=60, font=40,disp=function()return sceneTemp.revKB end,code=pressKey("r"),hide=function()return sceneTemp.state>0 end}),
newSlider({name="color", x=110,y=250,w=170,unit=4,show=false, font=30,disp=function()return sceneTemp.color end,code=function(v)if sceneTemp.state==0 then sceneTemp.color=v end end,hide=function()return sceneTemp.state==1 end}),
newSwitch({name="blind", x=240,y=330,w=60, font=40,disp=function()return sceneTemp.blind end,code=pressKey("b"),hide=function()return sceneTemp.state==1 end}),
newSwitch({name="slide", x=240,y=420,w=60, font=40,disp=function()return sceneTemp.slide end,code=pressKey("s"),hide=function()return sceneTemp.state==1 end}),
newSwitch({name="pathVis", x=240,y=510,w=60, font=40,disp=function()return sceneTemp.pathVis end,code=pressKey("p"),hide=function()return sceneTemp.state==1 or not sceneTemp.slide end}),
newSwitch({name="revKB", x=240,y=600,w=60, font=40,disp=function()return sceneTemp.revKB end,code=pressKey("r"),hide=function()return sceneTemp.state==1 end}),
newButton({name="back", x=1140,y=640,w=180,h=80,color="white", font=35,code=BACK}),
},
schulte_G={
newButton({name="reset", x=160,y=100,w=180,h=100,color="lGreen", font=40,code=pressKey("r"),hide=function()return sceneTemp.state==0 end}),
newSlider({name="rank", x=130,y=250,w=150,unit=3,show=false, font=40,disp=function()return sceneTemp.rank-3 end,code=function(v)sceneTemp.rank=v+3 end,hide=function()return sceneTemp.state>0 end}),
newSwitch({name="blind", x=160,y=330,w=60, font=40,disp=function()return sceneTemp.blind end,code=pressKey("b"),hide=function()return sceneTemp.state==1 end}),
newSwitch({name="disappear",x=160,y=410,w=60, font=40,disp=function()return sceneTemp.disappear end,code=pressKey("d"),hide=function()return sceneTemp.state==1 end}),
newButton({name="back", x=1140,y=640,w=180,h=80,color="white", font=35,code=BACK}),
},
help={

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.10.8"
gameVersion="Alpha V0.10.9"
function love.conf(t)
t.identity="Techmino"--Saving folder
t.version="11.1"

View File

@@ -33,7 +33,13 @@ mapCam={
zoomMethod=nil,
zoomK=nil,
}
scr={x=0,y=0,w=0,h=0,W=0,H=0,rad=0,k=1}--wid,hei,radius,scale K
scr={
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
}--1280:720-Rect Screen Info
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end

View File

@@ -34,7 +34,7 @@ return{
end
end
end,
bg="rainbow2",bgm="way",
bg="rainbow2",bgm="shining terminal",
},
pauseLimit=true,
load=function()
@@ -42,10 +42,10 @@ return{
end,
mesDisp=function(P,dx,dy)
setFont(55)
mStr(P.modeData.event,69,340)
mStr("24",69,390)
mText(drawableText.wave,69,400)
mText(drawableText.nextWave,69,520)
mStr(P.modeData.event,69,270)
mStr("22",69,390)
mText(drawableText.wave,69,330)
mText(drawableText.nextWave,69,450)
end,
score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,

View File

@@ -37,7 +37,7 @@ return{
end
end
end,
bg="rainbow2",bgm="shining terminal",
bg="rainbow2",bgm="down",
},
pauseLimit=true,
load=function()

View File

@@ -15,7 +15,7 @@ return{
D.event=D.event+1
end
end,
bg="bg2",bgm="shining terminal",
bg="bg2",bgm="down",
},
pauseLimit=true,
load=function()

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",3))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,
@@ -18,10 +18,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
T<=100 and 5 or
T<=125 and 4 or
T<=175 and 3 or
T<=300 and 2 or
1
end
end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",4))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,
@@ -18,10 +18,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=20 and 5 or
T<=25 and 4 or
T<=40 and 3 or
T<=62 and 2 or
T<=100 and 5 or
T<=125 and 4 or
T<=200 and 3 or
T<=300 and 2 or
1
end
end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",7))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,
@@ -18,10 +18,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
T<=100 and 5 or
T<=125 and 4 or
T<=175 and 3 or
T<=300 and 2 or
1
end
end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",7,2,true,26000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,
@@ -18,10 +18,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
T<=100 and 5 or
T<=125 and 4 or
T<=175 and 3 or
T<=300 and 2 or
1
end
end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",8,3,true,40000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,
@@ -18,10 +18,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
T<=100 and 5 or
T<=125 and 4 or
T<=175 and 3 or
T<=300 and 2 or
1
end
end,

View File

@@ -15,7 +15,7 @@ return{
freshLimit=15,
target=200,
dropPiece=tech_check_hard,
bg="matrix",bgm="newera",
bg="matrix",bgm="push",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -15,7 +15,7 @@ return{
freshLimit=15,
target=200,
dropPiece=tech_check_easy,
bg="matrix",bgm="newera",
bg="matrix",bgm="push",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -15,7 +15,7 @@ return{
freshLimit=15,
target=200,
dropPiece=tech_check_hard,
bg="matrix",bgm="push",
bg="matrix",bgm="down",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -15,7 +15,7 @@ return{
freshLimit=15,
target=200,
dropPiece=tech_check_easy,
bg="matrix",bgm="push",
bg="matrix",bgm="down",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -15,7 +15,7 @@ return{
drop=1e99,lock=1e99,
target=200,
dropPiece=tech_check_hard,
bg="matrix",bgm="way",
bg="matrix",bgm="newera",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -15,7 +15,7 @@ return{
drop=1e99,lock=1e99,
target=200,
dropPiece=tech_check_easy,
bg="matrix",bgm="way",
bg="matrix",bgm="newera",
},
load=function()
PLY.newPlayer(1,340,15)

View File

@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,12000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,12000))
end
n=n+1
end end

View File

@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(9,10),4,true,30000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10),3,true,30000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(9,10),4,true,30000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10),3,true,30000))
end
n=n+1
end end

View File

@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,12000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,12000))
end
n=n+1
end end

View File

@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(9,10),4,true,30000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10),3,true,30000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(9,10),4,true,30000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10),3,true,30000))
end
n=n+1
end end

View File

@@ -1,5 +1,4 @@
local int=math.floor
local AISpeed={60,50,45,35,25,15,9,6,4,3}
local AISpeed={60,45,30,24,18,12,8,5,4,3}
return function(type,speedLV,next,hold,node)
if type=="CC"then
return{
@@ -12,7 +11,7 @@ return function(type,speedLV,next,hold,node)
elseif type=="9S"then
return{
type="9S",
delta=int(AISpeed[speedLV]*.5),
delta=math.floor(AISpeed[speedLV]*.5),
}
end
end

View File

@@ -39,10 +39,10 @@ local function loadCC()
end
if not f then
CCloader_filename[system]=nil
LOG.print("failed to load CC")
LOG.print("failed to load CC","warn",color.red)
return
end
LOG.print("CC load successfully")
LOG.print("CC load successfully","warn",color.green)
f()
BOT={
getConf= cc.get_default_config ,--()options,weights

View File

@@ -310,6 +310,7 @@ function resetGameData()
game.seed=rnd(261046101471026)
destroyPlayers()
restoreVirtualKey()
modeEnv=curMode.env
curMode.load()--BG/BGM need redefine in custom,so up here
if modeEnv.task then
@@ -328,7 +329,6 @@ function resetGameData()
game.stage=1
game.garbageSpeed=.3
end
restoreVirtualKey()
stat.game=stat.game+1
freeRow.reset(30*#players)
SFX.play("ready")
@@ -360,6 +360,7 @@ function resetPartGameData(replaying)
end
destroyPlayers()
restoreVirtualKey()
modeEnv=curMode.env
curMode.load()
if modeEnv.task then
@@ -378,7 +379,6 @@ function resetPartGameData(replaying)
game.stage=1
game.garbageSpeed=.3
end
restoreVirtualKey()
collectgarbage()
end
function gameStart()

View File

@@ -224,7 +224,7 @@ drawableText={
preview=T(40),
keyboard=T(25),joystick=T(25),
ctrlSetHelp=T(30),
musicRoom=T(80),nowPlaying=T(50),
musicRoom=T(80),nowPlaying=T(60),
VKTchW=T(30),VKOrgW=T(30),VKCurW=T(30),
noScore=T(45),highScore=T(30),
}

File diff suppressed because it is too large Load Diff

View File

@@ -92,7 +92,7 @@ do--calculator
elseif S.val==196000+022 then
S.pass=true
marking=nil
TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6)
LOG.print("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100","warn",color.lBlue)
SFX.play("clear")
elseif S.val==72943816 then
S.pass=true
@@ -102,7 +102,7 @@ do--calculator
end
end
FILE.saveUnlock()
TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
LOG.print("\68\69\86\58\85\78\76\79\67\75\65\76\76","warn",color.lBlue)
SFX.play("clear_2")
elseif S.val==1379e8+2626e4+1379 then
S.pass=true
@@ -131,6 +131,7 @@ do--calculator
function Pnt.calculator()
local S=sceneTemp
gc.setColor(1,1,1)
gc.setLineWidth(4)
gc.rectangle("line",100,80,650,150)
setFont(45)
@@ -142,9 +143,9 @@ do--calculator
end
end
do--minigame
function sceneInit.p15()
function sceneInit.minigame()
BG.set("space")
BGM.play()
BGM.stop()
end
end
do--p15
@@ -162,6 +163,7 @@ do--p15
color=2,
blind=false,
slide=true,
pathVis=true,
revKB=false,
}
end
@@ -212,7 +214,9 @@ do--p15
local S=sceneTemp
if S.state<2 then
if not key then
sysFX.newRipple(.16,x,y,10)
if S.pathVis then
sysFX.newRipple(.16,x,y,10)
end
x,y=int((x-320)/160)+1,int((y-40)/160)+1
end
local b=S.board
@@ -252,14 +256,14 @@ do--p15
if checkBoard(b)then
S.state=2
S.time=Timer()-S.startTime
if S.time<1 then LOG.print("不是人")
elseif S.time<2 then LOG.print("还是人")
elseif S.time<3 then LOG.print("神仙")
elseif S.time<5 then LOG.print("太强了")
elseif S.time<7.5 then LOG.print("很强")
elseif S.time<10 then LOG.print("可以的")
elseif S.time<20 then LOG.print("再接再厉")
elseif S.time<30 then LOG.print("多加练习")
if S.time<1 then LOG.print("不是人",color.lBlue)
elseif S.time<2 then LOG.print("还是人",color.lBlue)
elseif S.time<3 then LOG.print("神仙",color.lBlue)
elseif S.time<5 then LOG.print("太强了",color.lBlue)
elseif S.time<7.5 then LOG.print("很强",color.lBlue)
elseif S.time<10 then LOG.print("可以的",color.lBlue)
elseif S.time<20 then LOG.print("再接再厉",color.lBlue)
elseif S.time<30 then LOG.print("多加练习",color.lBlue)
end
SFX.play("win")
end
@@ -293,6 +297,13 @@ do--p15
elseif k=="s"then
if S.state==0 then
S.slide=not S.slide
if not S.slide then
S.pathVis=false
end
end
elseif k=="p"then
if S.state==0 and S.slide then
S.pathVis=not S.pathVis
end
elseif k=="b"then
if S.state==0 then
@@ -398,20 +409,20 @@ do--p15
gc.print(format("%.3f",S.time),1026,80)
gc.print(S.move,1026,150)
if S.state==1 then gc.setColor(.9,.9,.9) --game
if S.state==2 then gc.setColor(.9,.9,0) --win
elseif S.state==1 then gc.setColor(.9,.9,.9)--game
elseif S.state==0 then gc.setColor(.2,.8,.2)--ready
elseif S.state==2 then gc.setColor(.9,.9,0) --win
end
gc.setLineWidth(10)
gc.rectangle("line",313,33,654,654,18)
gc.setLineWidth(4)
local x,y=S.x,S.y
local blind=S.blind and S.state==1
setFont(80)
for i=1,4 do
for j=1,4 do
if x~=j or y~=i then
local blind=S.blind and S.state==1
local N=S.board[i][j]
local C=blind and 1 or S.color
@@ -437,6 +448,148 @@ do--p15
gc.rectangle("line",x*160+173,y*160-107,134,134,50)
end
end
do--schulte_G
function sceneInit.schulte_G()
BGM.play("way")
sceneTemp={
board={},
rank=3,
blind=false,
disappear=false,
startTime=0,
time=0,
error=0,
state=0,
target=0,
}
end
local function newBoard()
local S=sceneTemp
local L={}
for i=1,S.rank^2 do
L[i]=i
end
for i=1,S.rank^2 do
S.board[i]=rem(L,rnd(#L))
end
end
local function tapBoard(x,y)
local S=sceneTemp
if x>320 and x<960 and y>40 and y<680 then
if S.state==0 then
newBoard()
S.state=1
S.startTime=Timer()
S.target=1
elseif S.state==1 then
x=S.rank*(int((y-40)/640*S.rank))+int((x-320)/640*S.rank)+1
if S.board[x]==S.target then
S.target=S.target+1
if S.target<=S.rank^2 then
SFX.play("lock")
else
S.time=Timer()-S.startTime+S.error
S.state=2
SFX.play("reach")
end
else
SFX.play("finesseError")
S.error=S.error+1
end
end
end
end
function mouseDown.schulte_G(x,y,k)
tapBoard(x,y)
end
function touchDown.schulte_G(id,x,y)
tapBoard(x,y)
end
function keyDown.schulte_G(key)
local S=sceneTemp
if key=="space"or key=="r"then
if sceneTemp.state>0 then
S.board={}
S.time=0
S.error=0
S.state=0
S.target=0
end
elseif key=="z"or key=="x"then
tapBoard(ms.getPosition())
elseif key=="b"then
if S.state==0 then
S.blind=not S.blind
end
elseif key=="d"then
if S.state==0 then
S.disappear=not S.disappear
end
elseif key=="3"or key=="4"or key=="5"or key=="6"then
if S.state==0 then
S.rank=tonumber(key)
end
elseif key=="escape"then
SCN.back()
end
end
function Tmr.schulte_G()
local S=sceneTemp
if S.state==1 then
S.time=Timer()-S.startTime+S.error
end
end
local fontSize={nil,nil,120,100,80,60}
function Pnt.schulte_G()
local S=sceneTemp
setFont(40)
gc.setColor(1,1,1)
gc.print(format("%.3f",S.time),1026,80)
gc.print(S.error,1026,150)
setFont(70)
mStr(S.state==1 and S.target or S.state==0 and"Ready"or S.state==2 and"Win",1130,300)
if S.state==1 then gc.setColor(.9,.9,.9) --game
elseif S.state==0 then gc.setColor(.2,.8,.2)--ready
elseif S.state==2 then gc.setColor(.9,.9,0) --win
end
gc.setLineWidth(10)
gc.rectangle("line",310,30,660,660)
local rank=S.rank
local width=640/rank
local blind=S.state==0 or S.blind and(S.state==2 or S.target>1)
gc.setLineWidth(4)
local f=fontSize[rank]
setFont(f)
for i=1,rank do
for j=1,rank do
local N=S.board[rank*(i-1)+j]
if not(S.state==1 and S.disappear and N<S.target)then
gc.setColor(.6,.4,.4)
gc.rectangle("fill",320+(j-1)*width,(i-1)*width+40,width,width)
gc.setColor(1,1,1)
gc.rectangle("line",320+(j-1)*width,(i-1)*width+40,width,width)
if not blind then
local x,y=320+(j-.5)*width,40+(i-.5)*width-f*.67
gc.setColor(.1,.1,.1)
mStr(N,x-3,y-1)
mStr(N,x-1,y-3)
gc.setColor(1,1,1)
mStr(N,x,y)
end
end
end
end
end
end
do--load
function sceneInit.load()
sceneTemp={
@@ -574,7 +727,7 @@ do--intro
elseif newVersionLaunch then
SCN.push("main","fade")
SCN.swapTo("history","fade")
TEXT.show(text.newVersion,640,200,30,"fly",.3)
LOG.print(text.newVersion,"warn",color.lBlue)
else
SCN.go("main")
end
@@ -784,10 +937,10 @@ do--mode
if mapCam.sel=="custom_clear"or mapCam.sel=="custom_puzzle"then
if customSel[11]>1 then
if customSel[7]==5 then
TEXT.show(text.ai_fixed,640,360,50,"appear")
LOG.print(text.ai_fixed,"warn",color.red)
return
elseif #preBag>0 then
TEXT.show(text.ai_prebag,640,360,50,"appear")
LOG.print(text.ai_prebag,"warn",color.red)
return
end
end
@@ -1038,9 +1191,9 @@ do--music
end
function keyDown.music(key)
if key=="down"then
sceneTemp=sceneTemp%BGM.len+1
sceneTemp=min(sceneTemp+1,BGM.len)
elseif key=="up"then
sceneTemp=(sceneTemp-2)%BGM.len+1
sceneTemp=max(sceneTemp-1,1)
elseif key=="return"or key=="space"then
if BGM.nowPlay~=BGM.list[sceneTemp]then
SFX.play("click")
@@ -1054,24 +1207,32 @@ do--music
end
function Pnt.music()
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
gc.rectangle("fill",45,98+30*sceneTemp,250,30)
gc.setColor(.7,.7,.7)gc.draw(drawableText.musicRoom,20,20)
gc.setColor(1,1,1)gc.draw(drawableText.musicRoom,22,23)
gc.draw(drawableText.nowPlaying,490,390)
gc.setColor(.7,.7,.7)
gc.draw(drawableText.musicRoom,20,20)
gc.setColor(1,1,1)
gc.draw(drawableText.musicRoom,22,23)
setFont(55)
gc.printf(BGM.list[sceneTemp],500,300,500,"right")
setFont(30)
for i=1,BGM.len do
gc.print(BGM.list[i],50,90+30*i)
if sceneTemp>1 then
gc.printf(BGM.list[sceneTemp-1],500,270,500,"right")
end
gc.draw(IMG.title,640,310,nil,1.5,nil,206,35)
if sceneTemp<BGM.len then
gc.printf(BGM.list[sceneTemp+1],500,370,500,"right")
end
gc.draw(IMG.title,500,610,nil,1.5,nil,206,35)
if BGM.nowPlay then
setFont(45)
gc.draw(drawableText.nowPlaying,490-drawableText.nowPlaying:getWidth(),450)
setFont(60)
gc.setColor(sin(Timer()*.5)*.2+.8,sin(Timer()*.7)*.2+.8,sin(Timer())*.2+.8)
mStr(BGM.nowPlay,630,460)
gc.print(BGM.nowPlay,500,450)
local t=-Timer()%2.3/2
if t<1 then
gc.setColor(1,1,1,t)
gc.draw(IMG.title_color,640,310,nil,1.5+.1-.1*t,1.5+.3-.3*t,206,35)
gc.draw(IMG.title_color,500,610,nil,1.5+.1-.1*t,1.5+.3-.3*t,206,35)
end
end
end
@@ -1171,14 +1332,14 @@ do--sequence
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
if #preBag>0 then
sys.setClipboardText("Techmino SEQ:"..copySequence())
TEXT.show(text.copySuccess,640,225,50,"appear",.5)
LOG.print(text.copySuccess,color.green)
end
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
local str=sys.getClipboardText()
local p=string.find(str,":")--ptr*
if p then str=string.sub(str,p+1)end
if not pasteSequence(str)then
TEXT.show(text.dataCorrupted,640,225,45,"flicker",.5)
LOG.print(text.dataCorrupted,color.red)
end
elseif #key==1 then
local i=(kb.isDown("lshift","lalt","rshift","ralt")and minoKey2 or minoKey)[key]
@@ -1339,15 +1500,37 @@ do--draw
SCN.swapTo("custom","swipe")
elseif key=="escape"then
SCN.back()
elseif key=="k"then
ins(preField,1,{14,14,14,14,14,14,14,14,14,14})
preField[21]=nil
SFX.play("blip")
elseif key=="l"then
local F=preField
for i=20,1,-1 do
for j=1,10 do
if F[i][j]<=0 then goto L end
end
sysFX.newShade(.3,1,1,1,200,660-30*i,300,30)
sysFX.newRectRipple(.3,200,660-30*i,300,30)
rem(F,i)
::L::
end
if #F~=20 then
repeat
F[#F+1]={0,0,0,0,0,0,0,0,0,0}
until#F==20
SFX.play("clear_4",.8)
SFX.play("fall",.8)
end
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
sys.setClipboardText("Techmino Field:"..copyBoard())
TEXT.show(text.copySuccess,350,360,40,"appear",.5)
LOG.print(text.copySuccess,color.green)
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
local str=sys.getClipboardText()
local p=string.find(str,":")--ptr*
if p then str=string.sub(str,p+1)end
if not pasteBoard(str)then
TEXT.show(text.dataCorrupted,350,360,35,"flicker",.5)
LOG.print(text.dataCorrupted,color.red)
end
else
pen=penKey[key]or pen
@@ -1401,7 +1584,7 @@ do--draw
--Confirm reset
if sceneTemp.sure>0 then
gc.setColor(1,1,1,sceneTemp.sure*.02)
gc.draw(drawableText.question,1040,430)
gc.draw(drawableText.question,1180,290)
end
--Block name
@@ -1751,7 +1934,7 @@ do--play
gc.origin()
if restartCount>0 then
gc.setColor(0,0,0,restartCount*.05)
gc.rectangle("fill",0,0,scr.W,scr.H)
gc.rectangle("fill",0,0,scr.w,scr.h)
end
if game.warnLVL>0 then
gc.setColor(0,0,0,0)
@@ -1886,7 +2069,7 @@ do--pause
gc.setColor(.15,.15,.15,_)
gc.push("transform")
gc.origin()
gc.rectangle("fill",0,0,scr.W,scr.H)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.pop()
--Pause Info

View File

@@ -19,7 +19,7 @@ local S=[=[
吃水榴莲 诗情画意 星姐阿夸双推Man暗炎 [*炎]
[*Y] aaa222 [**城] cnDD 红桃老给
昭庭玲秋 旋树墩 火花工作室 Cosine 沁音的芝麻王
SuperJH 天上_飞 *莲 uiro 宇酱
SuperJH 天上_飞 uiro 宇酱
Thanks!!!
@@ -52,6 +52,11 @@ Future outlook:
2048 (with next/deadly mode)
mine sweeper
tank battle
find difference
soduku
link-link
画图智能画笔
超高时场地上移
改连击攻击
场地序列一起复制
自定义消行要求(可复制)
@@ -67,6 +72,31 @@ Future outlook:
task-Z(新AI)
更多画面效果 & 一些3D小玩意
0.10.9: 舒尔特方格 Schulte Grid
新内容:
舒尔特方格
15p可关闭滑动轨迹显示
隐型模式回放时方块不会完全隐藏
画图界面新增顶起一行和消除满行功能
把音乐室装修得更好看了
新BGM: Down
修改BGM: Rockblock
改动:
优化15p开关排版和机制
不允许使用瞬移操作的模式虚拟按键也不显示
单挑评分标准适配三条命
调整ai难度
部分弹出消息改用LOG.print输出到屏幕左上角
缺失字体文件时使用引擎自带字体
代码:
整理player.lua文件
整理scr变量相关代码
所有音乐重新转码,BGM文件夹不再追踪
LOG.print新增"short"输出方式,仅显示一个时长很短的不重要提示信息
修复:
CC死后不能正常复活
部分背景不能正确显示
0.10.8: 全局更新 Global Update
新内容:
单挑模式玩家和电脑各三条生命,剩余生命数显示在场地右下角