0.10.0:回放更新

This commit is contained in:
MrZ_26
2020-08-03 16:45:08 +08:00
parent 25fe724bf8
commit 5d74d980e9
6 changed files with 736 additions and 692 deletions

View File

@@ -2,6 +2,7 @@ local langList={
{ {
anykey="按任意键继续", anykey="按任意键继续",
newVersion="检测到更新!", newVersion="检测到更新!",
newBigVersion="检测到大更新!大量存档信息被改动",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效", marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
lang="中文", lang="中文",
atkModeName={"随机","徽章","击杀","反击"}, atkModeName={"随机","徽章","击杀","反击"},
@@ -464,6 +465,7 @@ local langList={
{ {
anykey="按任意键继续", anykey="按任意键继续",
newVersion="检测到更新!", newVersion="检测到更新!",
newBigVersion="检测到大更新!大量存档信息被改动",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效", marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
lang="全中文", lang="全中文",
atkModeName={"随机","徽章","击杀","反击"}, atkModeName={"随机","徽章","击杀","反击"},
@@ -923,6 +925,7 @@ local langList={
{ {
anykey="Press any button", anykey="Press any button",
newVersion="Updating detected!", newVersion="Updating detected!",
newBigVersion="Big updating detected! Save data altered",
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid", marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
lang="English", lang="English",
atkModeName={"Random","Badges","K.O.s","Attackers"}, atkModeName={"Random","Badges","K.O.s","Attackers"},
@@ -1371,6 +1374,7 @@ local langList={
{ {
anykey="↓□↓", anykey="↓□↓",
newVersion="&!!!", newVersion="&!!!",
newBigVersion="&!!!~~~",
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid", marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
lang="?????", lang="?????",
atkModeName={"?","( )","!","←→"}, atkModeName={"?","( )","!","←→"},

View File

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

View File

@@ -11,16 +11,15 @@ spin判定:
攻击系统: 攻击系统:
普通消除: 普通消除:
消1/2/3/4攻击0.25/1.25/2.25/4 消1/2/3/4攻击0.5/1.5/2.5/4
特殊消除: 特殊消除:
spin1/2/3攻击2/4/6,若mini则减半 spin1/2/3攻击2/4/6,若mini则减至一
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击 B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡 B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
堆楼连击:0,0,1,1,2,2,2,3,3,3,4,4,3, 之后都是2 连击:给予上述攻击[连击数*20%]的加成,上限200%,连消3次之后额外加1攻击
挖掘连击:0,0,1,1,2,2,3,3,4,4,4, 之后都是5
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文) 特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2 半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2
全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满) 全消:将上述伤害之和减半,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
根据上述规则计算后,向下取整,攻击打出 根据上述规则计算后,向下取整,攻击打出
分数系统: 分数系统:
@@ -37,7 +36,7 @@ spin判定:
back to back(B2B)点数说明: back to back(B2B)点数说明:
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
普通消除-250 普通消除-250
spin1/2/3:+50/100/180(mini变为原来40%) spin1/2/3:+50/100/180(mini变为原来25%)
消四:+100 消四:+100
空spin:+20,此法得到的点数不能超过1000 空spin:+20,此法得到的点数不能超过1000
当点数在1000以上时空放一块-40(不减到低于1000) 当点数在1000以上时空放一块-40(不减到低于1000)
@@ -67,16 +66,15 @@ Spin detection:
Attack system: Attack system:
Regular line clears: Regular line clears:
Single/Double/Triple/Techrash sends 0.25/1.25/2.25/4 Single/Double/Triple/Techrash sends 0.5/1.5/2.5/4
Special line clears: Special line clears:
Spin Single/Double/Triple sends 2/4/6, half if Mini Spin Single/Double/Triple sends 2/4/6, half if Mini
B2B: +1 (Techrash/Spin Single/Spin Double) or +2 (Spin Triple) B2B: +1 (Techrash/Spin Single/Spin Double) or +2 (Spin Triple)
B2B2B/B3B: In addition to B2B, +1 if Techrash, +(0.5 * lines cleared) if Spin, and in both cases +1 additional blocking B2B2B/B3B: In addition to B2B, +1 if Techrash, +(0.5 * lines cleared) if Spin, and in both cases +1 additional blocking
Wide Combo: 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 3, then 2 afterwards Combo: each combo gives 20% more attack (capped at 200%), extra 1 attack after 3 combo
Dig Combo: 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, then 5 afterwards
Special line clears will increase B2B gauge, making later special line clears have B2B or B2B2B bonus (see below) Special line clears will increase B2B gauge, making later special line clears have B2B or B2B2B bonus (see below)
Half Perfect Clear (a Perfect Clear "with blocks left below". If it's an I clearing 1 line, then the remaining blocks must not be player-placed): Attack +2, Extra Blocking +2 Half Perfect Clear (a Perfect Clear "with blocks left below". If it's an I clearing 1 line, then the remaining blocks must not be player-placed): Attack +2, Extra Blocking +2
Perfect Clear: square root all damage above, then +6 to +12 attack (increases within a round) and +2 extra blocking. (note: if lines cleared in this round >4, then B2B gauge will be filled) Perfect Clear: half all damage above, then +6 to +12 attack (increases within a round) and +2 extra blocking. (note: if lines cleared in this round >4, then B2B gauge will be filled)
After calculating all above, the damage value will be rounded down then sent After calculating all above, the damage value will be rounded down then sent
Score system: Score system:
@@ -93,7 +91,7 @@ Countering:
Back to Back (B2B) gauge: Back to Back (B2B) gauge:
The B2B gauge ranges from 0 to 1,200. Special line clears are B2B if the gauge is >=40, B2B2B if >1,000. The B2B gauge ranges from 0 to 1,200. Special line clears are B2B if the gauge is >=40, B2B2B if >1,000.
A regular line clear -250 A regular line clear -250
Spin Single/Double/Triple +50/100/180 (x40% if Mini) Spin Single/Double/Triple +50/100/180 (x25% if Mini)
Techrash +100 Techrash +100
Spin without clearing lines +20, but gauge cannot exceed 1,000 with this method Spin without clearing lines +20, but gauge cannot exceed 1,000 with this method
When gauge is above 1,000, a drop without clearing lines -40 (cannot drop below 1,000 with this method) When gauge is above 1,000, a drop without clearing lines -40 (cannot drop below 1,000 with this method)

View File

@@ -6,7 +6,7 @@
/_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/ /_/ \___/ \___//_/ /_//_/ /_/ /_//_//_/ /_/ \____/
Techmino is my first "huge project" Techmino is my first "huge project"
optimization is welcomed if you also love tetromino game optimization is welcomed if you also love tetromino game
]] ]]--
--Global Setting & Vars --Global Setting & Vars
math.randomseed(os.time()*626) math.randomseed(os.time()*626)
@@ -18,17 +18,18 @@ function NULL()end
system=love.system.getOS() system=love.system.getOS()
game={} game={}
mapCam={ mapCam={
sel=nil,--selected mode ID sel=nil,--Selected mode ID
x=0,y=0,k=1,--camera pos/k --Basic paragrams
x1=0,y1=0,k1=1,--camera pos/k shown x=0,y=0,k=1,--Camera pos/k
--basic paras x1=0,y1=0,k1=1,--Camera pos/k shown
keyCtrl=false,--if controlling with key --If controlling with key
keyCtrl=false,
--For auto zooming when enter/leave scene
zoomMethod=nil, zoomMethod=nil,
zoomK=nil, zoomK=nil,
--for auto zooming when enter/leave scene
} }
scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K
@@ -36,10 +37,23 @@ 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 preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
preBag={} preBag={}
players={alive={},human=0} game={
--blockSkin,blockSkinMini={},{}--redefined in SKIN.change frame=0, --Frame count
result=0, --Game result
pauseTime=0, --Time paused
pauseCount=0, --Pausing count
garbageSpeed=1, --Garbage timing speed
warnLVL0=0, --Warning level
warnLVL=0, --Warning level (show)
recording=false, --If recording
replaying=false, --If replaying
rec={}, --Recording list, key-time
}--Global game data
players={alive={}}--Players data
curMode=nil--Current mode object
--blockSkin,blockSkinMini={},{}--Redefined in SKIN.change
require("Zframework")--load Zframework require("Zframework")--Load Zframework
--Load modules --Load modules
blocks= require("parts/mino") blocks= require("parts/mino")
@@ -58,7 +72,7 @@ Modes= require("parts/modes")
TICK= require("parts/tick") TICK= require("parts/tick")
--load files & settings --Load files & settings
modeRanks={sprint_10=0} modeRanks={sprint_10=0}
local fs=love.filesystem local fs=love.filesystem
@@ -87,23 +101,37 @@ if fs.getInfo("virtualkey.dat")then FILE.loadVK()end
if fs.getInfo("tech_ultimate.dat")then fs.remove("tech_ultimate.dat")end if fs.getInfo("tech_ultimate.dat")then fs.remove("tech_ultimate.dat")end
if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
--update data file --Update modeRanks
S=stat R=modeRanks
while #modeRanks>73 do if R[1]then
table.remove(modeRanks) local L=R
end
if modeRanks[73]==6 then modeRanks[73]=0 end
if modeRanks[1]then--rename key of modeRanks
local L=modeRanks
for i=1,#L do for i=1,#L do
L[Modes[i].name],L[i]=L[i] L[Modes[i].name],L[i]=L[i]
end end
elseif R.master_adavnce then
R.master_advance,R.master_adavnce=R.master_adavnce
end end
--Update data file
S=stat
if S.version=="Alpha V0.9.1"or type(setting.spawn)~="number"then if S.version=="Alpha V0.9.1"or type(setting.spawn)~="number"then
setting.spawn=0 setting.spawn=0
end end
if S.version~=gameVersion then if S.version~=gameVersion then
S.version=gameVersion S.version=gameVersion
TEXT.show(text.newVersion,640,200,30,"fly",.3) TEXT.show(text.newBigVersion,640,200,30,"fly",.3)
newVersionLaunch=true
fs.remove("master_adavnce.dat")
fs.remove("master_beginner.dat")
for name,M in next,Modes do
if M.score then
if modeRanks[name]==6 then
modeRanks[name]=0
end
else
modeRanks[name]=6
end
end
end end
S=nil R,S=nil

View File

@@ -82,5 +82,5 @@ return{
{name="infinite_dig", x=-1000, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}}, {name="infinite_dig", x=-1000, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}},
{name="custom_clear", x=200, y=-350, size=45,shape=3,icon="custom", unlock={}}, {name="custom_clear", x=200, y=-350, size=45,shape=3,icon="custom", unlock={}},
{name="custom_puzzle", x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}}, {name="custom_puzzle", x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}},
{name="sprintPenta", x=-200, y=-200, size=45,shape=3,icon="sprint", unlock={}}, {name="sprintPenta", x=-200, y=-200, size=50,shape=2,icon="sprint", unlock={}},
} }

File diff suppressed because it is too large Load Diff