From d02048f0dc39140d2153e0c05ba5702a1d8bf861 Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Tue, 18 Feb 2020 23:05:10 +0800 Subject: [PATCH] 0.8.8 --- SFX/error.ogg | Bin 12980 -> 14124 bytes SFX/finesseError.ogg | Bin 0 -> 12980 bytes SFX/{error_long.ogg => finesseError_long.ogg} | Bin conf.lua | 30 +- dataList.lua | 160 ++++----- default_data.lua | 21 +- font.ttf | Bin 972288 -> 965468 bytes image/BG/bg1.jpg | Bin 6482 -> 0 bytes image/BG/bg1.png | Bin 0 -> 1761 bytes image/BG/bg2.png | Bin 1462 -> 227 bytes image/mess/ctrlSpeedLimit.png | Bin 0 -> 1643 bytes image/mess/speedLimit.png | Bin 0 -> 2070 bytes image/modeIcon/custom.png | Bin 0 -> 1579 bytes image/modeIcon/ic_pin_drop_black_48dp.png | Bin 0 -> 767 bytes image/modeIcon/puzzle.png | Bin 0 -> 1023 bytes image/modeIcon/solo.png | Bin 0 -> 915 bytes image/modeIcon/timer.png | Bin 0 -> 1990 bytes image/modeIcon/zen.png | Bin 0 -> 1194 bytes language/chi.lua | 10 +- language/chi_full.lua | 8 +- language/eng.lua | 8 +- list.lua | 4 +- main.lua | 326 +++++++++++------- modes/GM.lua | 14 +- modes/attacker_hard.lua | 2 +- modes/attacker_ultimate.lua | 2 +- modes/bigbang.lua | 6 +- modes/blind_easy.lua | 3 +- modes/blind_hard.lua | 3 +- modes/blind_lunatic.lua | 3 +- modes/blind_normal.lua | 3 +- modes/blind_ultimate.lua | 3 +- modes/c4wtrain_lunatic.lua | 4 +- modes/c4wtrain_normal.lua | 4 +- modes/classic_fast.lua | 1 + modes/drought_lunatic.lua | 3 +- modes/drought_normal.lua | 3 +- modes/infinite.lua | 2 +- modes/marathon_hard.lua | 3 +- modes/marathon_normal.lua | 4 +- modes/master_adavnce.lua | 7 +- modes/master_beginner.lua | 9 +- modes/master_final.lua | 1 + modes/survivor_easy.lua | 8 +- modes/survivor_hard.lua | 8 +- modes/survivor_lunatic.lua | 8 +- modes/survivor_normal.lua | 8 +- modes/techmino49_easy.lua | 6 +- modes/techmino49_hard.lua | 6 +- modes/techmino49_ultimate.lua | 6 +- modes/techmino99_easy.lua | 6 +- modes/techmino99_hard.lua | 6 +- modes/techmino99_ultimate.lua | 10 +- modes/tsd_easy.lua | 2 +- modes/tsd_hard.lua | 2 +- modes/tsd_ultimate.lua | 2 +- modes/ultra.lua | 3 +- modes/zen.lua | 2 +- paint.lua | 170 +++++---- parts/space.lua | 112 ++++++ player.lua | 24 +- scene.lua | 45 +-- texture.lua | 18 - timer.lua | 72 +++- toolfunc.lua | 172 +++++---- updateLog.lua | 29 +- widgetList.lua | 39 ++- 67 files changed, 865 insertions(+), 546 deletions(-) create mode 100644 SFX/finesseError.ogg rename SFX/{error_long.ogg => finesseError_long.ogg} (100%) delete mode 100644 image/BG/bg1.jpg create mode 100644 image/BG/bg1.png create mode 100644 image/mess/ctrlSpeedLimit.png create mode 100644 image/mess/speedLimit.png create mode 100644 image/modeIcon/custom.png create mode 100644 image/modeIcon/ic_pin_drop_black_48dp.png create mode 100644 image/modeIcon/puzzle.png create mode 100644 image/modeIcon/solo.png create mode 100644 image/modeIcon/timer.png create mode 100644 image/modeIcon/zen.png create mode 100644 parts/space.lua diff --git a/SFX/error.ogg b/SFX/error.ogg index 0943e66037a91ab0c58208cec321a9caf80d64d3..80303398717a55f455d5362fd709b4bdaccc57d6 100644 GIT binary patch literal 14124 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 literal 12980 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 z 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 E0EhujlK=n! diff --git a/SFX/finesseError.ogg b/SFX/finesseError.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0943e66037a91ab0c58208cec321a9caf80d64d3 GIT binary patch literal 12980 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 z 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 E0EhujlK=n! literal 0 HcmV?d00001 diff --git a/SFX/error_long.ogg b/SFX/finesseError_long.ogg similarity index 100% rename from SFX/error_long.ogg rename to SFX/finesseError_long.ogg diff --git a/conf.lua b/conf.lua index 5fad9754..1afbc224 100644 --- a/conf.lua +++ b/conf.lua @@ -1,10 +1,10 @@ -gameVersion="Alpha V0.8.7" +gameVersion="Alpha V0.8.8" function love.conf(t) t.identity="Techmino"--Save directory name t.version="11.1" - t.console=X - t.gammacorrect=X - t.appendidentity=X--Search files in source before save directory + t.console=false + t.gammacorrect=false + t.appendidentity=false--Search files in source before save directory t.accelerometerjoystick=false--ios/android加速度计=摇杆 t.audio.mixwithsystem=true @@ -13,23 +13,23 @@ function love.conf(t) W.icon="/image/icon.png" W.width,W.height=1280,720 W.minwidth,W.minheight=640,360 - W.borderless=X - W.resizable=1 + W.borderless=false + W.resizable=true W.fullscreentype="desktop"--"exclusive" - W.fullscreen=X + W.fullscreen=false W.vsync=0--0:∞fps - W.msaa=X--The number of samples to use with multi-sampled antialiasing (number) + W.msaa=false--The number of samples to use with multi-sampled antialiasing (number) W.depth=0--Bits per sample in the depth buffer W.stencil=1--Bits per sample in the stencil buffer W.display=1--Monitor ID - W.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean) + W.highdpi=false--Enable high-dpi mode for the window on a Retina display (boolean) W.x,W.y=nil local M=t.modules - M.window,M.system,M.event=1,1,1 - M.audio,M.sound=1,1 - M.math,M.data=1,1 - M.timer,M.graphics,M.font,M.image=1,1,1,1 - M.mouse,M.touch,M.keyboard,M.joystick=1,1,1,1 - M.physics,M.thread,M.video=X + M.window,M.system,M.event=true,true,true + M.audio,M.sound=true,true + M.math,M.data=true,true + M.timer,M.graphics,M.font,M.image=true,true,true,true + M.mouse,M.touch,M.keyboard,M.joystick=true,true,true,true + M.physics,M.thread,M.video=false,false,false end \ No newline at end of file diff --git a/dataList.lua b/dataList.lua index 98697d30..2a13dbf1 100644 --- a/dataList.lua +++ b/dataList.lua @@ -36,6 +36,7 @@ local function gameOver() local m=M.unlock[i] modeRanks[m]=modes[m].score and 0 or 6 end + saveUnlock() end end local D=M.score(P) @@ -54,6 +55,7 @@ local function gameOver() if p==0 then P:showText(text.newRecord,0,-100,100,"beat",.5) end + D.date=os.date("%Y/%m/%d %H:%M") ins(L,p+1,D) if L[11]then L[11]=nil end saveRecord(M.saveFileName,L) @@ -88,7 +90,7 @@ function Event.win(P,result) die(P) P.result="WIN" if modeEnv.royaleMode then - P.rank=1 + P.modeData.event=1 P:changeAtk() end if P.human then @@ -130,8 +132,8 @@ function Event.lose(P) P.result="K.O." if modeEnv.royaleMode then P:changeAtk() - P.rank=#players.alive+1 - P:showText(P.rank,0,-120,60,"appear",1,12) + P.modeData.event=#players.alive+1 + P:showText(P.modeData.event,0,-120,60,"appear",1,12) P.strength=0 if P.lastRecv then local A,i=P,0 @@ -142,7 +144,7 @@ function Event.lose(P) if P.id==1 or A.id==1 then P.killMark=A.id==1 end - A.ko,A.badge=A.ko+1,A.badge+P.badge+1 + A.modeData.point,A.badge=A.modeData.point+1,A.badge+P.badge+1 for i=A.strength+1,4 do if A.badge>=royaleData.powerUp[i]then A.strength=i @@ -254,91 +256,91 @@ end -------------------------------------------------- --------------------------------------------------- modes={ - {"sprint_10", id=1, x=0, y=0, shape=1,size=35,unlock={2,3}}, - {"sprint_20", id=2, x=-300, y=0, shape=1,size=45,unlock={73,74,75}}, - {"sprint_40", id=3, x=0, y=-400, shape=1,size=55,unlock={4,9}}, - {"sprint_100", id=4, x=-200, y=-400, shape=1,size=45,unlock={5,7}}, - {"sprint_400", id=5, x=-400, y=-400, shape=1,size=35,unlock={6}}, - {"sprint_1000", id=6, x=-600, y=-400, shape=1,size=35,unlock={}}, - {"drought_normal", id=7, x=-400, y=-200, shape=1,size=35,unlock={8}}, - {"drought_lunatic", id=8, x=-600, y=-200, shape=1,size=35,unlock={}}, - {"marathon_normal", id=9, x=0, y=-600, shape=1,size=55,unlock={10,11,22,31,36,37,48,68,71,72}}, - {"marathon_hard", id=10, x=0, y=-800, shape=1,size=45,unlock={27}}, - {"solo_1", id=11, x=-300, y=-1000, shape=1,size=35,unlock={12}}, - {"solo_2", id=12, x=-500, y=-1000, shape=1,size=35,unlock={13}}, - {"solo_3", id=13, x=-700, y=-1000, shape=1,size=35,unlock={14,16}}, - {"solo_4", id=14, x=-900, y=-1000, shape=1,size=35,unlock={15}}, - {"solo_5", id=15, x=-1100, y=-1000, shape=1,size=35,unlock={}}, - {"techmino49_easy", id=16, x=-900, y=-1200, shape=1,size=35,unlock={17,19}}, - {"techmino49_hard", id=17, x=-900, y=-1400, shape=1,size=35,unlock={18}}, - {"techmino49_ultimate", id=18, x=-900, y=-1600, shape=1,size=35,unlock={}}, + {"sprint_10", id=1, x=0, y=0, size=35,shape=1,icon="timer", unlock={2,3}}, + {"sprint_20", id=2, x=-300, y=0, size=45,shape=1,icon="timer", unlock={73,74,75}}, + {"sprint_40", id=3, x=0, y=-400, size=55,shape=1,icon="timer", unlock={4,9}}, + {"sprint_100", id=4, x=-200, y=-400, size=45,shape=1,icon="timer", unlock={5,7}}, + {"sprint_400", id=5, x=-400, y=-400, size=35,shape=1,icon="timer", unlock={6}}, + {"sprint_1000", id=6, x=-600, y=-400, size=35,shape=1,icon="timer", unlock={}}, + {"drought_normal", id=7, x=-400, y=-200, size=35,shape=1,icon="noI", unlock={8}}, + {"drought_lunatic", id=8, x=-600, y=-200, size=35,shape=1,icon="mess", unlock={}}, + {"marathon_normal", id=9, x=0, y=-600, size=55,shape=1,icon="flag", unlock={10,11,22,31,36,37,48,68,71,72}}, + {"marathon_hard", id=10, x=0, y=-800, size=45,shape=1,icon="flag", unlock={27}}, + {"solo_1", id=11, x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={12}}, + {"solo_2", id=12, x=-500, y=-1000, size=35,shape=1,icon="solo", unlock={13}}, + {"solo_3", id=13, x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={14,16}}, + {"solo_4", id=14, x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={15}}, + {"solo_5", id=15, x=-1100, y=-1000, size=35,shape=1,icon="solo", unlock={}}, + {"techmino49_easy", id=16, x=-900, y=-1200, size=35,shape=1,icon="", unlock={17,19}}, + {"techmino49_hard", id=17, x=-900, y=-1400, size=35,shape=1,icon="", unlock={18}}, + {"techmino49_ultimate", id=18, x=-900, y=-1600, size=35,shape=1,icon="", unlock={}}, - {"techmino99_easy", id=19, x=-1100, y=-1400, shape=1,size=35,unlock={20}}, - {"techmino99_hard", id=20, x=-1100, y=-1600, shape=1,size=35,unlock={21}}, - {"techmino99_ultimate", id=21, x=-1100, y=-1800, shape=1,size=35,unlock={}}, - {"round_1", id=22, x=-300, y=-800, shape=1,size=35,unlock={23}}, - {"round_2", id=23, x=-500, y=-800, shape=1,size=35,unlock={24}}, - {"round_3", id=24, x=-700, y=-800, shape=1,size=35,unlock={25}}, - {"round_4", id=25, x=-900, y=-800, shape=1,size=35,unlock={26}}, - {"round_5", id=26, x=-1100, y=-800, shape=1,size=35,unlock={}}, + {"techmino99_easy", id=19, x=-1100, y=-1400, size=35,shape=1,icon="", unlock={20}}, + {"techmino99_hard", id=20, x=-1100, y=-1600, size=35,shape=1,icon="", unlock={21}}, + {"techmino99_ultimate", id=21, x=-1100, y=-1800, size=35,shape=1,icon="", unlock={}}, + {"round_1", id=22, x=-300, y=-800, size=35,shape=1,icon="round", unlock={23}}, + {"round_2", id=23, x=-500, y=-800, size=35,shape=1,icon="round", unlock={24}}, + {"round_3", id=24, x=-700, y=-800, size=35,shape=1,icon="round", unlock={25}}, + {"round_4", id=25, x=-900, y=-800, size=35,shape=1,icon="round", unlock={26}}, + {"round_5", id=26, x=-1100, y=-800, size=35,shape=1,icon="round", unlock={}}, - {"master_beginner", id=27, x=0, y=-1000, shape=1,size=35,unlock={28}}, - {"master_adavnce", id=28, x=0, y=-1200, shape=1,size=35,unlock={29,30}}, - {"master_final", id=29, x=0, y=-1400, shape=1,size=35,unlock={}}, - {"GM", id=30, x=150, y=-1500, shape=1,size=35,unlock={}}, + {"master_beginner", id=27, x=0, y=-1000, size=35,shape=1,icon="", unlock={28}}, + {"master_adavnce", id=28, x=0, y=-1200, size=35,shape=1,icon="", unlock={29,30}}, + {"master_final", id=29, x=0, y=-1400, size=35,shape=1,icon="", unlock={}}, + {"GM", id=30, x=150, y=-1500, size=35,shape=1,icon="", unlock={}}, - {"blind_easy", id=31, x=150, y=-700, shape=1,size=35,unlock={32}}, - {"blind_normal", id=32, x=150, y=-800, shape=1,size=35,unlock={33}}, - {"blind_hard", id=33, x=150, y=-900, shape=1,size=35,unlock={34}}, - {"blind_lunatic", id=34, x=150, y=-1000, shape=1,size=35,unlock={35}}, - {"blind_ultimate", id=35, x=150, y=-1100, shape=1,size=35,unlock={}}, + {"blind_easy", id=31, x=150, y=-700, size=35,shape=1,icon="", unlock={32}}, + {"blind_normal", id=32, x=150, y=-800, size=35,shape=1,icon="", unlock={33}}, + {"blind_hard", id=33, x=150, y=-900, size=35,shape=1,icon="", unlock={34}}, + {"blind_lunatic", id=34, x=150, y=-1000, size=35,shape=1,icon="", unlock={35}}, + {"blind_ultimate", id=35, x=150, y=-1100, size=35,shape=1,icon="", unlock={}}, - {"classic_fast", id=36, x=-300, y=-1200, shape=1,size=35,unlock={}}, + {"classic_fast", id=36, x=-300, y=-1200, size=35,shape=2,icon="classic", unlock={}}, - {"survivor_easy", id=37, x=300, y=-600, shape=1,size=35,unlock={38}}, - {"survivor_normal", id=38, x=500, y=-600, shape=1,size=35,unlock={39,42,44,46}}, - {"survivor_hard", id=39, x=700, y=-600, shape=1,size=35,unlock={40}}, - {"survivor_lunatic", id=40, x=900, y=-600, shape=1,size=35,unlock={41}}, - {"survivor_ultimate", id=41, x=1100, y=-600, shape=1,size=35,unlock={}}, - {"attacker_hard", id=42, x=300, y=-800, shape=1,size=35,unlock={43}}, - {"attacker_ultimate", id=43, x=300, y=-1000, shape=1,size=35,unlock={}}, + {"survivor_easy", id=37, x=300, y=-600, size=35,shape=1,icon="", unlock={38}}, + {"survivor_normal", id=38, x=500, y=-600, size=35,shape=1,icon="", unlock={39,42,44,46}}, + {"survivor_hard", id=39, x=700, y=-600, size=35,shape=1,icon="", unlock={40}}, + {"survivor_lunatic", id=40, x=900, y=-600, size=35,shape=1,icon="", unlock={41}}, + {"survivor_ultimate", id=41, x=1100, y=-600, size=35,shape=1,icon="", unlock={}}, + {"attacker_hard", id=42, x=300, y=-800, size=35,shape=1,icon="", unlock={43}}, + {"attacker_ultimate", id=43, x=300, y=-1000, size=35,shape=1,icon="", unlock={}}, - {"defender_normal", id=44, x=500, y=-800, shape=1,size=35,unlock={45}}, - {"defender_lunatic", id=45, x=500, y=-1000, shape=1,size=35,unlock={}}, + {"defender_normal", id=44, x=500, y=-800, size=35,shape=1,icon="", unlock={45}}, + {"defender_lunatic", id=45, x=500, y=-1000, size=35,shape=1,icon="", unlock={}}, - {"dig_hard", id=46, x=700, y=-800, shape=1,size=35,unlock={47}}, - {"dig_ultimate", id=47, x=700, y=-1000, shape=1,size=35,unlock={}}, + {"dig_hard", id=46, x=700, y=-800, size=35,shape=1,icon="", unlock={47}}, + {"dig_ultimate", id=47, x=700, y=-1000, size=35,shape=1,icon="", unlock={}}, - {"bigbang", id=48, x=400, y=-400, shape=1,size=55,unlock={49,51,56}}, - {"c4wtrain_normal", id=49, x=700, y=-400, shape=1,size=35,unlock={50}}, - {"c4wtrain_lunatic", id=50, x=900, y=-400, shape=1,size=35,unlock={}}, + {"bigbang", id=48, x=400, y=-400, size=55,shape=1,icon="", unlock={49,51,56}}, + {"c4wtrain_normal", id=49, x=700, y=-400, size=35,shape=1,icon="", unlock={50}}, + {"c4wtrain_lunatic", id=50, x=900, y=-400, size=35,shape=1,icon="", unlock={}}, - {"pctrain_normal", id=51, x=700, y=-200, shape=1,size=35,unlock={52,53}}, - {"pctrain_lunatic", id=52, x=900, y=-200, shape=1,size=35,unlock={}}, - {"pcchallenge_normal", id=53, x=800, y=-100, shape=1,size=35,unlock={54}}, - {"pcchallenge_hard", id=54, x=1000, y=-100, shape=1,size=35,unlock={55}}, - {"pcchallenge_lunatic", id=55, x=1200, y=-100, shape=1,size=35,unlock={}}, - {"tech_normal", id=56, x=400, y=-100, shape=1,size=35,unlock={57,58}}, - {"tech_normal+", id=57, x=650, y=150, shape=1,size=35,unlock={64,67}}, - {"tech_hard", id=58, x=400, y=50, shape=1,size=35,unlock={59,60}}, - {"tech_hard+", id=59, x=250, y=50, shape=1,size=35,unlock={}}, - {"tech_lunatic", id=60, x=400, y=200, shape=1,size=35,unlock={61,62}}, - {"tech_lunatic+", id=61, x=250, y=200, shape=1,size=35,unlock={}}, - {"tech_ultimate", id=62, x=400, y=350, shape=1,size=35,unlock={63}}, - {"tech_ultimate+", id=63, x=250, y=350, shape=1,size=35,unlock={}}, - {"tsd_easy", id=64, x=800, y=200, shape=1,size=35,unlock={65}}, - {"tsd_hard", id=65, x=1000, y=200, shape=1,size=35,unlock={66}}, - {"tsd_ultimate", id=66, x=1200, y=200, shape=1,size=35,unlock={}}, + {"pctrain_normal", id=51, x=700, y=-200, size=35,shape=1,icon="", unlock={52,53}}, + {"pctrain_lunatic", id=52, x=900, y=-200, size=35,shape=1,icon="", unlock={}}, + {"pcchallenge_normal", id=53, x=800, y=-100, size=35,shape=1,icon="", unlock={54}}, + {"pcchallenge_hard", id=54, x=1000, y=-100, size=35,shape=1,icon="", unlock={55}}, + {"pcchallenge_lunatic", id=55, x=1200, y=-100, size=35,shape=1,icon="", unlock={}}, + {"tech_normal", id=56, x=400, y=-100, size=35,shape=1,icon="", unlock={57,58}}, + {"tech_normal+", id=57, x=650, y=150, size=35,shape=1,icon="", unlock={64,67}}, + {"tech_hard", id=58, x=400, y=50, size=35,shape=1,icon="", unlock={59,60}}, + {"tech_hard+", id=59, x=250, y=50, size=35,shape=1,icon="", unlock={}}, + {"tech_lunatic", id=60, x=400, y=200, size=35,shape=1,icon="", unlock={61,62}}, + {"tech_lunatic+", id=61, x=250, y=200, size=35,shape=1,icon="", unlock={}}, + {"tech_ultimate", id=62, x=400, y=350, size=35,shape=1,icon="", unlock={63}}, + {"tech_ultimate+", id=63, x=250, y=350, size=35,shape=1,icon="", unlock={}}, + {"tsd_easy", id=64, x=800, y=200, size=35,shape=1,icon="", unlock={65}}, + {"tsd_hard", id=65, x=1000, y=200, size=35,shape=1,icon="", unlock={66}}, + {"tsd_ultimate", id=66, x=1200, y=200, size=35,shape=1,icon="", unlock={}}, - {"ultra", id=67, x=650, y=400, shape=1,size=35,unlock={}}, - {"zen", id=68, x=-900, y=-600, shape=1,size=35,unlock={69,70}}, - {"infinite", id=69, x=-900, y=-400, shape=1,size=35,unlock={}}, - {"infinite_dig", id=70, x=-1100, y=-600, shape=1,size=35,unlock={}}, - {"custom_clear", id=71, x=200, y=-350, shape=2,size=45,unlock={}}, - {"custom_puzzle", id=72, x=200, y=-200, shape=2,size=45,unlock={}}, - {"hotseat_2P", id=73, x=-300, y=200, shape=2,size=45,unlock={}}, - {"hotseat_3P", id=74, x=-450, y=200, shape=2,size=45,unlock={}}, - {"hotseat_4P", id=75, x=-600, y=200, shape=2,size=45,unlock={}}, + {"ultra", id=67, x=650, y=400, size=35,shape=1,icon="", unlock={}}, + {"zen", id=68, x=-900, y=-600, size=35,shape=1,icon="zen", unlock={69,70}}, + {"infinite", id=69, x=-900, y=-400, size=35,shape=1,icon="", unlock={}}, + {"infinite_dig", id=70, x=-1100, y=-600, size=35,shape=1,icon="", unlock={}}, + {"custom_clear", id=71, x=200, y=-350, size=45,shape=3,icon="custom", unlock={}}, + {"custom_puzzle", id=72, x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}}, + {"hotseat_2P", id=73, x=-300, y=200, size=45,shape=3,icon="", unlock={}}, + {"hotseat_3P", id=74, x=-450, y=200, size=45,shape=3,icon="", unlock={}}, + {"hotseat_4P", id=75, x=-600, y=200, size=45,shape=3,icon="", unlock={}}, } modeRanks={} for i=1,#modes do diff --git a/default_data.lua b/default_data.lua index 8b7bdfdc..da9b9023 100644 --- a/default_data.lua +++ b/default_data.lua @@ -1,7 +1,10 @@ setting={ das=10,arr=2, sddas=0,sdarr=2, - quickR=true,swap=true, + reTime=10, + maxNext=6, + quickR=true, + swap=true, fine=false, --game @@ -14,13 +17,13 @@ setting={ fullscreen=false, bg=true, - bgblock=true, + bgspace=true, lang=1, skin=1, --graphic sfx=10,bgm=7, - vib=3,voc=0, + vib=0,voc=0, stereo=6, --sound @@ -32,12 +35,12 @@ setting={ {},{},{},{},{},{},{}, --joystick }, - VKSwitch=true, - VKTrack=true,--If tracked - VKDodge=false,--If repel - VKTchW=3,--Touch Weight - VKCurW=4,--CurPos Weight - VKIcon=true, + VKSwitch=false,--if disp + VKTrack=false,--if tracked + VKDodge=false,--if dodge + VKTchW=3,--Touch-Pos Weight + VKCurW=4,--Cur-Pos Weight + VKIcon=true,--if disp icon VKAlpha=3, --control } diff --git a/font.ttf b/font.ttf index 80f345347deda8bda73b61b040561b79c46e6c1b..5a44a8bad4b6ce55d544359c90fae20e5bda8e9f 100644 GIT binary patch delta 28140 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 delta 34938 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 Ht{MCfg1vyJ diff --git a/image/BG/bg1.png b/image/BG/bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..c91cd5758342bd5b04985887f60b3d1608287889 GIT binary patch literal 1761 zcmV<71|Io|P)ud(86r4w;wSiG zhj+c>?yh=La?tDEF+p9bx@)FWN~M%~_Md*PzGTs65Wd9BGwaZhmyQg8^U0Br~uc^K>hGbUnSl!FCWIaEQ2phz4; zfN=V%br(>GM4T$7L|TLA0zWY*e}bcpQKwKDKE${f6(ZfR0p^7jxEI5WlL8z!VbX$j zz(^HSMM_M>Niro$kibbHjW^%{GKR9_FJRJ4;9$3Y91bcVgd;-W#&0g+OmZ>M*-yk- zFjw}{fQo14$WR7j-e6n=7*!pFnPKYWEIJ6h2y=`gDC}7TC^h}Fn*RHn>`QRU8(gdQ z6;Os4jCrt10C52hI8kTqhC7&d)?+mIT=YMf5XO`^RNN>^;+A4Q>;8Yh7Yifrt$`4j zHxnE%0UOPRZ!3r>HY-l+a-fG0#X)kAq>7_N0(XIOJi(De4J3zhO2(K+*Hvj$8si1V z)`6Ul{M@h*?uKu|RT#o3aAVHSda5`m4mx|u7x<3KQEd%ekCGVUyc%_a4-vTp_X1uJ z>Ojnd8SEd0k0i|5EV(OCH3Qd5u1anxj)GZ%a%=DzNLvFdAOm5jj8S)?39&&K$yFlrg~}bx3ssKh1`1RIrL_=cNI{h`>|DQXA_nMY z$VA>CcQJ3qb`|q#%&VwVSUB4sP9iQO#^*fwl*N%R)O>01xue>e#q^bREFE#$D^6iY@#R%~{wewX{e^#jd*#iMV zpxu{AJ^X4sSbuZ%`ysZkFU_77>jH%>yIsP;Kt`Q|`SXQ;{quXi{PoYAfBc4gpHu+k z)2tu=z1rx1uKsSMZLnOvxdCLPIo;}ph&4Wg+&@t7zT@@y$Pd4KAg+I6&v%^rN!bnA zL`;fWKUd2EMH@4q#1_^l+c2#F@<|2q=uFC}aiQXZwhv7Ez^~VxAI`!2?i(TpI{G2Ez^7s?#jh29D#MiOjm>&PbG9qMG1?Ol60)jRSH#fB`XaRCN(?$ivf zDL&=oruSUgU<7P|%NV)3_b@!VacnabJ5>{7Ah#A?ol6(OForCe>e#@796Q*CGTKBI z_%E7FcJA!31-3^!CEya{6lLwK4=q#R+n_A4I(yZ2M^t~t7`46YjD0lq3^WHSCueZ2 zRp@8ySv8V7vER078Y+dhl{88-U5GeY>B+aEmunz!=0!o5gadoc(;ShqpVaV6u?} zwvV+88hD3b>g6S*c2aZ7SJzE{PFgD<48`b`j>Oxky53p#8}NH2MR2k)3DO*5?doqv zs|l=nbo*nb_hF#lO`47Mz2#%*1*58`TxG9F_qEj=6y+P4gJduj*u^^gaPVk@DM2h9 zn6N7Bbljkp{abVZqK|sYL=#lAtl94zOcNMdoB1nSLU=rA{27jvmYYoi4*4Wl55xm#C`szhy zD~N|#7WiB6<1M&W02sv^a9_bdPtB#U$fav!<97cD?(=_c32WvyN5|*noR<`~C)mPe|pC|kmQWhHDzEf!U>xe!;f4H}7{|ycI^k>a|Mi00000NkvXXu0mjf8NpWl delta 1438 zcmaLX{Xf%r008jMjG0U|r$lI2v{tMTdED|eAug0GOvq!B$LZ)hgyX2(l|^bq3DL^K zCC^)uXyM$klt{B!T1$=E*xmhpulw!&7rbX-t*Vza*O8G30DyhYs(P`$CZrVU=0x(P zy<9AxOnFO2Iln-=rM{4JIWj@IhgVHD*LJLr{{ZF~8k*I-`4?jBaWZ8*fep#OQD}+N zV4AXI1y(N1tir*d=-4^YZim?P!YLSfMXjg!#zkQNSr~dw)Fcf|GZCyZn9$s^{etsa zw8>h-v9Pq)Cal0$Qs_$yYIw*%I=*_sq1_pp>-VC&POlmUF1mJ&UQFjN$MuE#o&NSM z{zRV$AT#}J`0VKBW1A_PkC?BvM-z0H@tv)~g!3KEiU39=gN^Foydu#5f7%8q_VQsp z_=3Tik6$4HnC>ey#W`onbU;UixC%k*O*d7+GT}faUh{~8HL!*R?)!(tv zbg~uL!l|>=W@7z2VnpCe+d=hF8(7cb+0YX*MPfbgC+FEBhkh4QYq-dfX8M94LfBrKH1Vek zt;!Y8#aPm8m==eKOzve|87&v~;YYK_hL8Np%7z(W>%HC9>#Cx3m`(jGrVW34(D8sy zik+N`CXPF@OW9(NNZjs|){rUg`Fb-ua}_qw!oqt3QZK(JT3hW;%MjhD^4kA_LXs9} z(A>GfO5nDiN7tKIskQx*2I}})OZ?@4-d$qkuc;z zW_$+sO|$CN;j?UxX^uR`8s3IkzASHlL8}%|{yctU<*~oz_JHz7{K3eF5lgbxR_!7G zrAb^+nvtx^Q%loss;Qq6K^xR-$u6N9>0*)IhNQ9@0*RHdb%{_k_Mmd=Lp)o`*fHkr zP?$dxC8-!OfCSx1!P4@4MSsGEi3~-n`kO}9LoJXoeqdj@qyP&G<2XDN#0Z&X!fTZ| zoHLQOwibzX0yQ7fIZsgHu`wbq|6^O9PpVF8$O;eVCx2a+*&lMl+&c)L-l)?V%LMOU zhRl?FqRN!Dx=bZ5_I7ZRV=KM%P~RG@XK4)V8i4N2mh6deU-m`CJ=|7tQjdwM&EI3( zaBB8-vdgd|{cBP8qz0=x1)wyfCaUugU;XJ5%+ktLp;mXJdu)KiwR=j{y`025N2f%? z2tPRkP|clii`SpU-)Xq1TU&L|rL88;VyRzyK9~ELviGDJYiCYi!v`PXU`MG>Kz9Sb z4T4?m=|LdsiPgGI(wZFKri*#jZKe0j&KY~n@e*urCBa<*O94gjUKXLq+3z=H?F(jj zmL1lq!~4Jdt5G7~un^c~1e#7M99@}6L*@oPny1FlsnT?L&Lg_r{cv2N+Rwih{(gyCPfE*9PA(T$_&c|*piig6R_1L0B3 z#7G&O-tL-p22Wc!RMAPUrd!;G+dLDaVS0$(L>Va^uoAEnyt$-m`XzwD0;CE!pztpN ha?^iD)R8OOpv+SfyBgBN|7lnSxH%tkYCJ&A`WvgGrD*^F diff --git a/image/mess/ctrlSpeedLimit.png b/image/mess/ctrlSpeedLimit.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbbe36a573df8c173212931a41ae960dc0f04c2 GIT binary patch literal 1643 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 AHvj+t literal 0 HcmV?d00001 diff --git a/image/modeIcon/custom.png b/image/modeIcon/custom.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee97f62f9d711585924e4543c2e4ee4bd157e7f GIT binary patch literal 1579 zcmV+`2Gse9P)09?2{;KojP@t)Yt1HxAvs-VhJ)A~0bwQQI4+o*W$Q+vrEIt8qfQdD@ znF!1YUyTI-kbvWI@H01jH5>pC9SD;}5XalC_;Aa|e zSR(?E*Snk7w`4?X9_1Ko1{*Ql*YT>!iZ98nLI4Cs!(U2%*N$LQoBP;GU35LIJyoXyph!JhTeyQtOs}(SOKg`DRr0WMB9Q$-2q$D1o7DT&o*eVq z6SZEl|Dgo^ov*$SiPvfa;cI-&9}k@n3~(T)hw{97#)$MdXz;QM*i|{(pq`f77j!V; zjvN@|L+Z?O!KSE-)Xo}$Jrw;#UI4VH57&^-59)2|aMZv{3do#UI5I`p%w0m2QzD=07*SFW_o#%p%pojp_Mt3 zp%((sG!&pY2B9D4Oow}d%GOGUA1HthuT?Kq$D!U^py;qOM2(}W5JZkvA1_!CxhJXL zhb&%{?FQZpN$i7^QdgPcrvVp*Bz9@RlGr!Rz~==6&;ncwoC$oSt_HpWel8J3=Y%MF zejL9?)u9pmBB|$vEMAY1n805^SBWe>VVEpFwNA45X5hvY=k-$H5wcBN8`*jpoP$2q z6!(7K4({*&pm>1~fp=0$y+cRT55Q}{AO8aYwgRsMKknxODW!hkEnpomFougC06qrZ zikkoZu~E+sAZCwI05$>FrIfxLkqxGlJ_A;c;dg(<@Zt|dho1&EWNdW$4?;ox8Kt-N zz%!NT0h@s36$l~Q!{PP75@1^$i{HlJg{K>UXQQte&H8{RDi&4MnZdwHFG_A!KZtvQ zQ%lwy8)K&}>fQo+_q`GSIrW&5*lp_F>Z%bgO7;gct^EE&(BsS0FG3qwr#_)xRa$t- zy2!P2X_ zW#UhYoNtaFZnf0^ldI?F2*84(@+@*L(2-M9wGa5N5dr8XpAp$sU}qx&An;QTets&F zq!kT7XAXWk8x?>7vX8Ti{FXHAE6|ubAf+UOmm&Am;AS_lF?==L4j6iRuZ9FwjcoO5 dPP^!U_BSPQ9H)2wAd>(9002ovPDHLkV1j0w>%#y5 literal 0 HcmV?d00001 diff --git a/image/modeIcon/ic_pin_drop_black_48dp.png b/image/modeIcon/ic_pin_drop_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b1865f7b8a70d548be1d3ae2fa8b58708d68cf84 GIT binary patch literal 767 zcmV{O+~8XxjJ58=5hEV6-O`h}M$;HB%VQb*>f@d4NHN{(e}sE3YujUha7 zn{CubWk&Hpkt5V+M?6c$=4hb=wJ4FH7g6%En^2^MQmDl z2&a}&%Dsw1*QueDJ7ySXR*{9?!;vf0k%ej$aAFZzY5^xU5au>1F+#4>D6^Ci=6=S3 zVPve%4F4BVqJa#xxr%kum_PpGT;v|+3D5cP1e&3nS!C#atXngF_q&UXzlCqGu9E1s zoI|nwigi^K+X!*)pxFMvx+aP(N1Qy0?G)?kRtGe(?spX1C~?M6Y=>C4g<_i}&H{>U z59_{0v6YGFCSoW1$LQM${-n<%L+@hU)5uVRdtBr`CqA4K409rf8d5gxeP=V^D!T|Dt7>Z29B@c>(>$F>>5BjYqt4>cLb zGq0l_TEaV*_`ZkZ`4S$w!6CxjAvf?;5n--~$38-aKE`W#HVyAE^LXwS2dGO2+yehS zNgG{Io2M8ME9TR|ZxLUjbA3U?0J(hbEy6CB88A25NB_3ZO$N{e4TNa$7z1jGcBd%@ x*ekqD5CmS33DG$`Ums`xL6NDBsWAqZ|-K@_zuR!}Ud7NeH_q_r((q)F#-F(*)m zNOR9jncO?`LKYLaXYTjhbI*Cd?>hshLF!WVX7z3LXZ0WTZ*`~ol6ti|L=~l8q`sgY zbZ#}&arG&6Mb&~oSA8!%?NjNnI$EXRLw!!2asHZC?@^-)07lgP7S|T_yl&n1KnKUV z4Oo_O-DSYFRRC}uP|LV(1#m?b0IURZ-sLkhXU>8HkULg%_&&M@pp@zZ=yd>b(mp;2 ztOM=^t^yVp9BVbOH1j_80e=>;9l&3}cHk}Gmx!2Y$HA>qHzsFRHchI}sORJYSgF3I zPFY?ZNe~MAkWlXe-UpVH{B=GAtc!?UMHj)xDiHjvqkJT17g$rFMSX1!fMpc|usjDq zmApXY0O)xq7`+alp9}O~f&L8W1LycvT1Cziw@Jd9C z6&pbZ)hANVjB1m*pz6NecgK;cvu~Zf-_+)Fb0fNVEr2h))(~w zJAf?}*#K4p_ZI??R?n>!DxTb$;{<=LkPWyr2f&F60a%m+V7Nj6_T&J#zCr-D76PDN z4BS+a;12+s2MPqgI9cLLDiHh>&93ry1M>{N2HXiekP@Xb>qK(3Z$!kgQzb*QsqqHj z#grbGQH>P%A>egjV?-RBO^45(!ypXOY&KpFJP6!D^EB5&*U?npXno=bfUkkifQkR4 z!|FRNY4Jds=Bt1!$v^ec4ef}CLJiUy@DM#*8|)WF={H7tTeZ_P?i8>a_#F5O_?>1w zaRj J(i>8IRG}%ex5l&=MT6!-vmIW4Hg07Qi9_rQ}h+g|t4 t{K?Fc1)M21(xSU9mAJl$h{>FR{sm?*4(eD#hHU@<002ovPDHLkV1hmC#t;Ai literal 0 HcmV?d00001 diff --git a/image/modeIcon/solo.png b/image/modeIcon/solo.png new file mode 100644 index 0000000000000000000000000000000000000000..71441f24d93f6e627e6fef5092ecc4e94fdf43d8 GIT binary patch literal 915 zcmV;E18n?>P)F+?5?H3@r$r+jZr;byb2<~v7lwOb z9{2bA%sKO$`Q4Es5>NrO1FwO4MJ!+^@CJAWl*=^%dw?N+sWVC=flA<=9eV)S?jnFv z;4&~4fKZ>-rU)npHUbU6ep_|}8-SI-w6s3EfcJLHAHYRmwpEhRGtsLLIO($E)9gYQr^bLoK%t8OYJs=JuTEf1 zRCb$)oG+5}MAD`Ss_)p(rIPCM9P)*vF8jT4g8HYDb{bwy(Ab@HY0F)&NV37-p;Df046O+)Gyu9Ms3Ii!gHIkYnl}hT6blVv7 zF+-eB#sOmvq}j8~9>=RC^-H=gsofZp|LX#zfD1NNm3}1M4452S)xV~I9R}C}^rtl$ z1kT$D4Rx~nn&CGe0gD|3umpIVq1hl%6DABcNh;1zSC???&$cyQm!WQ^^(k)v^RxU= zi7l=vmt70P07&InIE|wVx(U1KOX)wC2jBsC03Lt`-~o659)Jhn0eAo&fCu0KcmN*2 zxV~iRGh~Zv`ff`m4TJ&EmSvz1wz#HTcD3a_5>N=-2Zkp|FCPu&*d0oXr+{PD#-N6Q zdq6=boWKg;9MBDX2VMfl?S&}02Ef`<1e^d~S)03ov%vC9eoi^N3-n4_kkDh_Ym6z2 zV-XCaYm!D2aDG(M)u|2=#S>60sX@|SN#l3@>y-UcRPY|)xN_Yi?9%TGQ6rLCCEYc~ zxEGOtmVEC42KwZ>M;Ob$(0(K20eAo&fCu0KcmN(i)S65_VN&OLR{=~WpAg-7-hr)f p-uZ;s&hrjH$Sa>P)${yR^%KZ1#p|OiQN@Sf8=R^c6#~t;Nxp*o}mJg){8=CDy01D^yw2walk*_LDOrkr}KdTZ!6$6M$o-85_BrukRSli#kcZY2DfJ`eN*UE^Yk zv(yS~1)fxYk|fE{?r&^FSTm|Hs z0E}k*xs7w9pP)o`rg|jLX%B=qIFaVZ#3KzdI1<;@iJapHbL#&1WJs18_vZoNKN$dA z8oJo1A>0o<5LP`89i~!C$P4`Jj5r41)jR+k1lFefz8aVtsjo%>I23y8m$t`?8##Udory3x^O2uX0QS5h(leQ zaXUPf2Y`JcqG@CAs6%w8gW7_}Bt!rA}f2-|CxHl>V4|rjEc*%>SnclI#nSGx9#c{ z^|=gQ`_vmJGkL4}>nau4U#g3%Rb8e4fO3?_?yJJ*ePJLcwZJv%v5bjNM!kM+5#{h4 zytPDk+O{fH;@8wojV#g@Eonm;3-qgBRTlHM-z(_5Lai z3IB~wtwnkI0~+MzY=6Ka_3r2!%xc*9mHM`3A--ANTSd=?)gP%>gkBcaAyQVaRPU`) z5;vMDH#JQnWAPh8r>eEd>{h#?XCP_v<~!9-sC#NOOZCOAP%1(MKNkHrwYsw&h(?H| zjocEU>q}#<2W#{Noo$HtaFGV6L;ZLxRI5+0PkluFVsx0b*4ZbxUj0(c(HC=8qZibV zs&z%H$s|B%1>OzZ6N!gfCp<(Yqx=f5cZxnwdZ*|bDxIR6sMH4*`Um zOik%dT@{Yf@oDT8J{Aty%IWgNmZ+ar|1k}l?~QKM&gl+C+thccKaLX_EpXE#>e1){ zT$R=KQm756X0am{?*iUKr62HuCQW}LvN=1c^d;_XR*|-dZ-&kSaa|a*4Z!70?wg^# z5z6)ee*$`&U7arStFaQ50>wpCD$ZB(#;?X^Q>g%-y(wO%@-4w0DqoEqiVRhMQDyo6 Y0h-lDVy#3dWdHyG07*qoM6N<$f-w2EE&u=k literal 0 HcmV?d00001 diff --git a/image/modeIcon/zen.png b/image/modeIcon/zen.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf9b5a8694cbd264d5fa2017eb8ecc2567ccb21 GIT binary patch literal 1194 zcmV;b1XcTqP)LHWJ2gRU#3B!mAguoKCKg)V4!fZmu(ku(pg3=sKCv`^sdYG*Yw|%ZN z;?{m5UdFUsOJDPfQ7&$VEh>j@GI~=uo`FzA+%NH(o!#1A5nj{XPi`jR3BC^t0u(< zsdua2s>eKgj;c-Se05+YD<0Gd>N@qfy-&NkR=rdWm1uw&>gV=7pQ_U<#tBC6el4&T z7*(R_Pr!G;$G{d~2XHWcLp?ANm3v3D@ob2zJzgqpK#Ek7zm#Nd$ zpKb+2S;%it-;J_TG^r!|)7!sTVuqemNA;4C z7nK-iQNNrH@u=IM_@D#o<9#sR6H#_*i_I;U(&wpj)F7h-uO2?b5%oo1E=P4>93#a|eG%APr+%Uy?85o{mpZ=;tMINkRxz*jn(@{1)mOSO z=w^g=M;RUPor&@PQRj76R$cMT18)O2m*{f{ z*aiFsv;rq$I{QHx525wIzM{x;2(Uoi7bC@8A%vsdvFZ?YNr@RgqQ0lzu1-?x)dBq& zgsn?_W1ITBxJ=53 zeLmRDn!+lzA(_po&t_C)HkQM)_s{?fdyqUR->n9758npln&g6sW+&LV_c9`nR-X9JJoSHBSN9 zlo2sasWDy0C!VzwfG>ePMK1;bh^5(@-iPU6+p06_bT}dCv5Y&v zTHz!0bOIPs^+Dhs;AJ}g;;JQf0`o!$TRR6r#c^|M2;tRu3~m5U)_~&ebli6|c2+*Q z0*Zo%vB3Sn13*KSD!&I<0jvxm?ElY%chSKN1{Toq|IXx?OOK3Oq^?r@AaIM.x-s and xM.y-s and y1 then VOICE((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg") sceneTemp.last=Timer() + if rnd()<.26 then + for i=1,#modes do + local M=modes[i] + for i=1,#M.unlock do + local m=M.unlock[i] + modeRanks[m]=modes[m].score and(modeRanks[m]and max(modeRanks[m],0)or 0)or 6 + end + end + saveUnlock() + TEXT("DEVMODE:UNLOCKALL",640,360,50,"stretch",.6) + end end end end @@ -467,7 +471,7 @@ function keyDown.setting_key(key) if key=="escape"then if s.kS then s.kS=false - SFX("error",.5) + SFX("finesseError",.5) else scene.back() end @@ -514,7 +518,7 @@ function gamepadDown.setting_key(key) if key=="back"then if s.jS then s.jS=false - SFX("error",.5) + SFX("finesseError",.5) else scene.back() end @@ -797,10 +801,11 @@ local function widgetControl_gamepad(i) end local lastX,lastY--last clickDown pos function love.mousepressed(x,y,k,t,num) + if t then return end mouseShow=true mx,my=xOy:inverseTransformPoint(x,y) if devMode>0 then print(mx,my)end - if t or scene.swapping then return end + if scene.swapping then return end if mouseDown[scene.cur]then mouseDown[scene.cur](mx,my,k) elseif k==2 then @@ -815,9 +820,10 @@ function love.mousepressed(x,y,k,t,num) lastY=my end function love.mousemoved(x,y,dx,dy,t) + if t then return end mouseShow=true mx,my=xOy:inverseTransformPoint(x,y) - if t or scene.swapping then return end + if scene.swapping then return end dx,dy=dx/scr.k,dy/scr.k if mouseMove[scene.cur]then mouseMove[scene.cur](mx,my,dx,dy) @@ -835,6 +841,7 @@ function love.mousemoved(x,y,dx,dy,t) end end function love.mousereleased(x,y,k,t,num) + if t then return end mx,my=xOy:inverseTransformPoint(x,y) if t or scene.swapping then return end if mouseUp[scene.cur]then @@ -917,6 +924,8 @@ function love.keypressed(i) elseif i=="q"then local W=widget_sel if W then W:getInfo()end + elseif i=="e"then + error("Error Test") elseif widget_sel then local W=widget_sel if i=="left"then W.x=W.x-10 @@ -943,6 +952,17 @@ function love.keyreleased(i) if keyUp[scene.cur]then keyUp[scene.cur](i)end end +function love.joystickadded(JS) + joysticks[#joysticks+1]=JS +end +function love.joystickremoved(JS) + for i=1,#joysticks do + if joysticks[i]==JS then + rem(joysticks,i) + return + end + end +end local keyMirror={ dpup="up", dpdown="down", @@ -966,9 +986,26 @@ function love.gamepadreleased(joystick,i) end end --[[ -function love.joystickpressed(js,k)end -function love.joystickaxis(js,axis,val)end -function love.joystickhat(js,hat,dir)end +function love.joystickpressed(JS,k) + mouseShow=false + if scene.swapping then return end + if gamepadDown[scene.cur]then gamepadDown[scene.cur](i) + elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i) + elseif i=="back"then scene.back() + else widgetControl_gamepad(i) + end +end +function love.joystickreleased(JS,k) + if scene.swapping then return end + if gamepadUp[scene.cur]then gamepadUp[scene.cur](i) + end +end +function love.joystickaxis(JS,axis,val) + +end +function love.joystickhat(JS,hat,dir) + +end function love.sendData(data)end function love.receiveData(id,data)end ]] @@ -978,6 +1015,7 @@ end function love.resize(w,h) love.timer.sleep(.26) scr.w,scr.h,scr.r=w,h,h/w + scr.rad=(w^2+h^2)^.5 if scr.r>=.5625 then scr.k=w/1280 scr.x,scr.y=0,(h-w*9/16)*.5 @@ -985,14 +1023,19 @@ function love.resize(w,h) scr.k=h/720 scr.x,scr.y=(w-h*16/9)*.5,0 end - gc.origin() xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360) - gc.replaceTransform(xOy) + if setting.bgspace then + space.resize(w,h) + space.new() + end end function love.focus(f) if system~="Android" and not f and scene.cur=="play"then pauseGame()end end function love.update(dt) + if setting.bgspace then + space.update() + end for i=#sysFX,1,-1 do local S=sysFX[i] S[2]=S[2]+1 @@ -1002,18 +1045,6 @@ function love.update(dt) end end end - for i=#FX_BGblock,1,-1 do - local B=FX_BGblock[i] - B.y=B.y+B.v - if B.y>B.ty then rem(FX_BGblock,i)end - end - if setting.bgblock then - FX_BGblock.tm=FX_BGblock.tm-1 - if FX_BGblock.tm==0 then - FX_BGblock[#FX_BGblock+1]=getNewBlock() - FX_BGblock.tm=rnd(20,30) - end - end for i=#texts,1,-1 do local t=texts[i] t.c=t.c+t.spd @@ -1092,103 +1123,162 @@ function love.update(dt) W:update() end--更新控件 end +function love.errorhandler(msg) + local PUMP,POLL=love.event.pump,love.event.poll + love.mouse.setVisible(true) + love.audio.stop() + local err={"Error:"..msg} + local trace=debug.traceback("",2) + local c=2 + for l in string.gmatch(trace,"(.-)\n")do + if c>2 then + if not string.find(l,"boot")then + err[c]=string.gsub(l,"^\t*","") + c=c+1 + end + else + err[2]="Traceback" + c=3 + end + end + print(table.concat(err,"\n"),1,c-2) + -- err=err:gsub("%[string \"(.-)\"%]","%1") + local CAP + local function _(_)CAP=gc.newImage(_)end + gc.captureScreenshot(_) + local T=0 + return function() + PUMP() + for e,a,b in POLL()do + if e=="quit"or a=="escape"then + destroyPlayers() + return 1 + elseif a=="return"or a=="start"then + destroyPlayers() + return"restart" + elseif e=="resize"then + T=2 + love.resize(a,b) + end + end + T=T+1 + if T==1 then + if sfx.error then + SFX("error",.8) + end + elseif T==2 then + gc.clear(.3,.5,.9) + elseif T==3 then + gc.setColor(1,1,1) + gc.push("transform") + gc.replaceTransform(xOy) + gc.draw(CAP,100,365,nil,512/CAP:getWidth(),288/CAP:getHeight()) + gc.pop() + elseif T==4 then + gc.push("transform") + gc.replaceTransform(xOy) + setFont(120) + gc.print(":(",100,40) + setFont(38) + gc.printf(text.errorMsg,100,200,1280-100) + setFont(20) + gc.print(err[1],626,360) + gc.print("TRACEBACK",626,410) + for i=4,#err-2 do + gc.print(err[i],626,355+20*i) + end + gc.pop() + end + gc.present() + love.timer.sleep(.1) + end +end + local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5} local FPS=love.timer.getFPS function love.draw() gc.discard()--SPEED UPUPUP! Pnt.BG[setting.bg and curBG or"grey"]() - gc.setColor(1,1,1,.2) - for n=1,#FX_BGblock do - local b,img=FX_BGblock[n].b,blockSkin[FX_BGblock[n].bn] - local size=FX_BGblock[n].size - for i=1,#b do for j=1,#b[1]do - if b[i][j]then - gc.draw(img,FX_BGblock[n].x+(j-1)*30*size,FX_BGblock[n].y-i*30*size,nil,size) + if setting.bgspace then + space.draw() + end + gc.push("transform") + gc.replaceTransform(xOy) + if Pnt[scene.cur]then Pnt[scene.cur]()end + for k,W in next,Widget[scene.cur]do + if not(W.hide and W.hide())then + W:draw() end - end end - end--Draw BG falling blocks - if Pnt[scene.cur]then Pnt[scene.cur]()end - for k,W in next,Widget[scene.cur]do - if not(W.hide and W.hide())then - W:draw() - end - end--Draw widgets - if mouseShow then - local r=Timer()*.5 - gc.setColor(1,1,1,min(1-math.abs(1-r%1*2),.3)) - r=int(r)%7+1 - gc.draw(miniBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5) - gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5) - gc.setColor(1,1,1)gc.circle("fill",mx,my,3) - end--Awesome mouse! + end--Draw widgets + if mouseShow then + local r=Timer()*.5 + gc.setColor(1,1,1,min(1-math.abs(1-r%1*2),.3)) + r=int(r)%7+1 + gc.draw(miniBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5) + gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5) + gc.setColor(1,1,1)gc.circle("fill",mx,my,3) + end--Awesome mouse! + gc.setLineWidth(6) + for i=1,#sysFX do + local S=sysFX[i] + if S[1]==0 then + gc.setColor(1,1,1,1-S[2]/S[3]) + local r=(10*S[2]/S[3])^1.2 + gc.rectangle("line",S[4]-r,S[5]-r,S[6]+2*r,S[7]+2*r) + --按钮波纹 + elseif S[1]==1 then + gc.setColor(S[4],S[5],S[6],1-S[2]/S[3]) + gc.rectangle("fill",S[7],S[8],S[9],S[10],2) + --开关/滑条残影 + end + end--guiFXs + for i=1,#texts do + local t=texts[i] + local p=t.c + gc.setColor(1,1,1,p<.2 and p*5 or p<.8 and 1 or 5-p*5) + setFont(t.font) + t:draw() + end--Floating Texts + gc.pop() gc.setColor(1,1,1) if powerInfoCanvas then gc.draw(powerInfoCanvas) end--Power Info - gc.setLineWidth(6) - for i=1,#sysFX do - local S=sysFX[i] - if S[1]==0 then - gc.setColor(1,1,1,1-S[2]/S[3]) - local r=(10*S[2]/S[3])^1.2 - gc.rectangle("line",S[4]-r,S[5]-r,S[6]+2*r,S[7]+2*r) - --按钮波纹 - elseif S[1]==1 then - gc.setColor(S[4],S[5],S[6],1-S[2]/S[3]) - gc.rectangle("fill",S[7],S[8],S[9],S[10],2) - --开关/滑条残影 - end - end--guiFXs - for i=1,#texts do - local t=texts[i] - local p=t.c - gc.setColor(1,1,1,p<.2 and p*5 or p<.8 and 1 or 5-p*5) - setFont(t.font) - t:draw() - end--Floating Texts if scene.swapping then - scene.swap.draw(scene.swap.time) - end--Swapping animation - if scr.r~=.5625 then - gc.setColor(0,0,0) - if scr.r>.5625 then - local d=(scr.h-scr.w*9/16)*.5/scr.k - gc.rectangle("fill",0,0,1280,-d) - gc.rectangle("fill",0,720,1280,d) - else--高窗口 - local d=(scr.w-scr.h*16/9)*.5/scr.k - gc.rectangle("fill",0,0,-d,720) - gc.rectangle("fill",1280,0,d,720) - end--扁窗口 - end--Black side + local _=scene.swap + _.draw(_.time) + end--Scene swapping animation setFont(15) gc.setColor(1,1,1) - gc.print(FPS(),5,700) + local _=scr.h-20 + gc.print(FPS(),5,_) if devMode>0 then - gc.setColor(1,devMode==2 and .5 or 1,1) - gc.print("Tasks:"..#Task,5,600) - gc.print("Voices:"..#voiceQueue,5,620) - gc.print("Mouse:"..mx.." "..my,5,640) - gc.print("Free Row:"..#freeRow.."/"..freeRow.L,5,660) - gc.print("Cache used:"..gcinfo(),5,680) - end + gc.setColor(1,1,devMode==2 and .6 or 1) + gc.print("Cache used:"..gcinfo(),5,_-20) + gc.print("Free Row:"..#freeRow.."/"..freeRow.L,5,_-40) + gc.print("Mouse:"..mx.." "..my,5,_-60) + gc.print("Voices:"..#voiceQueue,5,_-80) + gc.print("Tasks:"..#Task,5,_-100) + end--DEV info end function love.run() local T=love.timer - local lastFrame,lastFreshPow=T.getTime(),T.getTime() + local sleep=T.sleep + local lastFrame,lastFreshPow=T.getTime() + local lastFreshPow=lastFrame local readyDrawFrame=0 local mini=love.window.isMinimized local PUMP,POLL=love.event.pump,love.event.poll love.resize(gc.getWidth(),gc.getHeight()) scene.init("load")--Scene Launch - while true do + return function() PUMP() for N,a,b,c,d,e in POLL()do - if N=="quit"then - destroyPlayers() - goto END - elseif love[N]then + if love[N]then love[N](a,b,c,d,e) + elseif N=="quit"then + destroyPlayers() + return 1 end end T.step() @@ -1202,18 +1292,17 @@ function love.run() end end if Timer()-lastFrame<.058 then - T.sleep(.01) + sleep(.01) end while Timer()-lastFrame<.0158 do - T.sleep(.001) - end + sleep(.001) + end--try easily control 60FPS lastFrame=Timer() if Timer()-lastFreshPow>1 then updatePowerInfo() lastFreshPow=Timer() end end - ::END:: end ------------------------------------------------------------- local F=love.filesystem @@ -1237,15 +1326,16 @@ end FILE={ data=F.newFile("data.dat"), setting=F.newFile("setting.dat"), + unlock=F.newFile("unlock.dat"), } +if F.getInfo("unlock.dat")then loadUnlock()end if F.getInfo("data.dat")then loadStat()end if F.getInfo("setting.dat")then loadSetting() elseif system=="Android"or system=="iOS" then setting.swap=false -else - setting.VKSwitch=false + setting.VKSwitch=true + setting.vib=3 end -math.randomseed(os.time()*626) changeLanguage(setting.lang) changeBlockSkin(setting.skin) \ No newline at end of file diff --git a/modes/GM.lua b/modes/GM.lua index e8c0d102..57bb5c38 100644 --- a/modes/GM.lua +++ b/modes/GM.lua @@ -4,6 +4,7 @@ local function score(P) local F=false if P.modeData.point<70 then--if Less then MM local R=#P.cleared + if R==0 then return end if R==4 then R=10 end P.modeData.point=P.modeData.point+R P.modeData.event=sectionName[int(P.modeData.point*.1)+1] @@ -12,14 +13,14 @@ end return{ name={ - "大师", - "大师", - "GM", + "宗师", + "宗师", + "GrandMaster", }, level={ - "", - "", - "", + "GM", + "GM", + "GM", }, info={ "成为方块大师", @@ -47,6 +48,7 @@ return{ }, load=function() newPlayer(1,340,15) + players[1].modeData.event="M7" end, mesDisp=function(P,dx,dy) mDraw(drawableText.line,-82,300) diff --git a/modes/attacker_hard.lua b/modes/attacker_hard.lua index 3de7212d..18822323 100644 --- a/modes/attacker_hard.lua +++ b/modes/attacker_hard.lua @@ -66,7 +66,7 @@ return{ scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]100 and 4 or W>=80 and 3 or W>=50 and 2 or W>=20 and 1 or W>=5 and 0 end, } \ No newline at end of file diff --git a/modes/attacker_ultimate.lua b/modes/attacker_ultimate.lua index 0088ba3f..59b26b84 100644 --- a/modes/attacker_ultimate.lua +++ b/modes/attacker_ultimate.lua @@ -79,7 +79,7 @@ return{ scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]40 and 4 or W>=30 and 3 or W>=20 and 2 or W>=10 and 1 or W>=5 and 0 end, } \ No newline at end of file diff --git a/modes/bigbang.lua b/modes/bigbang.lua index 7226ab40..d681cbb6 100644 --- a/modes/bigbang.lua +++ b/modes/bigbang.lua @@ -34,8 +34,10 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - setFont(50) - mStr("UNFINISHED",150,100) + setFont(60) + for i=1,5 do + mStr("UNFINISHED",120+10*i,100+50*i) + end end, score=function(P)return{P.modeData.event,P.stat.extraRate}end, scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end, diff --git a/modes/blind_easy.lua b/modes/blind_easy.lua index e69534cb..c8db1088 100644 --- a/modes/blind_easy.lua +++ b/modes/blind_easy.lua @@ -1,3 +1,4 @@ +local min=math.min return{ name={ "隐形", @@ -33,7 +34,7 @@ return{ mStr(P.stat.row,-82,220) mStr(P.stat.clear_4,-82,340) end, - score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, + score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]=0 and R or 0,-82,280) end, - score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, + score=function(P)return{min(P.stat.row,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]=0 and R or 0,-82,280) end, - score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, + score=function(P)return{min(P.stat.row,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]b[1]end, getRank=function(P) local L=P.stat.row diff --git a/modes/marathon_hard.lua b/modes/marathon_hard.lua index dc82cd4d..f3636dda 100644 --- a/modes/marathon_hard.lua +++ b/modes/marathon_hard.lua @@ -34,9 +34,10 @@ return{ env={ drop=.5,fall=30, target=50,dropPiece=check, - mindas=7,minarr=1, + mindas=7,minarr=1,minsdarr=1, bg="strap",bgm="race", }, + slowmark=true, load=function() newPlayer(1,340,15) end, diff --git a/modes/marathon_normal.lua b/modes/marathon_normal.lua index 1e39bbcc..7d395b1b 100644 --- a/modes/marathon_normal.lua +++ b/modes/marathon_normal.lua @@ -33,9 +33,11 @@ return{ env={ fall=30, target=10,dropPiece=check_LVup, - mindas=7,minarr=1, + mindas=7,minarr=1,minsdarr=1, + minsdarr=1, bg="strap",bgm="way", }, + slowmark=true, load=function() newPlayer(1,340,15) end, diff --git a/modes/master_adavnce.lua b/modes/master_adavnce.lua index 7e1ab6b4..c6d5bf5f 100644 --- a/modes/master_adavnce.lua +++ b/modes/master_adavnce.lua @@ -59,6 +59,7 @@ return{ freshLimit=15, bg="game2",bgm="secret7th", }, + slowmark=true, load=function() newPlayer(1,340,15) end, @@ -74,12 +75,12 @@ return{ return a[1]>b[1]or(a[1]==b[1]and(a[2]=30 and 5 or + L>=25 and 4 or 3 else return diff --git a/modes/master_beginner.lua b/modes/master_beginner.lua index 91c24f78..d333a703 100644 --- a/modes/master_beginner.lua +++ b/modes/master_beginner.lua @@ -63,6 +63,7 @@ return{ freshLimit=15, bg="strap",bgm="secret8th", }, + slowmark=true, load=function() newPlayer(1,340,15) end, @@ -78,19 +79,19 @@ return{ return a[1]>b[1]or(a[1]==b[1]and(a[2]=30 and 5 or + L>=25 and 4 or 3 else return S>=420 and 3 or S>=250 and 2 or S>=120 and 1 or - L>=30 and 0 + S>=30 and 0 end end, } \ No newline at end of file diff --git a/modes/master_final.lua b/modes/master_final.lua index b4976376..dc6fa6e5 100644 --- a/modes/master_final.lua +++ b/modes/master_final.lua @@ -59,6 +59,7 @@ return{ easyFresh=false,bone=true, bg="none",bgm="shining terminal", }, + slowmark=true, load=function() newPlayer(1,340,15) end, diff --git a/modes/survivor_easy.lua b/modes/survivor_easy.lua index fcd735fa..7d9d7e35 100644 --- a/modes/survivor_easy.lua +++ b/modes/survivor_easy.lua @@ -37,11 +37,9 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-82,300) - mDraw(drawableText.techrash,-82,420) - setFont(75) - mStr(P.stat.row,-82,220) - mStr(P.stat.clear_4,-82,340) + setFont(65) + mStr(P.modeData.event,-82,310) + mDraw(drawableText.wave,-82,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_hard.lua b/modes/survivor_hard.lua index e603c919..6bce5d38 100644 --- a/modes/survivor_hard.lua +++ b/modes/survivor_hard.lua @@ -42,11 +42,9 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-82,300) - mDraw(drawableText.techrash,-82,420) - setFont(75) - mStr(P.stat.row,-82,220) - mStr(P.stat.clear_4,-82,340) + setFont(65) + mStr(P.modeData.event,-82,310) + mDraw(drawableText.wave,-82,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_lunatic.lua b/modes/survivor_lunatic.lua index 3ca4fc4e..7788382b 100644 --- a/modes/survivor_lunatic.lua +++ b/modes/survivor_lunatic.lua @@ -38,11 +38,9 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-82,300) - mDraw(drawableText.techrash,-82,420) - setFont(75) - mStr(P.stat.row,-82,220) - mStr(P.stat.clear_4,-82,340) + setFont(65) + mStr(P.modeData.event,-82,310) + mDraw(drawableText.wave,-82,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_normal.lua b/modes/survivor_normal.lua index c898e45f..0b06b93e 100644 --- a/modes/survivor_normal.lua +++ b/modes/survivor_normal.lua @@ -42,11 +42,9 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-82,300) - mDraw(drawableText.techrash,-82,420) - setFont(75) - mStr(P.stat.row,-82,220) - mStr(P.stat.clear_4,-82,340) + setFont(65) + mStr(P.modeData.event,-82,310) + mDraw(drawableText.wave,-82,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/techmino49_easy.lua b/modes/techmino49_easy.lua index 209a0e53..b47e1364 100644 --- a/modes/techmino49_easy.lua +++ b/modes/techmino49_easy.lua @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/49",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R<=3 and 4 or diff --git a/modes/techmino49_hard.lua b/modes/techmino49_hard.lua index c592e671..a6a88ec2 100644 --- a/modes/techmino49_hard.lua +++ b/modes/techmino49_hard.lua @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/49",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R==2 and 4 or diff --git a/modes/techmino49_ultimate.lua b/modes/techmino49_ultimate.lua index fdb2302c..be1b6e02 100644 --- a/modes/techmino49_ultimate.lua +++ b/modes/techmino49_ultimate.lua @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/49",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R==2 and 4 or diff --git a/modes/techmino99_easy.lua b/modes/techmino99_easy.lua index 4ffc5263..65283afe 100644 --- a/modes/techmino99_easy.lua +++ b/modes/techmino99_easy.lua @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/99",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R<=3 and 4 or diff --git a/modes/techmino99_hard.lua b/modes/techmino99_hard.lua index 73a5d3bf..22177c8f 100644 --- a/modes/techmino99_hard.lua +++ b/modes/techmino99_hard.lua @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/99",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R<=3 and 4 or diff --git a/modes/techmino99_ultimate.lua b/modes/techmino99_ultimate.lua index 688d442a..8f69bb08 100644 --- a/modes/techmino99_ultimate.lua +++ b/modes/techmino99_ultimate.lua @@ -58,7 +58,7 @@ return{ if L[n]then newPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,6))) else - newPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,6)-1,LV+1,true,LV*10000)) + newPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,6)-1,4,true,30000)) end n=n+1 end end @@ -66,7 +66,7 @@ return{ if L[n]then newPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,6))) else - newPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,6)-1,LV+1,true,LV*10000)) + newPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,6)-1,4,true,30000)) end n=n+1 end end @@ -74,7 +74,7 @@ return{ mesDisp=function(P,dx,dy) setFont(35) mStr(#players.alive.."/99",-82,175) - mStr(P.ko,-70,215) + mStr(P.modeData.point,-70,215) gc.draw(drawableText.ko,-127,225) setFont(20) gc.setColor(1,.5,0,.6) @@ -86,11 +86,11 @@ return{ gc.draw(badgeIcon,16*i-138,260) end end, - score=function(P)return{P.rank,P.ko}end, + score=function(P)return{P.modeData.event,P.modeData.point}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, comp=function(a,b)return a[1]b[2]end, getRank=function(P) - local R=P.rank + local R=P.modeData.event return R==1 and 5 or R==2 and 4 or diff --git a/modes/tsd_easy.lua b/modes/tsd_easy.lua index 23f484b3..5f3fbbb4 100644 --- a/modes/tsd_easy.lua +++ b/modes/tsd_easy.lua @@ -41,7 +41,7 @@ return{ mDraw(drawableText.tsd,-82,407) end, score=function(P)return{P.modeData.event,P.stat.time}end, - scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, + scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]or a[1]==b[1]and a[2]b[1]end, getRank=function(P) local T=P.stat.score diff --git a/modes/zen.lua b/modes/zen.lua index 8b5d492d..0d854d3c 100644 --- a/modes/zen.lua +++ b/modes/zen.lua @@ -30,7 +30,7 @@ return{ mStr(R>=0 and R or 0,-82,280) end, score=function(P)return{P.stat.score}end, - scoreDisp=function(D)return D[1]end, + scoreDisp=function(D)return tostring(D[1])end, comp=function(a,b)return a[1]>b[1]end, getRank=function(P) local T=P.stat.score diff --git a/paint.lua b/paint.lua index 2d76b65f..ff58f776 100644 --- a/paint.lua +++ b/paint.lua @@ -1,12 +1,11 @@ local gc=love.graphics local setFont=setFont -local int,abs,rnd,max,min,sin=math.floor,math.abs,math.random,math.max,math.min,math.sin +local int,ceil,rnd,max,min,sin=math.floor,math.ceil,math.random,math.max,math.min,math.sin local format=string.format local Timer=love.timer.getTime local scr=scr local modeRankColor={ - [0]=color.darkGrey, --Not pass color.bronze, --Rank1 color.lightGrey, --Rank2 color.lightYellow, --Rank3 @@ -31,8 +30,6 @@ local function stencil_miniTitle() end end -FX_BGblock={tm=150,next=7,ct=0,list={}}--Falling tetrominos on background -for _=1,16 do FX_BGblock.list[_]={v=0}end FX_attack={}--Attack beam FX_badge={}--Badge thrown sysFX={} @@ -61,21 +58,19 @@ end local function drawVirtualkey() local a=setting.VKAlpha*.1 for i=1,#virtualkey do - if i~=9 or modeEnv.Fkey then - local B=virtualkey[i] - if B.ava then - local _=virtualkeyDown[i]and gc.setColor(.7,.7,.7,a)or gc.setColor(1,1,1,a)--Dark magic - gc.setLineWidth(B.r*.07) - local ΔY=virtualkeyPressTime[i] - gc.circle("line",B.x,B.y+ΔY,B.r)--Outline circle - if setting.VKIcon then - gc.draw(VKIcon[i],B.x,B.y+ΔY,nil,B.r*.025,nil,18,18) - end--Icon - if ΔY>0 then - gc.setColor(1,1,1,a*ΔY*.1) - gc.circle("line",B.x,B.y,B.r*(1.4-ΔY*.04)) - end--Ripple - end + local B=virtualkey[i] + if B.ava then + local _=virtualkeyDown[i]and gc.setColor(.7,.7,.7,a)or gc.setColor(1,1,1,a)--Dark magic + gc.setLineWidth(B.r*.07) + local ΔY=virtualkeyPressTime[i] + gc.circle("line",B.x,B.y+ΔY,B.r)--Outline circle + if setting.VKIcon then + gc.draw(VKIcon[i],B.x,B.y+ΔY,nil,B.r*.025,nil,18,18) + end--Icon + if ΔY>0 then + gc.setColor(1,1,1,a*ΔY*.1) + gc.circle("line",B.x,B.y,B.r*(1.4-ΔY*.04)) + end--Ripple end end end @@ -84,6 +79,9 @@ local Pnt={BG={}} function Pnt.BG.none() gc.clear(.15,.15,.15) end +function Pnt.BG.black() + gc.clear() +end function Pnt.BG.grey() gc.clear(.3,.3,.3) end @@ -103,35 +101,37 @@ function Pnt.BG.rgb() end function Pnt.BG.strap() gc.setColor(1,1,1) - local x=Timer()%32*40 - gc.draw(background2,x,0,nil,10) - gc.draw(background2,x-1280,0,nil,10) + local x=Timer()%16*-64 + ::L:: + gc.draw(background2,x,0,nil,8,scr.h) + x=x+1024--image width*8 + if x0 then @@ -449,12 +495,12 @@ end function Pnt.setting_game() gc.setColor(1,1,1) mDraw(drawableText.setting_game,640,15) - setFont(35) - mStr("DAS:"..setting.das,290,205) - mStr("ARR:"..setting.arr,610,205) - setFont(23) - mStr(text.softdropdas..setting.sddas,290,323) - mStr(text.softdroparr..setting.sdarr,610,323) + setFont(33) + mStr("DAS:"..setting.das.."F",290,205) + mStr("ARR:"..setting.arr.."F",610,205) + setFont(22) + mStr(text.softdropdas..setting.sddas.."F",290,323) + mStr(text.softdroparr..setting.sdarr.."F",610,323) end function Pnt.setting_graphic() gc.setColor(1,1,1) diff --git a/parts/space.lua b/parts/space.lua new file mode 100644 index 00000000..89533479 --- /dev/null +++ b/parts/space.lua @@ -0,0 +1,112 @@ +local gc=love.graphics +local sin,cos,rnd,min=math.sin,math.cos,math.random,math.min + +local W,H,R--w,h+=100,r=real Radius +local stars={} +local planet={} + +local function newPlanet() + local a=rnd()*3.142 + local r=(H+W)*(rnd()*2+1)*.06 + planet.r=r + planet.x=W*.5+cos(a)*(R+r) + planet.y=H*.5+sin(a)*(R+r) + planet.vx=-cos(a+rnd()-.5)*.2 + planet.vy=-sin(a+rnd()-.5)*.2 + planet.R=.7+rnd()*.2 + planet.G=.7+rnd()*.1 +end + +local space={}--LIB +function space.resize(w,h) + R=((w*.5)^2+(h*.5)^2)^.5 + W,H=w+100,h+100 +end +function space.new() + newPlanet() + for i=1,2600,5 do + local s=0.75*2^(rnd()*1.5) + stars[i]=s --size + stars[i+1]=rnd(W) --x + stars[i+2]=rnd(H) --y + stars[i+3]=(rnd()-.5)*.05*s --vx + stars[i+4]=(rnd()-.5)*.05*s --vy + end--800 stars +end +function space.translate(dx,dy) + planet.x=planet.x+dx*.26 + planet.y=planet.y+dy*.26 + for i=1,2600,5 do + local s=stars[i] + stars[i+1]=stars[i+1]+dx*s + stars[i+2]=stars[i+2]+dy*s + end +end +function space.scale(k) + planet.r=planet.r*k^.15 + for i=1,2600,5 do + local s=stars[i] + local x=stars[i+1] + local y=stars[i+2] + s=s*k + x=W*.5+(x-W*.5)*k + y=H*.5+(y-H*.5)*k + if k>1 then + if x%W~=x or y%H~=y then + s=.75 + x=W*.5+(rnd()-.5)*W*.5 + y=H*.5+(rnd()-.5)*H*.5 + end + --out,new small one + elseif s<.75 then + local vx,vy + repeat + s=rnd()*.75+2.25 + stars[i]=s --size + x=rnd(W) --x + y=rnd(H) --y + vx=(rnd()-.5)*.15 --vx + vy=(rnd()-.5)*.15 --vy + until x<100 or x>W-100 or y<100 or y>H-100 + stars[i+3]=vx + stars[i+4]=vy + --disappear,new big one + end + stars[i]=s + stars[i+1]=x + stars[i+2]=y + end +end +function space.update(dt) + local x,y=planet.x,planet.y + planet.x=planet.x+planet.vx + planet.y=planet.y+planet.vy + if((planet.x-W*.5)^2+(planet.y-H*.5)^2)^.5>R+planet.r then + newPlanet() + end + for i=1,2600,5 do + stars[i+1]=(stars[i+1]+stars[i+3])%W + stars[i+2]=(stars[i+2]+stars[i+4])%H + end--stars moving +end +function space.draw() + if not stars[1]then return end + gc.translate(-50,-50) + gc.setLineWidth(7) + gc.setColor(planet.R,planet.G,.6,.2) + gc.circle("line",planet.x,planet.y,planet.r+1) + gc.setColor(planet.R,planet.G,.6,.5) + gc.circle("fill",planet.x,planet.y,planet.r) + gc.setColor(1,1,1) + for i=1,2600,5 do + local x,y=stars[i+1],stars[i+2] + gc.circle("fill",x,y,stars[i]) + end + gc.translate(50,50) +end +function space.discard() + stars={} + planet={} + collectgarbage() +end +return space \ No newline at end of file diff --git a/player.lua b/player.lua index 004dfd46..467a9238 100644 --- a/player.lua +++ b/player.lua @@ -4,6 +4,7 @@ local Timer=love.timer.getTime local int,ceil,abs,rnd,max,min=math.floor,math.ceil,math.abs,math.random,math.max,math.min local ins,rem=table.insert,table.remove local format=string.format +local actName=actName--controllings' id local scr=scr--screen camera -------------------------------------------------- @@ -27,7 +28,7 @@ local gameEnv0={ freshLimit=1e99,easyFresh=true, fine=false,fineKill=false, target=1e99,dropPiece=NULL, - mindas=0,minarr=0, + mindas=0,minarr=0,minsdarr=0, bg="none",bgm="race" } local renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else @@ -102,8 +103,8 @@ local TRS={ [03]={TMP1,{1,0}, {1,1}, {0,-2}, {-1,1} }, [30]={TMP1,{-1,0}, {-1,-1},{0,2}, {-1,2} }, [12]={TMP1,{1,0}, {1,-1}, {0,2}, {1,2}, {1,1} }, - [21]={TMP1,{-1,0}, {-1,1}, {0,-2}, {-1,-2},{-1,-1} }, - [32]={TMP1,{-1,0}, {-1,-1},{1,0}, {0,2}, {-1,2} }, + [21]={TMP1,{-1,0}, {-1,-1},{-1,1}, {0,-2}, {-1,-2},{-1,-1} }, + [32]={TMP1,{-1,0}, {-1,-1},{-1,1}, {1,0}, {0,2}, {-1,2} }, [23]={TMP1,{1,0}, {1,1}, {-1,0}, {0,-2}, {1,-2} }, [02]={TMP1,{1,0}, {-1,0}, {0,-1}, {0,1} }, [20]={TMP1,{-1,0}, {1,0}, {0,1}, {0,-1} }, @@ -115,10 +116,10 @@ local TRS={ [10]={TMP1,{1,0}, {1,-1}, {0,2}, {1,2} }, [03]={TMP1,{1,0}, {1,1}, {0,-2}, {1,-2}, {1,-1}, {0,1} }, [30]={TMP1,{-1,0}, {-1,-1},{0,2}, {-1,2}, {0,-1}, {-1,1} }, - [12]={TMP1,{1,0}, {1,-1}, {-1,0}, {0,2}, {1,2} }, + [12]={TMP1,{1,0}, {1,-1}, {1,1}, {-1,0}, {0,2}, {1,2} }, [21]={TMP1,{-1,0}, {-1,1}, {1,0}, {0,-2}, {-1,-2} }, [32]={TMP1,{-1,0}, {-1,-1},{0,2}, {-1,2}, {-1,1} }, - [23]={TMP1,{1,0}, {1,1}, {0,-2}, {1,-2}, {1,-1} }, + [23]={TMP1,{1,0}, {1,-1}, {1,1}, {0,-2}, {1,-2}, {1,-1} }, [02]={TMP1,{-1,0}, {1,0}, {0,-1}, {0,1} }, [20]={TMP1,{1,0}, {-1,0}, {0,1}, {0,-1} }, [13]={TMP1,{0,-1}, {1,0}, {0,1} }, @@ -517,7 +518,7 @@ function Pdraw_small(P) if P.result then gc.setColor(1,1,1,min(P.endCounter,60)*.01) setFont(17)mStr(P.result,32,47) - setFont(15)mStr(P.rank,30,82) + setFont(15)mStr(P.modeData.event,30,82) end gc.pop() gc.setCanvas() @@ -976,10 +977,10 @@ function player.fineError(P,rate) P.stat.extraRate=P.stat.extraRate+rate if P.human then if P.gameEnv.fineKill then - SFX("error_long") + SFX("finesseError_long") Event.lose(P) elseif setting.fine then - SFX("error") + SFX("finesseError") end elseif P.gameEnv.fineKill then Event.lose(P) @@ -2098,10 +2099,9 @@ function newPlayer(id,x,y,size,AIdata) P.field,P.visTime={},{} P.atkBuffer={sum=0} - P.ko,P.badge,P.strength=0,0,0 + P.badge,P.strength=0,0 P.atkMode,P.swappingAtkMode=1,20 P.atker,P.atking,P.lastRecv={} - P.rank=nil --Royale-related P.gameEnv={}--Current game setting environment @@ -2113,9 +2113,11 @@ function newPlayer(id,x,y,size,AIdata) else P.gameEnv[k]=v end - end--reset current game settings + end--load game settings P.gameEnv.das=max(P.gameEnv.das,P.gameEnv.mindas) P.gameEnv.arr=max(P.gameEnv.arr,P.gameEnv.minarr) + P.gameEnv.sdarr=max(P.gameEnv.sdarr,P.gameEnv.minsdarr) + if not AIdata then P.gameEnv.next=min(P.gameEnv.next,setting.maxNext)end--AIdata is not human P.cur={bk={{}},id=0,color=0,name=0}--shape,shapeID,colorID,nameID P.sc,P.dir,P.r,P.c={0,0},0,0,0--spinCenter,direction,row,col diff --git a/scene.lua b/scene.lua index b287d70f..4c17c414 100644 --- a/scene.lua +++ b/scene.lua @@ -47,7 +47,7 @@ local sceneInit={ end end, mode=function() - curBG="glow" + curBG="black" BGM("blank") destroyPlayers() local cam=mapCam @@ -141,7 +141,7 @@ local sceneInit={ sceneTemp={ S.run, S.game, - format("%0.1fHr",S.time*2.78e-4), + format("%.1fHr",S.time*2.78e-4), S.key, S.rotate, S.hold, @@ -155,8 +155,8 @@ local sceneInit={ "["..S.spin_0.."]/"..S.spin_1.."/"..S.spin_2.."/"..S.spin_3, S.b2b.."[+"..S.b3b.."]", S.pc, - format("%0.2f",S.atk/S.row), - S.extraPiece.."["..(int(S.extraRate/S.piece*10000)*.01).."%]", + format("%.2f",S.atk/S.row), + format("%d[%.2f%%]",S.extraPiece,max(100-S.extraRate/S.piece*100,0)), } end, history=function() @@ -168,17 +168,6 @@ local sceneInit={ love.event.quit() end, } -local swapDeck_data={ - {4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1}, - {1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2}, - {3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2}, - {2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4}, - {7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5}, - {3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6}, - {2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7}, - {5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8}, - {7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8}, -}--Block id [ZSLJTOI] ,dir,x,y local gc=love.graphics local swap={ none={1,0,NULL}, @@ -186,37 +175,17 @@ 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,1280,720) + 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,1280,720) + 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,1280,720) - end}, - deck={50,8,function(t) - gc.setColor(1,1,1) - if t>8 then - local t=t<15 and 15 or t - for i=1,51-t do - local bn=swapDeck_data[i][1] - local b=blocks[bn][swapDeck_data[i][2]] - local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4] - for y=1,#b do for x=1,#b[1]do - if b[y][x]then - gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3) - end - end end - end - end - if t<17 then - gc.setColor(1,1,1,1-(t>8 and t-8 or 8-t)*.125) - gc.rectangle("fill",0,0,1280,720) - end + gc.rectangle("fill",0,0,scr.w,scr.h) end}, }--Scene swapping animations local backFunc={ diff --git a/texture.lua b/texture.lua index 18c03d6e..9593a652 100644 --- a/texture.lua +++ b/texture.lua @@ -77,26 +77,8 @@ clearDust:setColors(1,1,1,.5,1,1,1,0) --Dust particles gc.setDefaultFilter("linear","linear") -titleImage=N("/image/mess/title.png") -coloredTitleImage=N("/image/mess/title_colored.png") -dialCircle=N("/image/mess/dialCircle.png") -dialNeedle=N("/image/mess/dialNeedle.png") -badgeIcon=N("/image/mess/badge.png") -spinCenter=N("/image/mess/spinCenter.png") batteryImage=N("/image/mess/power.png") -background1=N("/image/BG/bg1.jpg") -background2=N("/image/BG/bg2.png") -groupCode=N("/image/mess/groupcode.png") -payCode=N("/image/mess/paycode.png") - -miya={ - ch=N("/image/miya/ch.png"), - f1=N("/image/miya/f1.png"), - f2=N("/image/miya/f2.png"), - f3=N("/image/miya/f3.png"), - f4=N("/image/miya/f4.png"), -} drawableText={ question=T(100,"?"), bpm=T(15,"BPM"),kpm=T(15,"KPM"), diff --git a/timer.lua b/timer.lua index 014df1a8..e30026cb 100644 --- a/timer.lua +++ b/timer.lua @@ -1,4 +1,5 @@ local wd=love.window +local gc=love.graphics local kb=love.keyboard local Timer=love.timer.getTime local int,abs,rnd,max,min,sin=math.floor,math.abs,math.random,math.max,math.min,math.sin @@ -42,15 +43,40 @@ function Tmr.load() local m=modes[L[2]] modes[L[2]]=require("modes/"..m[1]) local M=modes[L[2]] - M.saveFileName,M.x,M.y,M.shape,M.size,M.id,M.unlock=m[1],m.x,m.y,m.shape,m.size,m.id,m.unlock - M.records=loadRecord(m[1]) + M.saveFileName,M.id=m[1],m.id + M.x,M.y,M.size,M.shape=m.x,m.y,m.size,m.shape + M.unlock=m.unlock + M.records=loadRecord(m[1])or M.score and{} + -- M.icon=gc.newImage("image/modeIcon/"..m.icon..".png") + -- M.icon=gc.newImage("image/modeIcon/custom.png") L[2]=L[2]+1 if L[2]>L[3]then L[1],L[2],L[3]=5,1,1 end elseif L[1]==5 then --------------------------Loading some other things here? - + local N=gc.newImage + titleImage=N("/image/mess/title.png") + coloredTitleImage=N("/image/mess/title_colored.png") + dialCircle=N("/image/mess/dialCircle.png") + dialNeedle=N("/image/mess/dialNeedle.png") + badgeIcon=N("/image/mess/badge.png") + spinCenter=N("/image/mess/spinCenter.png") + ctrlSpeedLimit=N("/image/mess/ctrlSpeedLimit.png") + speedLimit=N("/image/mess/speedLimit.png") + + background1=N("/image/BG/bg1.png") + background2=N("/image/BG/bg2.png") + groupCode=N("/image/mess/groupcode.png") + payCode=N("/image/mess/paycode.png") + + miya={ + ch=N("/image/miya/ch.png"), + f1=N("/image/miya/f1.png"), + f2=N("/image/miya/f2.png"), + f3=N("/image/miya/f3.png"), + f4=N("/image/miya/f4.png"), + } -------------------------- L[1],L[2],L[3]=0,1,1 SFX("welcome",.2) @@ -74,10 +100,17 @@ function Tmr.mode(dt) local cam=mapCam local F local x,y,k=cam.x,cam.y,cam.k - if kb.isDown("up", "w") then y=y-10*k;F=true end - if kb.isDown("down","s") then y=y+10*k;F=true end - if kb.isDown("left","a") then x=x-10*k;F=true end - if kb.isDown("right","d") then x=x+10*k;F=true end + if kb.isDown("up", "w")then y=y-10*k;F=true end + if kb.isDown("down","s")then y=y+10*k;F=true end + if kb.isDown("left","a")then x=x-10*k;F=true end + if kb.isDown("right","d")then x=x+10*k;F=true end + local js1=joysticks[1] + if js1 then + if js1:isDown("dpup")then y=y-10*k;F=true end + if js1:isDown("dpdown")then y=y+10*k;F=true end + if js1:isDown("dpleft")then x=x-10*k;F=true end + if js1:isDown("dpright")then x=x+10*k;F=true end + end if F or cam.keyCtrl and(x-cam.x1)^2+(y-cam.y1)^2>2.6 then if F then cam.keyCtrl=true @@ -86,12 +119,14 @@ function Tmr.mode(dt) local MM,R=modes,modeRanks for _=1,#MM do if R[_]then + local __ local M=MM[_] local s=M.size - local __ if M.shape==1 then if x>M.x-s and xM.y-s and y7 then s=s-1 end - L=L..char(66+s) + local S="" + local L=preField[y] + for x=1,10,2 do + local H=L[x] + local L=L[x+1] + if H<8 then H=H+1 end + if L<8 then L=L+1 end + S=S..char(H*16+L) end - -- str=str..L.."\n" + str=str..S end - love.system.setClipboardText("Techmino sketchpad:"..str) + love.system.setClipboardText("Techmino sketchpad:"..data.encode("string","base64",data.compress("string","deflate",str))) TEXT(text.copySuccess,350,360,40,"appear",.5) end function pasteBoard() local str=love.system.getClipboardText() - local len=#str - local _ - local p,P=1,10--sum,pStr,pField(r*10+(c-1)) - p=find(str,":") - if p then - p=p+1 - else - p=find(str,"[A-N]") - if not p then - goto E - end - end--int p*//head - ::L:: - _=byte(str,p) - if P==210 then - return - elseif not _ then - if P%10~=0 then - goto E + local fX,fY=1,1--*ptr for Field(r*10+(c-1)) + local _,__ + local p=find(str,":")--ptr* + if p then str=sub(str,p+1)end + str=data.decompress("string","deflate",data.decode("string","base64",str)) + p=1 + ::LOOP:: + _=byte(str,p)--1byte + if not _ then + if fX~=1 then goto ERROR + else goto FINISH + end + end--str end + __=_%16--low4b + _=(_-__)/16--high4b + if _>12 or __>12 then goto ERROR end--illegal blockid + if _<9 then _=_-1 end if __<9 then __=__-1 end + preField[fY][fX]=_;preField[fY][fX+1]=__ + if fX<9 then + fX=fX+2 else - return + if fY==20 then goto FINISH end + fX=1;fY=fY+1 end - end--end check - _=_-66 - if _<-1 or _>12 then p=p+1 - goto L - end--skip illegal char - if _>-2 and _<13 then - if _>7 then _=_+1 end - preField[int(P/10)][P%10+1]=_ - P=P+1 - end - p=p+1 - goto L - ::E:: - TEXT(text.dataCorrupted,350,360,35,"flicker",.5) + goto LOOP + + ::FINISH:: + for y=fY+1,20 do + for x=1,10 do + preField[y][x]=0 + end + end + goto END + ::ERROR:: + TEXT(text.dataCorrupted,350,360,35,"flicker",.5) + ::END:: end function updateStat() @@ -321,7 +328,7 @@ function loadGame(M) end function resetPartGameData() gameResult=false - frame=30 + frame=150-setting.reTime*15 destroyPlayers() curMode.load() texts={} @@ -345,7 +352,7 @@ function resetPartGameData() end function resetGameData() gameResult=false - frame=0 + frame=150-setting.reTime*15 garbageSpeed=1 pauseTime=0--Time paused pauseCount=0--Times paused @@ -403,22 +410,27 @@ function loadRecord(N) setfenv(s,T) T[1]=s() return T[1] - else - return{} end end local function dumpTable(L) local s="{\n" for k,v in next,L do local T + T=type(k) + if T=="number"then k="["..k.."]=" + elseif T=="string"then k=k.."=" + else error("Error data 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) else error("Error data type!") end - s=s.."["..k.."]="..v..",\n" + s=s..k..v..",\n" end + print(s) + print("---") return s.."}" end function saveRecord(N,L) @@ -435,6 +447,35 @@ function delRecord(N) fs.remove(N..".dat") end +function saveUnlock() + local t={} + local RR=modeRanks + for i=1,#RR do + t[i]=RR[i]or"X" + end + t=concat(t,",") + local F=FILE.unlock + F:open("w") + local _=F:write(t) + F:flush() + F:close() + if not _ then + TEXT(text.unlockSavingError..mes,640,480,40,"appear",.4) + end +end +function loadUnlock() + local F=FILE.unlock + F:open("r") + local t=F:read() + F:close() + t=splitS(t,",") + for i=1,#modeRanks do + local v=toN(t[i]) + if not v or v<0 or v>6 or v~=int(v)then v=false end + modeRanks[i]=v + end +end + local statOpy={ "run","game","time", "extraPiece","extraRate", @@ -448,27 +489,17 @@ function loadStat() local F=FILE.data F:open("r") local t=F:read() - t=splitS(t,"\r\n") F:close() + t=splitS(t,"\r\n") for i=1,#t do local p=find(t[i],"=") if p then local t,v=sub(t[i],1,p-1),sub(t[i],p+1) - if t=="rank"then - v=splitS(v,",") - for i=1,#modeRanks do - local v=toN(v[i]) - if not v or v<0 or v>6 or v~=int(v)then v=false end - modeRanks[i]=v - end - else - if t=="gametime"then t="time"end - for i=1,#statOpy do - if t==statOpy[i]then - v=toN(v)if not v or v<0 then v=0 end - stat[t]=v - break - end + for i=1,#statOpy do + if t==statOpy[i]then + v=toN(v)if not v or v<0 then v=0 end + stat[t]=v + break end end end @@ -503,17 +534,19 @@ function loadSetting() local F=FILE.setting F:open("r") local t=F:read() - t=splitS(t,"\r\n") F:close() + t=splitS(t,"\r\n") for i=1,#t do local p=find(t[i],"=") if p then local t,v=sub(t[i],1,p-1),sub(t[i],p+1) - if + if--10档的设置 --声音 t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or --三个触摸设置项 - t=="VKTchW"or t=="VKCurW"or t=="VKAlpha" + t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"or + --重开时间 + t=="reTime" then v=toN(v) if v and v==int(v)and v>=0 and v<=10 then @@ -528,7 +561,7 @@ function loadSetting() --开关设置们 t=="bg"or t=="ghost"or t=="center"or t=="grid"or t=="swap"or - t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or + t=="quickR"or t=="fine"or t=="bgspace"or t=="smo"or t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon" then setting[t]=v=="true" @@ -569,6 +602,7 @@ end local saveOpt={ "das","arr", "sddas","sdarr", + "reTime", "quickR", "swap", "fine", @@ -582,7 +616,7 @@ local saveOpt={ "fullscreen", "bg", - "bgblock", + "bgspace", "lang", "skin", diff --git a/updateLog.lua b/updateLog.lua index 20efdcea..f8c5ce2f 100644 --- a/updateLog.lua +++ b/updateLog.lua @@ -1,20 +1,20 @@ local S=[=[ -Patron(rmb10+): - Fireboos - gggf - Sasoric +"Patron"(rmb10+): + "Fireboos" + "gggf" + "Sasoric" + sfqr T080 - Ykzl - zxc + "Ykzl" + "zxc" + 10元 ?[D*a] Future outlook: New mode system with: rythem mode combo mode - bigbang mode puzzle mode(ttt) square mode - finesse practice mode infinite 1v1 Other: puzzle import/output(ttt) @@ -22,7 +22,6 @@ Future outlook: (powerinfo switch) virtualWidgets like joysticks splashing block - ajustable next count custom block color/direction custom block sequence CC smarter(think of garbage buffer) @@ -31,6 +30,16 @@ Future outlook: auto GUI position in any screen size more FXs & 3d features & animations Encrypt source code(compile to byte code) +0.8.8: + background now is cool space with planets and stars,not boring falling tetrominos! + records with date + adjustable waiting time before start + ajustable maxnext count + new error page and a new voice + tiny change in rotate system(JL pistol-spin) + marked the modes with limited das/arr + an unlock-all easter egg + bugs fixed(some mode error) 0.8.7: better user experience in mode selecting support 2^n G falling speed @@ -200,7 +209,7 @@ Future outlook: bugs fixed 0.7.14: drawing mode in custom game - can adjust virtual keys with mouse + adjustable virtual keys with mouse speed optimized rotate also create shade 0.7.13+: diff --git a/widgetList.lua b/widgetList.lua index c850a36e..d3c0852d 100644 --- a/widgetList.lua +++ b/widgetList.lua @@ -139,19 +139,19 @@ local Widget={ setting=newButton(370,280,200,160,C.lightBlue, 45,function()scene.push()scene.swapTo("setting_game")end, nil,"music"), music= newButton(590,280,200,160,C.lightPurple, 32,function()scene.push()scene.swapTo("music")end, nil,"help"), help= newButton(150,460,200,160,C.lightYellow, 50,function()scene.push()scene.swapTo("help")end, nil,"stat"), - stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"lang"), + stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"quit"), + quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"lang"), lang= newButton(150,610,160,100,C.lightGreen, 45,function() setting.lang=setting.lang%#langName+1 changeLanguage(setting.lang) TEXT(text.lang,370,610,50,"appear",1.6) - end,nil,"quit"), - quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"), + end,nil,"play"), }, mode={ draw= newButton(1100, 440,220,90,C.lightYellow, 40,function()scene.push()scene.swapTo("draw")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), setting=newButton(1100, 540,220,90,C.lightGreen, 40,function()scene.push()scene.swapTo("custom")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), - start= newButton(1100, 640,220,90,C.lightGrey, 40,function()scene.push()loadGame(mapCam.sel)end,function()return not mapCam.sel end), - back= newButton(1205, 50, 130,80, C.white, 40,scene.back), + start= newButton(1040, 655,180,80,C.lightGrey, 40,function()scene.push()loadGame(mapCam.sel)end,function()return not mapCam.sel end), + back= newButton(1200, 655,120,80,C.white, 40,scene.back), --function()scene.push()scene.swapTo("custom")end }, music={ @@ -244,16 +244,18 @@ local Widget={ SFX("blip_1",.4) end end,nil,"sddasD"), - sddasD= newButton(180,340,50,50,C.white,40, function()setting.sddas=(setting.sddas-1)%11 end, nil,"sddasU"), - sddasU= newButton(400,340,50,50,C.white,40, function()setting.sddas=(setting.sddas+1)%11 end, nil,"sdarrD"), - sdarrD= newButton(500,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr-1)%4 end, nil,"sdarrU"), - sdarrU= newButton(720,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr+1)%4 end, nil,"quickR"), - quickR= newSwitch(580,430,35,SETdisp("quickR"), SETrev("quickR"), nil,"swap"), - swap= newSwitch(580,510,20,SETdisp("swap"), SETrev("swap"), nil,"fine"), - fine= newSwitch(580,590,20,SETdisp("fine"), SETrev("fine"), nil,"ctrl"), + sddasD= newButton(180,340,50,50,C.white,40, function()setting.sddas=(setting.sddas-1)%11 end, nil,"sddasU"), + sddasU= newButton(400,340,50,50,C.white,40, function()setting.sddas=(setting.sddas+1)%11 end, nil,"sdarrD"), + sdarrD= newButton(500,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr-1)%4 end, nil,"sdarrU"), + sdarrU= newButton(720,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr+1)%4 end, nil,"reTime"), + reTime= newSlider(350,430,300,10,30,nil, SETdisp("reTime"), SETsto("reTime"), nil,"maxNext"), + maxNext=newSlider(350,510,300,6,30,nil, SETdisp("maxNext"), SETsto("maxNext"), nil,"quickR"), + quickR= newSwitch(1000,430,35, SETdisp("quickR"), SETrev("quickR"), nil,"swap"), + swap= newSwitch(1000,510,19, SETdisp("swap"), SETrev("swap"), nil,"fine"), + fine= newSwitch(1000,590,20, SETdisp("fine"), SETrev("fine"), nil,"ctrl"), ctrl= newButton(1020,230,320,80,C.white,35,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"), touch= newButton(1020,340,320,80,C.white,35,function()scene.push()scene.swapTo("setting_touch")end,nil,"back"), - back= newButton(1160,600,160,160,C.white,50,scene.back,nil,"graphic"), + back= newButton(1160,600,160,160,C.white,50,scene.back, nil,"graphic"), }, setting_graphic={ sound= newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"game"), @@ -273,8 +275,15 @@ local Widget={ love.resize(love.graphics.getWidth(),love.graphics.getHeight()) end end,nil,"bg"), - bg= newSwitch(990,250,35,SETdisp("bg"),SETrev("bg"),nil,"bgblock"), - bgblock=newSwitch(990,330,35,SETdisp("bgblock"),SETrev("bgblock"),nil,"skin"),--if not setting.bgblock then for i=1,16 do FX_BGblock.list[i].v=3*FX_BGblock.list[i].v end end + bg= newSwitch(990,250,35,SETdisp("bg"),SETrev("bg"),nil,"bgspace"), + bgspace=newSwitch(990,330,35,SETdisp("bgspace"),function() + setting.bgspace=not setting.bgspace + if setting.bgspace then + space.new() + else + space.discard() + end + end,nil,"skin"), skin= newButton(810,420,120,60,C.white,35,function() local _=setting.skin%8+1 setting.skin=_