Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98ae0f2762 | ||
|
|
963bc80439 | ||
|
|
4106dc454e | ||
|
|
0ba26aa836 | ||
|
|
a4c775174b | ||
|
|
29c40c34fe | ||
|
|
44cb889b91 | ||
|
|
915d65d2f4 | ||
|
|
8b7c270cf6 | ||
|
|
a3f07f8ce4 | ||
|
|
91d3252685 | ||
|
|
f9d9112651 | ||
|
|
477a1acc61 | ||
|
|
4770366f74 | ||
|
|
1c66b4dce1 | ||
|
|
3a19bb534a | ||
|
|
f39b3cfd4a | ||
|
|
f0410243c4 | ||
|
|
8abc40707a | ||
|
|
f91fe34a12 | ||
|
|
e9bf6c3b58 | ||
|
|
17c660b5a2 | ||
|
|
ed46f73987 | ||
|
|
e1200b5038 | ||
|
|
7f7ea6ac97 | ||
|
|
f70edaac83 | ||
|
|
d932febe89 | ||
|
|
945a63c51d | ||
|
|
da716ea5c5 | ||
|
|
c6f92a3030 | ||
|
|
267e2dc544 | ||
|
|
cb7d3afdfb | ||
|
|
b57e863c28 | ||
|
|
7aed15fd4f | ||
|
|
6d71b26595 | ||
|
|
1df5406cb3 | ||
|
|
a2b762dcbc | ||
|
|
c2d29c3d6a | ||
|
|
da602eb693 |
27
.github/workflows/main.yml
vendored
27
.github/workflows/main.yml
vendored
@@ -146,6 +146,7 @@ jobs:
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [get-info, build-core, auto-test]
|
||||
if: github.event_name != 'pull_request'
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
@@ -176,14 +177,7 @@ jobs:
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
platform: Android
|
||||
dir: ./ColdClear
|
||||
- name: Process ColdClear
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ./libAndroid/armeabi-v7a/
|
||||
mkdir -p ./libAndroid/arm64-v8a/
|
||||
mv ./ColdClear/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a/
|
||||
mv ./ColdClear/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a/
|
||||
dir: ./libAndroid
|
||||
- name: Build Android packages
|
||||
id: build-packages
|
||||
uses: love-actions/love-actions-android@v1
|
||||
@@ -197,7 +191,6 @@ jobs:
|
||||
keystore-store-password: ${{ secrets.ANDROID_KEYSTORE_STOREPASSWORD }}
|
||||
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
|
||||
resource-path: ./.github/build/android/${{ env.BUILD_TYPE }}/res
|
||||
libs-path: ./ColdClear/
|
||||
extra-assets: ./libAndroid/
|
||||
product-name: ${{ steps.process-app-name.outputs.product-name }}
|
||||
version-string: ${{ needs.get-info.outputs.version-string }}
|
||||
@@ -232,8 +225,8 @@ jobs:
|
||||
|
||||
build-ios:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
if: github.event_name != 'pull_request'
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
@@ -352,10 +345,8 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd ./ColdClear
|
||||
mkdir ./libs
|
||||
mv ./x64/libcold_clear.so ./libs
|
||||
mkdir ./shared
|
||||
mv ./x64/CCloader.so ./shared
|
||||
mkdir -p ./lib/lua/5.1
|
||||
mv ./x64/CCloader.so ./lib/lua/5.1
|
||||
- name: Build Linux packages
|
||||
id: build-packages
|
||||
uses: love-actions/love-actions-linux@v1
|
||||
@@ -364,8 +355,7 @@ jobs:
|
||||
executable-name: app
|
||||
icon-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png
|
||||
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
|
||||
libs-path: ./ColdClear/libs/
|
||||
shared-path: ./ColdClear/shared/
|
||||
lib-path: ./ColdClear/lib
|
||||
product-name: ${{ steps.process-app-name.outputs.product-name }}
|
||||
output-folder: ${{ env.OUTPUT_FOLDER }}
|
||||
- name: Upload AppImage artifact
|
||||
@@ -397,8 +387,8 @@ jobs:
|
||||
|
||||
build-macos-appstore:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
if: github.event_name != 'pull_request'
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
@@ -489,8 +479,8 @@ jobs:
|
||||
|
||||
build-macos-portable:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
if: github.event_name != 'pull_request'
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
@@ -721,6 +711,7 @@ jobs:
|
||||
if "${{ needs.build-windows.result }}" == "success":
|
||||
f.write("- Windows packages: [WeTransfer](${{ needs.build-windows.outputs.download-url }})\n")
|
||||
- name: Send Discord message
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: Sniddl/discord-commits@v1.5
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
|
||||
Submodule Zframework updated: 24864eda21...c64bfe444b
391
main.lua
391
main.lua
@@ -60,7 +60,7 @@ BGM.setMaxSources(5)
|
||||
VOC.setDiversion(.62)
|
||||
|
||||
WIDGET.setOnChange(function()
|
||||
if SCN.cur~='custom_field' then
|
||||
if SCN.cur~='net_game' and SCN.cur~='custom_field' then
|
||||
local colorList=THEME.getThemeColor()
|
||||
if colorList then
|
||||
for _,W in next,SCN.scenes[SCN.cur].widgetList do
|
||||
@@ -72,8 +72,6 @@ WIDGET.setOnChange(function()
|
||||
end
|
||||
end)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Create shortcuts
|
||||
setFont=FONT.set
|
||||
getFont=FONT.get
|
||||
@@ -98,10 +96,6 @@ for _,v in next,{'conf','record','replay','cache','lib'} do
|
||||
end
|
||||
end
|
||||
|
||||
CHAR=require'parts.char'
|
||||
require'parts.gameTables'
|
||||
require'parts.gameFuncs'
|
||||
|
||||
-- Load shader files from SOURCE ONLY
|
||||
SHADER={}
|
||||
for _,v in next,fs.getDirectoryItems('parts/shaders') do
|
||||
@@ -111,6 +105,11 @@ for _,v in next,fs.getDirectoryItems('parts/shaders') do
|
||||
end
|
||||
end
|
||||
|
||||
-- Load modules
|
||||
CHAR=require'parts.char'
|
||||
require'parts.gameTables'
|
||||
require'parts.gameFuncs'
|
||||
|
||||
THEME= require'parts.theme'
|
||||
LINE= require'parts.line'
|
||||
DATA= require'parts.data'
|
||||
@@ -121,7 +120,7 @@ USERS= require'parts.users'
|
||||
NET= require'parts.net'
|
||||
VK= require'parts.virtualKey'
|
||||
BOT= require'parts.bot'
|
||||
RSlist= require'parts.RSlist'DSCP=RSlist.TRS.centerPos
|
||||
RSlist= require'parts.RSlist'; DSCP=RSlist.TRS.centerPos
|
||||
PLY= require'parts.player'
|
||||
NETPLY= require'parts.netPlayer'
|
||||
MODES= require'parts.modes'
|
||||
@@ -132,9 +131,28 @@ setmetatable(TEXTURE,{__index=function(self,k)
|
||||
return self[k]
|
||||
end})
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
-- Load mode files
|
||||
for i=1,#MODES do
|
||||
local m=MODES[i]-- Mode template
|
||||
if FILE.isSafe('parts/modes/'..m.name) then
|
||||
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
|
||||
MODES[m.name],MODES[i]=MODES[i]
|
||||
end
|
||||
end
|
||||
for _,v in next,fs.getDirectoryItems('parts/modes') do
|
||||
if FILE.isSafe('parts/modes/'..v) and not MODES[v:sub(1,-5)] then
|
||||
local M={name=v:sub(1,-5)}
|
||||
local modeData=require('parts.modes.'..M.name)
|
||||
if modeData.env then
|
||||
TABLE.complete(modeData,M)
|
||||
MODES[M.name]=M
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Init Zframework
|
||||
table.insert(_LOADTIMELIST_,("Load Modules: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Initialize Zframework
|
||||
do-- Z.setCursor
|
||||
local normImg=GC.DO{16,16,
|
||||
{'fCirc',8,8,4},
|
||||
@@ -239,45 +257,6 @@ Z.setOnQuit(function()
|
||||
destroyPlayers()
|
||||
end)
|
||||
|
||||
-- Load settings and statistics
|
||||
if
|
||||
not (
|
||||
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip') or loadFile('conf/user', '-luaon -canSkip') or{},USER) and
|
||||
pcall(TABLE.cover, loadFile('conf/unlock', '-json -canSkip') or loadFile('conf/unlock', '-luaon -canSkip') or{},RANKS) and
|
||||
pcall(TABLE.update,loadFile('conf/settings', '-json -canSkip') or loadFile('conf/settings', '-luaon -canSkip') or{},SETTING) and
|
||||
pcall(TABLE.coverR,loadFile('conf/data', '-json -canSkip') or loadFile('conf/data', '-luaon -canSkip') or{},STAT) and
|
||||
pcall(TABLE.cover, loadFile('conf/key', '-json -canSkip') or loadFile('conf/key', '-luaon -canSkip') or{},KEY_MAP) and
|
||||
pcall(TABLE.cover, loadFile('conf/virtualkey','-json -canSkip') or loadFile('conf/virtualkey','-luaon -canSkip') or{},VK_ORG)
|
||||
)
|
||||
then
|
||||
MES.new('error',"An error occured during loading, and some data was lost.")
|
||||
end
|
||||
|
||||
-- Initialize fields, sequence, missions, gameEnv for cutsom game
|
||||
local fieldData=loadFile('conf/customBoards','-string -canSkip')
|
||||
if fieldData then
|
||||
fieldData=STRING.split(fieldData,"!")
|
||||
for i=1,#fieldData do
|
||||
DATA.pasteBoard(fieldData[i],i)
|
||||
end
|
||||
else
|
||||
FIELD[1]=DATA.newBoard()
|
||||
end
|
||||
local sequenceData=loadFile('conf/customSequence','-string -canSkip')
|
||||
if sequenceData then
|
||||
DATA.pasteSequence(sequenceData)
|
||||
end
|
||||
local missionData=loadFile('conf/customMissions','-string -canSkip')
|
||||
if missionData then
|
||||
DATA.pasteMission(missionData)
|
||||
end
|
||||
local customData=loadFile('conf/customEnv','-canSkip')
|
||||
if customData and customData['version']==VERSION.code then
|
||||
TABLE.complete(customData,CUSTOMENV)
|
||||
end
|
||||
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
|
||||
|
||||
|
||||
-- Initialize image libs
|
||||
IMG.init{
|
||||
lock='media/image/mess/lock.png',
|
||||
@@ -299,7 +278,6 @@ IMG.init{
|
||||
xiaoyaCH='media/image/characters/xiaoya.png',
|
||||
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
|
||||
mikuCH='media/image/characters/miku.png',
|
||||
rinCH='media/image/characters/rin.png',
|
||||
z={
|
||||
character='media/image/characters/z_character.png',
|
||||
screen1='media/image/characters/z_screen1.png',
|
||||
@@ -386,6 +364,137 @@ VOC.init{
|
||||
'welcome',
|
||||
}
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Initialize Modules: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Load settings and statistics
|
||||
if
|
||||
not (
|
||||
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip') or loadFile('conf/user', '-luaon -canSkip') or{},USER) and
|
||||
pcall(TABLE.cover, loadFile('conf/unlock', '-json -canSkip') or loadFile('conf/unlock', '-luaon -canSkip') or{},RANKS) and
|
||||
pcall(TABLE.update,loadFile('conf/settings', '-json -canSkip') or loadFile('conf/settings', '-luaon -canSkip') or{},SETTING) and
|
||||
pcall(TABLE.coverR,loadFile('conf/data', '-json -canSkip') or loadFile('conf/data', '-luaon -canSkip') or{},STAT) and
|
||||
pcall(TABLE.cover, loadFile('conf/key', '-json -canSkip') or loadFile('conf/key', '-luaon -canSkip') or{},KEY_MAP) and
|
||||
pcall(TABLE.cover, loadFile('conf/virtualkey','-json -canSkip') or loadFile('conf/virtualkey','-luaon -canSkip') or{},VK_ORG)
|
||||
)
|
||||
then
|
||||
MES.new('error',"An error occured during loading, and some data was lost.")
|
||||
end
|
||||
|
||||
-- Initialize fields, sequence, missions, gameEnv for cutsom game
|
||||
local fieldData=loadFile('conf/customBoards','-string -canSkip')
|
||||
if fieldData then
|
||||
fieldData=STRING.split(fieldData,"!")
|
||||
for i=1,#fieldData do
|
||||
DATA.pasteBoard(fieldData[i],i)
|
||||
end
|
||||
else
|
||||
FIELD[1]=DATA.newBoard()
|
||||
end
|
||||
local sequenceData=loadFile('conf/customSequence','-string -canSkip')
|
||||
if sequenceData then
|
||||
DATA.pasteSequence(sequenceData)
|
||||
end
|
||||
local missionData=loadFile('conf/customMissions','-string -canSkip')
|
||||
if missionData then
|
||||
DATA.pasteMission(missionData)
|
||||
end
|
||||
local customData=loadFile('conf/customEnv','-canSkip')
|
||||
if customData and customData['version']==VERSION.code then
|
||||
TABLE.complete(customData,CUSTOMENV)
|
||||
end
|
||||
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
|
||||
|
||||
-- Update data
|
||||
do
|
||||
if type(STAT.version)~='number' then
|
||||
STAT.version=0
|
||||
end
|
||||
if STAT.version<1700 and SETTING.dascut<5 then
|
||||
SETTING.dascut=SETTING.dascut+1
|
||||
end
|
||||
|
||||
if RANKS.stack_e then
|
||||
RANKS.stack_e=nil; fs.remove('record/stack_e.rec')
|
||||
RANKS.stack_h=nil; fs.remove('record/stack_h.rec')
|
||||
RANKS.stack_u=nil; fs.remove('record/stack_u.rec')
|
||||
end
|
||||
if RANKS.stack_20l then
|
||||
RANKS.stack_20l=nil; fs.remove('record/stack_20l.rec')
|
||||
RANKS.stack_40l=nil; fs.remove('record/stack_40l.rec')
|
||||
RANKS.stack_100l=nil; fs.remove('record/stack_100l.rec')
|
||||
end
|
||||
if RANKS.rhythm_e then
|
||||
RANKS.rhythm_e=nil; fs.remove('record/rhythm_e.rec')
|
||||
RANKS.rhythm_h=nil; fs.remove('record/rhythm_h.rec')
|
||||
RANKS.rhythm_u=nil; fs.remove('record/rhythm_u.rec')
|
||||
end
|
||||
if RANKS.bigbang then fs.remove('record/bigbang.rec') end
|
||||
if RANKS.clearRush then fs.remove('record/clearRush.rec') end
|
||||
|
||||
if STAT.version~=VERSION.code then
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k] then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
STAT.version=VERSION.code
|
||||
end
|
||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
|
||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
|
||||
if not RSlist[SETTING.RS] then SETTING.RS='TRS' end
|
||||
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
|
||||
if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
|
||||
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul) then SETTING.frameMul=100 end
|
||||
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
|
||||
if type(SETTING.bg)~='string' then SETTING.bg='on' end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
|
||||
if SETTING.vocPack=='rin' then SETTING.vocPack='miku' end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l end
|
||||
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u end
|
||||
for _,v in next,VK_ORG do v.color=nil end
|
||||
for name,rank in next,RANKS do
|
||||
if type(name)=='number' or type(rank)~='number' then
|
||||
RANKS[name]=nil
|
||||
else
|
||||
local M=MODES[name]
|
||||
if M and M.unlock and rank>0 then
|
||||
for _,unlockName in next,M.unlock do
|
||||
if not RANKS[unlockName] then
|
||||
RANKS[unlockName]=0
|
||||
end
|
||||
end
|
||||
end
|
||||
if not (M and M.x) then
|
||||
RANKS[name]=nil
|
||||
end
|
||||
end
|
||||
end
|
||||
if not MODES[STAT.lastPlay] then
|
||||
STAT.lastPlay='sprint_10l'
|
||||
end
|
||||
fs.remove('conf/account')
|
||||
|
||||
saveStats()
|
||||
saveProgress()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
-- Initialize language lib
|
||||
LANG.init('zh',
|
||||
{
|
||||
@@ -421,8 +530,6 @@ LANG.init('zh',
|
||||
end)()
|
||||
)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Initialize Parts: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Load background files from SOURCE ONLY
|
||||
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
||||
if FILE.isSafe('parts/backgrounds/'..v) and v:sub(-3)=='lua' then
|
||||
@@ -431,6 +538,7 @@ for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
||||
end
|
||||
end
|
||||
BG.remList('none')BG.remList('gray')BG.remList('custom')
|
||||
|
||||
-- Load scene files from SOURCE ONLY
|
||||
for _,v in next,fs.getDirectoryItems('parts/scenes') do
|
||||
if FILE.isSafe('parts/scenes/'..v) then
|
||||
@@ -439,179 +547,9 @@ for _,v in next,fs.getDirectoryItems('parts/scenes') do
|
||||
LANG.addScene(sceneName)
|
||||
end
|
||||
end
|
||||
-- Load mode files
|
||||
for i=1,#MODES do
|
||||
local m=MODES[i]-- Mode template
|
||||
if FILE.isSafe('parts/modes/'..m.name) then
|
||||
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
|
||||
MODES[m.name],MODES[i]=MODES[i]
|
||||
end
|
||||
end
|
||||
for _,v in next,fs.getDirectoryItems('parts/modes') do
|
||||
if FILE.isSafe('parts/modes/'..v) and not MODES[v:sub(1,-5)] then
|
||||
local M={name=v:sub(1,-5)}
|
||||
local modeData=require('parts.modes.'..M.name)
|
||||
if modeData.env then
|
||||
TABLE.complete(modeData,M)
|
||||
MODES[M.name]=M
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Update data
|
||||
do
|
||||
local needSave
|
||||
|
||||
if not fs.getInfo('conf/data') then
|
||||
needSave=true
|
||||
end
|
||||
if type(STAT.version)~='number' then
|
||||
STAT.version=0
|
||||
needSave=true
|
||||
end
|
||||
if STAT.version<1500 then
|
||||
FILE.clear_s('')
|
||||
end
|
||||
if STAT.version<1505 then
|
||||
fs.remove('record/bigbang.rec')
|
||||
fs.remove('conf/replay')
|
||||
end
|
||||
if STAT.version==1506 then
|
||||
local temp1,temp2
|
||||
if fs.getInfo('record/master_l.rec') then
|
||||
temp1=fs.read('record/master_l.rec')
|
||||
end
|
||||
if fs.getInfo('record/master_u.rec') then
|
||||
temp2=fs.read('record/master_u.rec')
|
||||
end
|
||||
if temp1 then
|
||||
fs.write('record/master_u.rec',temp1)
|
||||
end
|
||||
if temp2 then
|
||||
fs.write('record/master_l.rec',temp2)
|
||||
end
|
||||
RANKS.master_l,RANKS.master_u=RANKS.master_u,RANKS.master_l
|
||||
if RANKS.tsd_u then
|
||||
RANKS.tsd_u=0
|
||||
end
|
||||
end
|
||||
if STAT.version==1601 then
|
||||
RANKS.round_e=nil
|
||||
RANKS.round_n=nil
|
||||
RANKS.round_h=nil
|
||||
RANKS.round_l=nil
|
||||
RANKS.round_u=nil
|
||||
fs.remove('record/round_e.rec')
|
||||
fs.remove('record/round_n.rec')
|
||||
fs.remove('record/round_h.rec')
|
||||
fs.remove('record/round_l.rec')
|
||||
fs.remove('record/round_u.rec')
|
||||
end
|
||||
if STAT.version<1700 and SETTING.dascut<5 then
|
||||
SETTING.dascut=SETTING.dascut+1
|
||||
needSave=true
|
||||
end
|
||||
if RANKS.stack_e then
|
||||
RANKS.stack_e=nil
|
||||
RANKS.stack_h=nil
|
||||
RANKS.stack_u=nil
|
||||
fs.remove('record/stack_e.rec')
|
||||
fs.remove('record/stack_h.rec')
|
||||
fs.remove('record/stack_u.rec')
|
||||
end
|
||||
if RANKS.stack_20l then
|
||||
RANKS.stack_20l=nil
|
||||
RANKS.stack_40l=nil
|
||||
RANKS.stack_100l=nil
|
||||
fs.remove('record/stack_20l.rec')
|
||||
fs.remove('record/stack_40l.rec')
|
||||
fs.remove('record/stack_100l.rec')
|
||||
end
|
||||
if RANKS.rhythm_e then
|
||||
RANKS.rhythm_e=nil
|
||||
RANKS.rhythm_h=nil
|
||||
RANKS.rhythm_u=nil
|
||||
fs.remove('record/rhythm_e.rec')
|
||||
fs.remove('record/rhythm_h.rec')
|
||||
fs.remove('record/rhythm_u.rec')
|
||||
end
|
||||
if RANKS.bigbang or RANKS.clearRush then
|
||||
fs.remove('record/clearRush.rec')
|
||||
fs.remove('record/bigbang.rec')
|
||||
end
|
||||
if STAT.version~=VERSION.code then
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k] then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
STAT.version=VERSION.code
|
||||
needSave=true
|
||||
end
|
||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
|
||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
|
||||
if not RSlist[SETTING.RS] then SETTING.RS='TRS' end
|
||||
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
|
||||
if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
|
||||
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul) then SETTING.frameMul=100 end
|
||||
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
|
||||
if type(SETTING.bg)~='string' then SETTING.bg='on' end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
|
||||
if SETTING.vocPack=='rin' then SETTING.vocPack='miku' end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l needSave=true end
|
||||
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u needSave=true end
|
||||
for _,v in next,VK_ORG do v.color=nil end
|
||||
for name,rank in next,RANKS do
|
||||
if type(name)=='number' or type(rank)~='number' then
|
||||
RANKS[name]=nil
|
||||
needSave=true
|
||||
else
|
||||
local M=MODES[name]
|
||||
if M and M.unlock and rank>0 then
|
||||
for _,unlockName in next,M.unlock do
|
||||
if not RANKS[unlockName] then
|
||||
RANKS[unlockName]=0
|
||||
needSave=true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not (M and M.x) then
|
||||
RANKS[name]=nil
|
||||
needSave=true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not MODES[STAT.lastPlay] then
|
||||
STAT.lastPlay='sprint_10l'
|
||||
needSave=true
|
||||
end
|
||||
|
||||
if needSave then
|
||||
saveStats()
|
||||
saveProgress()
|
||||
saveSettings()
|
||||
love.event.quit('restart')
|
||||
end
|
||||
end
|
||||
|
||||
-- First start
|
||||
FIRSTLAUNCH=STAT.run==0
|
||||
if FIRSTLAUNCH and MOBILE then
|
||||
@@ -669,7 +607,11 @@ for _,fileName in next,fs.getDirectoryItems('replay') do
|
||||
end
|
||||
table.sort(REPLAY,function(a,b) return a.fileName>b.fileName end)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Initialize Data: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
|
||||
HTTP.setHost("cafuuchino1.3322.org:10026")
|
||||
HTTP.setThreadCount(1)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Resources: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end
|
||||
|
||||
@@ -706,6 +648,3 @@ if TABLE.find(arg,'-- test') then
|
||||
love.event.quit(1)
|
||||
end)
|
||||
end
|
||||
WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
|
||||
HTTP.setHost("cafuuchino1.3322.org:10026")
|
||||
HTTP.setThreadCount(1)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 117 KiB |
@@ -526,14 +526,14 @@ do
|
||||
false,-- T
|
||||
noKickSet,-- O
|
||||
{
|
||||
[01]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
|
||||
[10]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
|
||||
[01]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
|
||||
[10]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
|
||||
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
||||
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
||||
[12]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
||||
[21]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
||||
[23]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
|
||||
[32]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
|
||||
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
||||
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
||||
[32]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
|
||||
[23]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
|
||||
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
||||
[20]={'+0+0','+1+0','-1+0','+0+1','+0-1'},
|
||||
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
GC.mStr(("%.1f"):format(P.stat.atk),63,190)
|
||||
GC.mStr(("%d"):format(P.stat.atk),63,190)
|
||||
GC.mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
|
||||
mText(TEXTOBJ.atk,63,243)
|
||||
mText(TEXTOBJ.eff,63,363)
|
||||
|
||||
@@ -23,6 +23,7 @@ return {
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath-bonus
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,6 +23,7 @@ return {
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath-bonus
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -51,7 +51,7 @@ do-- function tryDelete()
|
||||
end
|
||||
end
|
||||
do-- function loadFile(name,args), function saveFile(data,name,args)
|
||||
local t=setmetatable({},{__index=function() return"'$1' loading failed: $2" end})
|
||||
local t=setmetatable({},{__index=function() return "'$1' loading failed: $2" end})
|
||||
function loadFile(name,args)
|
||||
local text=text or t
|
||||
if not args then args='' end
|
||||
|
||||
@@ -23,8 +23,8 @@ RANK_COLORS={
|
||||
GROUP_COLORS={
|
||||
[0]=COLOR.Z,
|
||||
[1]={STRING.hexColor'e57373'},
|
||||
[2]={STRING.hexColor'aed581'},
|
||||
[3]={STRING.hexColor'42a5f5'},
|
||||
[2]={STRING.hexColor"4caf50"},
|
||||
[3]={STRING.hexColor'5c6bc0'},
|
||||
[4]={STRING.hexColor'ffe082'},
|
||||
[5]={STRING.hexColor'ba68c8'},
|
||||
[6]={STRING.hexColor'80deea'},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -141,7 +141,6 @@ return {
|
||||
invalidCode="Invalid code",
|
||||
invalidEmail="Invalid email",
|
||||
playerNotFound="Player not found",
|
||||
noPassword="No password",
|
||||
invalidEmailPass="Invalid email or password",
|
||||
emailExists="Email exists",
|
||||
emailSendError="Email send error",
|
||||
@@ -186,6 +185,7 @@ return {
|
||||
started="Playing",
|
||||
joinRoom="$1 has entered the room.",
|
||||
leaveRoom="$1 has left the room.",
|
||||
roomRemoved="Room was removed",
|
||||
ready="Ready",
|
||||
spectating="Spectating",
|
||||
|
||||
|
||||
@@ -107,67 +107,66 @@ return {
|
||||
|
||||
-- Server's warn/error messages
|
||||
Techrater={
|
||||
-- internalError="Internal error",
|
||||
-- databaseError="Database error",
|
||||
-- invalidFormat="Invalid format",
|
||||
-- invalidArguments="Invalid arguments",
|
||||
-- tooFrequent="Too frequent",
|
||||
-- notAvailable="Not available",
|
||||
-- noPermission="No permission",
|
||||
-- roomNotFound="Room not found",
|
||||
internalError="Internal error",
|
||||
databaseError="Database error",
|
||||
invalidFormat="Formato inválido",
|
||||
invalidArguments="Argumentos inválidos",
|
||||
tooFrequent="Exceso de requests",
|
||||
notAvailable="No disponible",
|
||||
noPermission="No hay permisos suficientes",
|
||||
roomNotFound="Sala no encontrada",
|
||||
|
||||
-- Controllers
|
||||
WebSocket={
|
||||
-- invalidConnection="Invalid connection",
|
||||
-- invalidAction="Invalid action",
|
||||
-- playerNotFound="Player not found",
|
||||
-- connectionFailed="Connection failed",
|
||||
invalidConnection="Conexión inválida",
|
||||
invalidAction="Acción inválida",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
connectionFailed="Error de conexión",
|
||||
},
|
||||
-- Filters
|
||||
CheckPermission={
|
||||
-- playerNotFound="Player not found",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
},
|
||||
-- Plugins
|
||||
ConnectionManager={
|
||||
-- playerInvalid="Player invalid",
|
||||
-- playerNotFound="Player not found",
|
||||
-- connectionReplaced="Connection replaced",
|
||||
playerInvalid="Jugador inválido",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
connectionReplaced="Conexión reiniciada",
|
||||
},
|
||||
NoticeManager={
|
||||
-- noticeNotFound="Notice not found",
|
||||
noticeNotFound="Aviso no encontrado",
|
||||
},
|
||||
PlayerManager={
|
||||
-- invalidCode="Invalid code",
|
||||
-- invalidEmail="Invalid email",
|
||||
-- playerNotFound="Player not found",
|
||||
-- noPassword="No password",
|
||||
-- invalidEmailPass="Invalid email or password",
|
||||
-- emailExists="Email exists",
|
||||
-- emailSendError="Email send error",
|
||||
invalidCode="Código incorrecto",
|
||||
invalidEmail="Correo inválido",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
invalidEmailPass="Correo o contraseña incorrecta",
|
||||
emailExists="Correo ya existente",
|
||||
emailSendError="Error al enviar solicitud",
|
||||
},
|
||||
-- Strategies
|
||||
PlayerRole={
|
||||
-- invalidRole="Invalid role",
|
||||
-- invalidTarget="Invalid target",
|
||||
invalidRole="Rol inválido",
|
||||
invalidTarget="Objetivo inválido",
|
||||
},
|
||||
PlayerType={
|
||||
-- invalidType="Invalid type",
|
||||
-- roomFull="Room full",
|
||||
invalidType="Clase inválida",
|
||||
roomFull="Esta sala está llena.",
|
||||
},
|
||||
RoomJoin={
|
||||
-- wrongPassword="Wrong password",
|
||||
wrongPassword="Contraseña incorrecta",
|
||||
},
|
||||
},
|
||||
|
||||
-- tooFrequent="Request too frequently",
|
||||
-- roomPasswordChanged="Room password changed",
|
||||
tooFrequent="Requests demasiado frecuentes",
|
||||
roomPasswordChanged="Contraseña de sala cambiada",
|
||||
oldVersion="¡Está disponible la nueva versión $1!",
|
||||
versionNotMatch="¡Las versiones no coinciden!",
|
||||
notFinished="Próximamente",
|
||||
|
||||
noUsername="Por favor ingresa un nombre de usuario",
|
||||
wrongEmail="Correo electrónico inválido",
|
||||
-- wrongCode="Invalid verification code",
|
||||
wrongCode="Código de Verif. incorrecto",
|
||||
noPassword="Por favor ingresa la contraseña",
|
||||
diffPassword="Las contraseñas no coinciden",
|
||||
checkEmail="Petición de registro enviada con éxito",
|
||||
@@ -175,16 +174,17 @@ return {
|
||||
wsFailed="WebSocket conexión fallida: $1",
|
||||
wsClose="WebSocket cerrado: $1",
|
||||
netTimeout="Tiempo de conexión agotado",
|
||||
-- serverDown="Oops! Server is down",
|
||||
-- requestFailed="Request failed",
|
||||
serverDown="Server caído, F",
|
||||
requestFailed="Error de Request",
|
||||
|
||||
onlinePlayerCount="En línea: $1",
|
||||
createRoomSuccessed="¡Sala creada con éxito!",
|
||||
-- playerKicked="$1 removed $2 from room",
|
||||
-- becomeHost="$1 become host",
|
||||
playerKicked="$2 quitado de la sala por $1",
|
||||
becomeHost="$1 ahora es el host",
|
||||
started="En juego",
|
||||
joinRoom="$1 entró a la sala.",
|
||||
leaveRoom="$1 salió de la sala.",
|
||||
roomRemoved="Sala removida",
|
||||
ready="LISTO",
|
||||
spectating="Espectando",
|
||||
|
||||
@@ -414,7 +414,7 @@ return {
|
||||
league="Liga Tech",
|
||||
ffa="FFA",
|
||||
rooms="Salas",
|
||||
-- resetPW="Reset password",
|
||||
resetPW="Restabl. Contraseña",
|
||||
logout="Desconec.",
|
||||
},
|
||||
net_league={
|
||||
@@ -735,7 +735,7 @@ return {
|
||||
},
|
||||
login_pw={
|
||||
title="Entrar",
|
||||
-- login_mail="Login with E-mail/Sign Up",
|
||||
login_mail="Registrarse/Pedir código",
|
||||
email="Correo Elec.",
|
||||
password="Contraseña",
|
||||
showEmail="Mostrar Correo",
|
||||
@@ -743,19 +743,19 @@ return {
|
||||
},
|
||||
login_mail={
|
||||
title="Entrar/Registrarse",
|
||||
-- login_pw="Password Sign In",
|
||||
login_pw="Ingr. con Contraseña",
|
||||
email="Correo Elec.",
|
||||
-- send="Send code",
|
||||
-- code="Verification Code",
|
||||
-- verify="Verify",
|
||||
send="Enviar código",
|
||||
code="Código de Verif.",
|
||||
verify="Verificar",
|
||||
},
|
||||
reset_password={
|
||||
-- title="Reset Password",
|
||||
-- send="Send code",
|
||||
-- code="Verification Code",
|
||||
title="Restablecer Contraseña",
|
||||
send="Enviar código",
|
||||
code="Código de Verif.",
|
||||
password="Contraseña",
|
||||
password2="Repetir Contr.",
|
||||
-- setPW="Set Password",
|
||||
setPW="Establecer",
|
||||
},
|
||||
account={
|
||||
title="Cuenta",
|
||||
@@ -829,7 +829,7 @@ return {
|
||||
['dig_eff_40l']= {"Dig", "Efic. 40L", "¡Limpia 40 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
['dig_eff_100l']= {"Dig", "Efic. 100L", "¡Limpia 100 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
['dig_eff_400l']= {"Dig", "Efic. 400L", "¡Limpia 400 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
--['dig_quad_10l']= {"Dig", "TECHRASH 10L", "Dig 10 garbage lines using only techrash!"},
|
||||
['dig_quad_10l']= {"Dig", "TECHRASH 10L", "¡Limpia 10 líneas de queso sólo con Tecrashes!"},
|
||||
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||
['drought_l']= {"Sequía+", "100L", "Qué es esto..."},
|
||||
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
||||
@@ -921,5 +921,5 @@ return {
|
||||
['custom_clear']= {"Personalizado", "Normal"},
|
||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||
},
|
||||
-- pumpkin="I'm a pumpkin",
|
||||
pumpkin="Todos alaben al rey Calabaza",
|
||||
}
|
||||
|
||||
@@ -131,7 +131,6 @@ return {
|
||||
-- invalidCode="Invalid code",
|
||||
-- invalidEmail="Invalid email",
|
||||
-- playerNotFound="Player not found",
|
||||
-- noPassword="No password",
|
||||
-- invalidEmailPass="Invalid email or password",
|
||||
-- emailExists="Email exists",
|
||||
-- emailSendError="Email send error",
|
||||
@@ -177,13 +176,12 @@ return {
|
||||
-- started="Playing",
|
||||
joinRoom="$1 a rejoint le salon.",
|
||||
leaveRoom="$1 a quitté le salon.",
|
||||
-- roomRemoved="Room was removed",
|
||||
-- ready="READY",
|
||||
-- connStream="CONNECTING",
|
||||
-- waitStream="WAITING",
|
||||
-- spectating="Spectating",
|
||||
|
||||
|
||||
|
||||
|
||||
-- keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
||||
-- customBGhelp="Drop image file here to apply custom background",
|
||||
-- customBGloadFailed="Unsupport image format for custom background",
|
||||
|
||||
@@ -142,7 +142,6 @@ return {
|
||||
-- invalidCode="Invalid code",
|
||||
-- invalidEmail="Invalid email",
|
||||
-- playerNotFound="Player not found",
|
||||
-- noPassword="No password",
|
||||
-- invalidEmailPass="Invalid email or password",
|
||||
-- emailExists="Email exists",
|
||||
-- emailSendError="Email send error",
|
||||
@@ -187,6 +186,7 @@ return {
|
||||
started="Bermain",
|
||||
joinRoom="$1 telah memasuki ruangan.",
|
||||
leaveRoom="$1 telah keluar dari ruangan.",
|
||||
-- roomRemoved="Room was removed",
|
||||
ready="Siap",
|
||||
spectating="Menonton",
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ return {
|
||||
missionFailed="失敗…",
|
||||
|
||||
speedLV="レベル",
|
||||
piece="ミノ数",line="ライン数",atk="火力",eff="効率",
|
||||
piece="ミノ数",line="line数",atk="火力",eff="効率",
|
||||
rpm="RPM",tsd="TSD",
|
||||
grade="Grade",techrash="Techrash",
|
||||
wave="Wave",nextWave="Next",
|
||||
@@ -142,7 +142,6 @@ return {
|
||||
invalidCode="無効なコード",
|
||||
invalidEmail="無効なEメールアドレス",
|
||||
playerNotFound="プレイヤーが見つかりませんでした",
|
||||
noPassword="パスワードがありません",
|
||||
invalidEmailPass="Eメールアドレスもしくはパスワードが違います",
|
||||
emailExists="Eメールアドレスは存在します",
|
||||
emailSendError="送信できませんでした",
|
||||
@@ -161,7 +160,7 @@ return {
|
||||
},
|
||||
},
|
||||
|
||||
tooFrequent="リクエストの頻度が高すぎます",
|
||||
tooFrequent="リクエストが多すぎます",
|
||||
roomPasswordChanged="部屋のパスワードを変更しました",
|
||||
oldVersion="バージョン$1のダウンロードが可能になりました",
|
||||
versionNotMatch="バージョンが一致しません",
|
||||
@@ -177,15 +176,17 @@ return {
|
||||
wsFailed="ウェブソケットとの通信に失敗しました: $1",
|
||||
wsClose="ウェブソケットとの通信を終了: $1",
|
||||
netTimeout="接続がタイムアウトしました",
|
||||
serverDown="うわ! サーバーが落ちました",
|
||||
serverDown="うわ! サーバーが落ちています...",
|
||||
requestFailed="リクエスト失敗",
|
||||
|
||||
onlinePlayerCount="オンライン人数: $1",
|
||||
createRoomSuccessed="部屋を建てました",
|
||||
playerKicked="$1 は、$2 を部屋から追放しました",
|
||||
becomeHost="$1 がホストになりました",
|
||||
started="プレイ中",
|
||||
joinRoom="$1 が入室しました",
|
||||
leaveRoom="$1 が退出しました",
|
||||
roomRemoved="部屋が撤去されました",
|
||||
ready="準備OK",
|
||||
spectating="観戦中",
|
||||
|
||||
@@ -195,7 +196,7 @@ return {
|
||||
customBGhelp="カスタム背景にする画像ファイルをドロップ",
|
||||
customBGloadFailed="サポートされていないフォーマットのファイルです",
|
||||
|
||||
errorMsg="問題が発生! ゲームを再起動してください、できるならエラーログを開発者に送ってください",
|
||||
errorMsg="問題が発生! ゲームを再起動し、エラーログを開発者に送ってください",
|
||||
tryAnotherBuild="[Invalid UTF-8]使用しているOSがMicrosoft WindowsであればTechmino-win32かTechmino-win64をダウンロードしてください! (現在使用しているソフトは違うバージョンです)",
|
||||
|
||||
modInstruction="Modを選択してください!\nModはゲームの中身を変えます\nしかしゲームが破損することもあります\nModを使用した場合スコアは保存されません",
|
||||
@@ -206,7 +207,7 @@ return {
|
||||
infHold="InfiniHold\nHOLDできる回数を無限にします",
|
||||
hideBlock="Hide Current Piece:\n現在出現しているピースを隠します",
|
||||
hideGhost="No Ghost\nゴーストを消します",
|
||||
hidden="Hide Locked Pieces.\n設置されたピースが時間内に見えなくなります",
|
||||
hidden="Hide Locked Pieces\n設置されたピースが時間内に見えなくなります",
|
||||
hideBoard="Hide Board\n盤面の一部もしくは、全体を隠します",
|
||||
flipBoard="Flip Board\n盤面が回転もしくは滑ります",
|
||||
dropDelay="Gravity\n落下速度をフレーム単位で変更します",
|
||||
@@ -227,25 +228,25 @@ return {
|
||||
"時間:",
|
||||
"入力数/回転数/ホールド数:",
|
||||
"ミノ数:",
|
||||
"列数/掘った列:",
|
||||
"火力数/堀からの火力:",
|
||||
"受けたライン数:",
|
||||
"ライン消去数:",
|
||||
"line数/掘line:",
|
||||
"火力数/掘火力:",
|
||||
"受けたline数:",
|
||||
"line消去数:",
|
||||
"スピン:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"最適化:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={"DPM","ADPM","APM","SPM","LPM","DPM"},
|
||||
radarData={"DPM","ADPM","APM","SPM","L'PM","DPM"},
|
||||
stat={
|
||||
"起動回数:",
|
||||
"プレイ回数:",
|
||||
"プレイ時間:",
|
||||
"入力数/回転数/ホールド数:",
|
||||
"ミノ数/列数/火力数:",
|
||||
"受けたライン数/Res./Asc.:",
|
||||
"火力/堀からの火力:",
|
||||
"効率/堀の効率:",
|
||||
"ミノ数/line数/火力数:",
|
||||
"送られたline数/相殺/受け:",
|
||||
"掘line/掘火力:",
|
||||
"効率/掘の効率:",
|
||||
"B2B数/B3B数:",
|
||||
"PC数/HPC数:",
|
||||
"最適化ミス数/率:",
|
||||
@@ -413,8 +414,8 @@ return {
|
||||
},
|
||||
net_menu={
|
||||
league="テクリーグ",
|
||||
ffa="自由乱闘戦",
|
||||
rooms="ルーム・プライベート戦",
|
||||
ffa="FFA",
|
||||
rooms="ルーム",
|
||||
resetPW="パスワード再設定",
|
||||
logout="ログアウト",
|
||||
},
|
||||
@@ -448,7 +449,7 @@ return {
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="ライン消去時間",
|
||||
fall="line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
@@ -469,7 +470,7 @@ return {
|
||||
nextCount="ネクスト数",
|
||||
holdCount="ホールド数",
|
||||
infHold="無限ホールド",
|
||||
phyHold="即ホールド",
|
||||
phyHold="その場ホールド",
|
||||
},
|
||||
net_game={
|
||||
ready="準備OK",
|
||||
@@ -513,14 +514,14 @@ return {
|
||||
lockFX="設置演出",
|
||||
dropFX="落下演出",
|
||||
moveFX="左右移動演出",
|
||||
clearFX="ライン消去演出",
|
||||
clearFX="line消去演出",
|
||||
splashFX="消去時の弾ける演出",
|
||||
shakeFX="盤面移動演出",
|
||||
atkFX="攻撃演出",
|
||||
|
||||
frame="レンダリングフレームレート(%)",
|
||||
|
||||
text="ライン消去ポップ",
|
||||
text="line消去ポップ",
|
||||
score="スコアポップ",
|
||||
bufferWarn="ダメージアラート",
|
||||
showSpike="スパイクカウンター",
|
||||
@@ -634,7 +635,7 @@ return {
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="ライン消去時間",
|
||||
fall="line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
@@ -659,7 +660,7 @@ return {
|
||||
nextCount="ネクスト数",
|
||||
holdCount="ホールド数",
|
||||
infHold="無限ホールド",
|
||||
phyHold="即ホールド",
|
||||
phyHold="その場ホールド",
|
||||
|
||||
fieldH="盤面の高さ",
|
||||
visible="設置ミノの視認性",
|
||||
@@ -821,67 +822,67 @@ return {
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"スプリント", "10L", "10ライン消せ!"},
|
||||
['sprint_20l']= {"スプリント", "20L", "20ライン消せ!"},
|
||||
['sprint_40l']= {"スプリント", "40L", "40ライン消せ!"},
|
||||
['sprint_100l']= {"スプリント", "100L", "100ライン消せ!"},
|
||||
['sprint_400l']= {"スプリント", "400L", "400ライン消せ!"},
|
||||
['sprint_1000l']= {"スプリント", "1,000L", "1,000ライン消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40ライン"},
|
||||
['sprint_10l']= {"スプリント", "10L", "10line消せ!"},
|
||||
['sprint_20l']= {"スプリント", "20L", "20line消せ!"},
|
||||
['sprint_40l']= {"スプリント", "40L", "40line消せ!"},
|
||||
['sprint_100l']= {"スプリント", "100L", "100line消せ!"},
|
||||
['sprint_400l']= {"スプリント", "400L", "400line消せ!"},
|
||||
['sprint_1000l']= {"スプリント", "1,000L", "1,000line消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40line"},
|
||||
['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nネクストなし\nホールドなし!"},
|
||||
['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40ライン"},
|
||||
['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"},
|
||||
['dig_10l']= {"掘り", "10L", "10ライン下穴を掘れ!"},
|
||||
['dig_40l']= {"掘り", "40L", "40ライン下穴を掘れ!"},
|
||||
['dig_100l']= {"掘り", "100L", "100ライン下穴を掘れ!"},
|
||||
['dig_400l']= {"掘り", "400L", "400ライン下穴を掘れ!"},
|
||||
['dig_eff_10l']= {"堀り", "EFFICIENCY 10L", "最小のミノ数で10ライン掘れ!"},
|
||||
['dig_eff_40l']= {"堀り", "EFFICIENCY 40L", "最小のミノ数で40ライン掘れ!"},
|
||||
['dig_eff_100l']= {"堀り", "EFFICIENCY 100L","最小のミノ数で100ライン掘れ!"},
|
||||
['dig_eff_400l']= {"堀り", "EFFICIENCY 400L","最小のミノ数で400ライン掘れ!"},
|
||||
['dig_quad_10l']= {"堀り", "TECHRASH 10L", "techrashだけで10ライン下穴を掘れ!"},
|
||||
['drought_n']= {"ドラウト", "100L", "Iミノ一切無し!"},
|
||||
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
|
||||
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200ラインマラソン!"},
|
||||
['marathon_h']= {"マラソン", "HARD", "高速の中で200ラインマラソン!"},
|
||||
['solo_e']= {"バトル", "EASY", "低レベルのAIに勝て!"},
|
||||
['solo_n']= {"バトル", "NORMAL", "通常レベルのAIに勝て!"},
|
||||
['solo_h']= {"バトル", "HARD", "高レベルのAIに勝て!"},
|
||||
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
|
||||
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
|
||||
['techmino49_e']= {"テック 49", "EASY", "低レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_h']= {"テック 49", "HARD", "高レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_e']= {"テック 99", "EASY", "低レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_h']= {"テック 99", "HARD", "高レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['round_e']= {"ターン制", "EASY", "ターン制で低レベルAIと勝負!"},
|
||||
['round_n']= {"ターン制", "NORMAL", "ターン制で通常レベルAIと勝負!"},
|
||||
['round_h']= {"ターン制", "HARD", "ターン制で高レベルAIと勝負!"},
|
||||
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルAIと勝負!"},
|
||||
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルAIと勝負!"},
|
||||
['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40line"},
|
||||
['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"},
|
||||
['dig_10l']= {"掘り", "10L", "10line下穴を掘れ!"},
|
||||
['dig_40l']= {"掘り", "40L", "40line下穴を掘れ!"},
|
||||
['dig_100l']= {"掘り", "100L", "100line下穴を掘れ!"},
|
||||
['dig_400l']= {"掘り", "400L", "400line下穴を掘れ!"},
|
||||
['dig_eff_10l']= {"掘り", "EFFICIENCY 10L", "最小のミノ数で10line掘れ!"},
|
||||
['dig_eff_40l']= {"掘り", "EFFICIENCY 40L", "最小のミノ数で40line掘れ!"},
|
||||
['dig_eff_100l']= {"掘り", "EFFICIENCY 100L","最小のミノ数で100line掘れ!"},
|
||||
['dig_eff_400l']= {"掘り", "EFFICIENCY 400L","最小のミノ数で400line掘れ!"},
|
||||
['dig_quad_10l']= {"掘り", "TECHRASH 10L", "techrashだけで10line下穴を掘れ!"},
|
||||
['drought_n']= {"ドラウト", "100L", "Iミノ一切無し!"},
|
||||
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
|
||||
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200lineマラソン!"},
|
||||
['marathon_h']= {"マラソン", "HARD", "高速の中で200lineマラソン!"},
|
||||
['solo_e']= {"バトル", "EASY", "低レベルのAIに勝て!"},
|
||||
['solo_n']= {"バトル", "NORMAL", "通常レベルのAIに勝て!"},
|
||||
['solo_h']= {"バトル", "HARD", "高レベルのAIに勝て!"},
|
||||
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
|
||||
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
|
||||
['techmino49_e']= {"テック 49", "EASY", "低レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_h']= {"テック 49", "HARD", "高レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_e']= {"テック 99", "EASY", "低レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_h']= {"テック 99", "HARD", "高レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['round_e']= {"ターン制", "EASY", "ターン制で低レベルAIと勝負!"},
|
||||
['round_n']= {"ターン制", "NORMAL", "ターン制で通常レベルAIと勝負!"},
|
||||
['round_h']= {"ターン制", "HARD", "ターン制で高レベルAIと勝負!"},
|
||||
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルAIと勝負!"},
|
||||
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルAIと勝負!"},
|
||||
['big_n']= {"ビッグ", "NORMAL", "小さい盤面でプレイ!"},
|
||||
['big_h']= {"ビッグ", "HARD", "小さい盤面でプレイ!"},
|
||||
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
|
||||
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
|
||||
['master_final']= {"マスター", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"マスター", "PHANTASM", "???"},
|
||||
['master_g']= {"マスター", "GRADED", "最高段位を取れ!"},
|
||||
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
|
||||
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
|
||||
['master_final']= {"マスター", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"マスター", "PHANTASM", "???"},
|
||||
['master_g']= {"マスター", "GRADED", "最高段位を取れ!"},
|
||||
['master_ex']= {"グランドマスター", "EXTRA", "一瞬よりも短い永遠"},
|
||||
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
|
||||
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
|
||||
['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"},
|
||||
['strategy_h']= {"ストラテジー", "HARD", "20Gでの素早い判断"},
|
||||
['strategy_u']= {"ストラテジー", "ULTIMATE", "20Gでの素早い判断"},
|
||||
['strategy_e_plus']={"ストラテジー", "EASY+", "20Gでの素早い判断"},
|
||||
['strategy_h_plus']={"ストラテジー", "HARD+", "20Gでの素早い判断"},
|
||||
['strategy_u_plus']={"ストラテジー", "ULTIMATE+", "20Gでの素早い判断"},
|
||||
['blind_e']= {"目隠し", "HALF", "初心者用"},
|
||||
['blind_n']= {"目隠し", "ALL", "中級者用"},
|
||||
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
|
||||
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用!"},
|
||||
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
|
||||
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りない!"},
|
||||
['blind_e']= {"インビジブル", "HALF", "初心者用"},
|
||||
['blind_n']= {"インビジブル", "ALL", "中級者用"},
|
||||
['blind_h']= {"インビジブル", "SUDDEN", "上級者用"},
|
||||
['blind_l']= {"インビジブル", "SUDDEN+", "プロフェッショナル用"},
|
||||
['blind_u']= {"インビジブル", "?", "覚悟は良いかい?"},
|
||||
['blind_wtf']= {"インビジブル", "WTF", "まだ覚悟が足りない"},
|
||||
['classic_e']= {"クラシック", "EASY", "低速クラシック"},
|
||||
['classic_h']= {"クラシック", "HARD", "通常速度クラシック"},
|
||||
['classic_l']= {"クラシック", "LUNATIC", "中高速度クラシック"},
|
||||
@@ -895,16 +896,16 @@ return {
|
||||
['attacker_u']= {"火力王", "ULTIMATE", "攻撃力を磨け!"},
|
||||
['defender_n']= {"相殺王", "NORMAL", "防御力を磨け!"},
|
||||
['defender_l']= {"相殺王", "LUNATIC", "防御力を磨け!"},
|
||||
['dig_h']= {"堀王", "HARD", "掘りを磨け"},
|
||||
['dig_u']= {"堀王", "ULTIMATE", "掘りを磨け"},
|
||||
['dig_h']= {"掘王", "HARD", "掘りを磨け"},
|
||||
['dig_u']= {"掘王", "ULTIMATE", "掘りを磨け"},
|
||||
['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "無限中開け"},
|
||||
['c4wtrain_l']= {"C4Wトレーニング", "LUNATIC", "無限中開け"},
|
||||
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェの練習!"},
|
||||
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェの練習!"},
|
||||
['pc_n']= {"パフェチャレンジ", "NORMAL", "100 Line以内でパフェをできるだけたくさん取れ!"},
|
||||
['pc_h']= {"パフェチャレンジ", "HARD", "100 Line以内でパフェをできるだけたくさん取れ!"},
|
||||
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100 Line以内でパフェをできるだけたくさん取れ!"},
|
||||
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを取れ!"},
|
||||
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェの練習!"},
|
||||
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェの練習!"},
|
||||
['pc_n']= {"パフェチャレンジ", "NORMAL", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_h']= {"パフェチャレンジ", "HARD", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを取れ!"},
|
||||
['tech_n']= {"テクニック", "NORMAL", "B2Bを繋げ続けよう!"},
|
||||
['tech_n_plus']= {"テクニック", "NORMAL+", "回転入れとパフェだけ!"},
|
||||
['tech_h']= {"テクニック", "HARD", "B2Bを繋げ続けよう!"},
|
||||
@@ -912,7 +913,7 @@ return {
|
||||
['tech_l']= {"テクニック", "LUNATIC", "回転入れとパフェだけ!"},
|
||||
['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"},
|
||||
['tech_finesse']= {"テクニック", "FINESSE", "最適化!"},
|
||||
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、普通のライン消去禁止!"},
|
||||
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、通常line消去禁止!"},
|
||||
['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"},
|
||||
['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"},
|
||||
['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"},
|
||||
@@ -920,13 +921,13 @@ return {
|
||||
['backfire_h']= {"バックファイヤー", "HARD", "撃った火力が戻ってくる!"},
|
||||
['backfire_l']= {"バックファイヤー", "LUNATIC", "撃った火力が戻ってくる!"},
|
||||
['backfire_u']= {"バックファイヤー", "ULTIMATE", "撃った火力が戻ってくる!"},
|
||||
['sprintAtk']= {"スプリント", "100 Attack", "100ライン送れ!"},
|
||||
['sprintEff']= {"スプリント", "Efficiency", "40ラインの間にできるだけ火力を出せ!"},
|
||||
['zen']= {'禅', "200", "時間制限なしで200ライン消去"},
|
||||
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
|
||||
['infinite']= {"無限", "", "サンドボックス"},
|
||||
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "ずっとマラソン"},
|
||||
['sprintAtk']= {"スプリント", "100 Attack", "100line送れ!"},
|
||||
['sprintEff']= {"スプリント", "Efficiency", "40lineの間にできるだけ火力を出せ!"},
|
||||
['zen']= {'zen', "200", "時間制限なしで200line消去"},
|
||||
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
|
||||
['infinite']= {"無限", "", "サンドボックス"},
|
||||
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "ずっとマラソン"},
|
||||
|
||||
['custom_clear']= {"カスタム", "NORMAL"},
|
||||
['custom_puzzle']= {"カスタム", "PUZZLE"},
|
||||
@@ -1015,7 +1016,7 @@ getTip={refuseCopy=true,
|
||||
"ゲーム内にはモード選択マップからじゃ入れない隠しモードがいくつかあります!",
|
||||
"このゲームでは全てのSpinに火力補正があります!",
|
||||
"このゲームのほとんどの楽曲はBeepboxを用いて作曲されました!",
|
||||
"サーバーが不規則にダウンします",
|
||||
"サーバーが不規則に落ちます",
|
||||
"スタッフロールの背景に流れている名前はスポンサーの名前です!",
|
||||
"タブレットやスマホでもキーボードを接続できます!(iOSにはそんな機能ないと思うけど)",
|
||||
"なにかアイデアがありますか? Discordで提案してください!",
|
||||
|
||||
@@ -129,7 +129,6 @@ return {
|
||||
-- invalidCode="Invalid code",
|
||||
-- invalidEmail="Invalid email",
|
||||
-- playerNotFound="Player not found",
|
||||
-- noPassword="No password",
|
||||
-- invalidEmailPass="Invalid email or password",
|
||||
-- emailExists="Email exists",
|
||||
-- emailSendError="Email send error",
|
||||
@@ -174,9 +173,8 @@ return {
|
||||
-- started="Playing",
|
||||
joinRoom="$1 Entrou a sala.",
|
||||
leaveRoom="$1 Saiu da sala.",
|
||||
-- roomRemoved="Room was removed",
|
||||
-- ready="READY",
|
||||
-- connStream="CONNECTING",
|
||||
-- waitStream="WAITING",
|
||||
-- spectating="Spectating",
|
||||
|
||||
|
||||
|
||||
@@ -141,7 +141,6 @@ return {
|
||||
invalidCode="无效验证码",
|
||||
invalidEmail="无效邮箱",
|
||||
playerNotFound="找不到玩家",
|
||||
noPassword="未输入密码",
|
||||
invalidEmailPass="邮箱或密码无效",
|
||||
emailExists="邮箱存在",
|
||||
emailSendError="邮箱发送错误",
|
||||
@@ -186,6 +185,7 @@ return {
|
||||
started="游戏中",
|
||||
joinRoom="$1 进入房间",
|
||||
leaveRoom="$1 离开房间",
|
||||
roomRemoved="房间被解散",
|
||||
ready="各就各位!",
|
||||
spectating="观战中",
|
||||
|
||||
|
||||
@@ -118,7 +118,6 @@ return {
|
||||
noUsername="Error.NoUsername();",
|
||||
wrongEmail="Error.WrongEmail();",
|
||||
wrongCode="Error.WrongVerificationCode();",
|
||||
noPassword="Error.NoPassword();",
|
||||
diffPassword="Error.DiffPassword();",
|
||||
checkEmail="register.RequestSent=true",
|
||||
|
||||
@@ -135,6 +134,7 @@ return {
|
||||
started="Room.Playing();",
|
||||
joinRoom="Room.Join($1);",
|
||||
leaveRoom="Room.Leave($1);",
|
||||
roomRemoved="Room.Removed();",
|
||||
ready="Ready();",
|
||||
spectating="Room.Spectating();",
|
||||
|
||||
|
||||
@@ -141,7 +141,6 @@ return {
|
||||
invalidCode="無效驗證碼",
|
||||
invalidEmail="無效郵箱",
|
||||
playerNotFound="找不到玩家",
|
||||
noPassword="未輸入密碼",
|
||||
invalidEmailPass="郵箱或密碼無效",
|
||||
emailExists="郵箱存在",
|
||||
emailSendError="郵箱發送錯誤",
|
||||
@@ -186,6 +185,7 @@ return {
|
||||
started="遊戲中",
|
||||
joinRoom="$1 進入房間",
|
||||
leaveRoom="$1 離開房間",
|
||||
roomRemoved="房間被解散",
|
||||
ready="準備!",
|
||||
spectating="旁觀中",
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -40,7 +40,7 @@ return {
|
||||
end end
|
||||
end,
|
||||
score=function(P) return {P.modeData.place,P.modeData.ko} end,
|
||||
scoreDisp=function(D) return"NO."..D[1].." KO:"..D[2] end,
|
||||
scoreDisp=function(D) return "NO."..D[1].." KO:"..D[2] end,
|
||||
comp=function(a,b) return a[1]<b[1] or a[1]==b[1] and a[2]>b[2] end,
|
||||
getRank=function(P)
|
||||
local R=P.modeData.place
|
||||
|
||||
@@ -474,7 +474,7 @@ end
|
||||
|
||||
-- Room
|
||||
function NET.room_chat(msg,rid)
|
||||
if not TASK.lock('chatLimit',1.626) then
|
||||
if not TASK.lock('chatLimit',1.26) then
|
||||
MES.new('warn',text.tooFrequent)
|
||||
elseif #msg>0 then
|
||||
wsSend(1300,{
|
||||
@@ -590,7 +590,7 @@ function NET.wsCallBack.room_chat(body)
|
||||
TASK.unlock('receiveMessage')
|
||||
TASK.lock('receiveMessage',1)
|
||||
NET.textBox:push{
|
||||
COLOR.Z,_getFullName(body.data.playerId),
|
||||
COLOR.Z,_getFullName(body.data.playerId).." ",
|
||||
COLOR.N,body.data.message,
|
||||
}
|
||||
end
|
||||
@@ -650,7 +650,7 @@ function NET.wsCallBack.room_enter(body)
|
||||
end
|
||||
else
|
||||
local p=body.data
|
||||
if NETPLY.map[p.playerId] then _playerLeaveRoom(p.playerId) end
|
||||
if NETPLY.exist(p.playerId) then _playerLeaveRoom(p.playerId) end
|
||||
NETPLY.add{
|
||||
uid=p.playerId,
|
||||
group=p.group,
|
||||
@@ -704,7 +704,6 @@ function NET.wsCallBack.player_finish(body)
|
||||
if P.uid==body.data.playerId then
|
||||
NETPLY.setPlace(P.uid,#PLY_ALIVE)
|
||||
P.loseTimer=26
|
||||
P:lose(true)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
@@ -138,6 +138,9 @@ function NETPLY.remove(uid)
|
||||
end
|
||||
end
|
||||
end
|
||||
function NETPLY.exist(uid)
|
||||
return rawget(PLYmap,uid) and true or false
|
||||
end
|
||||
|
||||
function NETPLY.setPlace(uid,place) PLYmap[uid].place=place end
|
||||
function NETPLY.setStat(uid,S)
|
||||
|
||||
@@ -445,7 +445,13 @@ function PLY.newPlayer(id,mini,p)
|
||||
local pData={
|
||||
uid=USER.uid,
|
||||
group=0,
|
||||
} if p then TABLE.coverR(p,pData) end
|
||||
} if p then
|
||||
TABLE.coverR(p,pData)
|
||||
else
|
||||
-- Default pid=1, and empty username
|
||||
pData.uid=1
|
||||
P.username=""
|
||||
end
|
||||
P.uid=pData.uid
|
||||
P.sid=NET.uid_sid[pData.uid] or pData.uid
|
||||
P.group=pData.group
|
||||
|
||||
@@ -2707,7 +2707,12 @@ function Player:update(dt)
|
||||
end
|
||||
if frameDelta then
|
||||
for _=1,
|
||||
self.loseTimer and 6 or
|
||||
self.loseTimer and min(frameDelta,
|
||||
self.loseTimer>16 and 2 or
|
||||
self.loseTimer>6.2 and 12 or
|
||||
self.loseTimer>2.6 and 260 or
|
||||
2600
|
||||
) or
|
||||
frameDelta<26 and 1 or
|
||||
frameDelta<50 and 2 or
|
||||
frameDelta<80 and 3 or
|
||||
|
||||
@@ -4,7 +4,7 @@ local sin=math.sin
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ local slide,pathVis,revKB
|
||||
local function ifGaming() return state==1 end
|
||||
local colorSelector=WIDGET.newSelector{name='color',x=150,y=240,w=200,list={'color1','rainbow','color2','gray','black'},color='lY',disp=function() return color end,code=function(v) if state~=1 then color=v end end,hideF=ifGaming}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow2')
|
||||
BGM.play('push')
|
||||
board={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}
|
||||
|
||||
@@ -225,7 +225,7 @@ local function skip()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
BGM.play('truth')
|
||||
board={}
|
||||
|
||||
@@ -29,7 +29,7 @@ local startTime,time
|
||||
local state,progress
|
||||
local frameKeyCount,mistake
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('bg2')
|
||||
BGM.play('way')
|
||||
levelName="A_Z"
|
||||
|
||||
@@ -94,7 +94,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
restart()
|
||||
BGM.play('truth')
|
||||
BG.set('rainbow')
|
||||
|
||||
@@ -153,7 +153,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BGM.play('truth')
|
||||
end
|
||||
|
||||
@@ -24,12 +24,12 @@ local function _autoReturn()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('none')
|
||||
BGM.stop()
|
||||
reg,val,sym=false,"0",false
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
BGM.play()
|
||||
end
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ local state,timer,score,combo
|
||||
local x,y,vx,vy,ex,ey
|
||||
|
||||
local scene={}
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
pow,ang=0,0
|
||||
state=0
|
||||
timer=0
|
||||
|
||||
@@ -711,20 +711,22 @@ local commands={} do
|
||||
local button=WIDGET.newButton{name='bye',x=640,y=615,w=426,h=100,code=function()
|
||||
TASK.new(function()
|
||||
scene.widgetList.bye.hide=true
|
||||
for _=1,30 do coroutine.yield() end
|
||||
TEST.yieldN(30)
|
||||
log{C.R,"Deleting all data in 10..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 9..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 8..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 7..."}SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 6..."}SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 5..."}SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 4..."}SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 3..."}SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 2..."}SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 1..."}SFX.play('ready')SFX.play('clear_5')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 0..."}SFX.play('start')SFX.play('clear_6')TEST.yieldN(60)
|
||||
outputBox.hide=true TEST.yieldN(26)
|
||||
FILE.clear_s('')love.event.quit()
|
||||
log{C.R,"Deleting all data in 9..."} SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 8..."} SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 7..."} SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 6..."} SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 5..."} SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 4..."} SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 3..."} SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 2..."} SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 1..."} SFX.play('ready')SFX.play('clear_5')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 0..."} SFX.play('start')SFX.play('clear_6')TEST.yieldN(60)
|
||||
outputBox.hide=true
|
||||
TEST.yieldN(26)
|
||||
FILE.clear_s('')
|
||||
love.event.quit()
|
||||
end)
|
||||
end}
|
||||
button:setObject("Techmino is fun. Bye.")
|
||||
@@ -1000,7 +1002,7 @@ local fleg={
|
||||
pw=the_secret,
|
||||
supw=7126,
|
||||
second_box="Coming soon",
|
||||
}setmetatable(fleg,{__tostring=function() return"The fl\97g." end})
|
||||
}setmetatable(fleg,{__tostring=function() return "The fl\97g." end})
|
||||
function userG.the_box(k)
|
||||
if k~=first_key then
|
||||
log"Usage:"log"*The box is locked*"
|
||||
@@ -1014,7 +1016,7 @@ userG.the_key=first_key
|
||||
|
||||
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
WIDGET.focus(inputBox)
|
||||
BG.set('none')
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
cubesX={} for i=1,40 do cubesX[i]=rnd()*16-8 end
|
||||
cubesY={} for i=1,40 do cubesY[i]=i/40*9 end
|
||||
lastCube=1
|
||||
|
||||
@@ -33,7 +33,7 @@ local function restart()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
restart()
|
||||
state='menu'
|
||||
BGM.play('hang out')
|
||||
|
||||
@@ -197,7 +197,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BG.set('fixColor',.26,.26,.26)
|
||||
BGM.play(bgm)
|
||||
|
||||
@@ -243,7 +243,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
invis=false
|
||||
newGame()
|
||||
BGM.play('truth')
|
||||
|
||||
@@ -105,7 +105,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('fixColor',.26,.62,.26)
|
||||
_newGame()
|
||||
selected=false
|
||||
|
||||
@@ -29,7 +29,7 @@ local function _reset()
|
||||
freshLevel()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=1
|
||||
timeUsed=0
|
||||
level=0
|
||||
|
||||
@@ -13,7 +13,7 @@ local offset
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
inst='lead'
|
||||
offset=0
|
||||
end
|
||||
|
||||
@@ -27,7 +27,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=0
|
||||
ang,pos=0,-tau/4
|
||||
timer=50
|
||||
|
||||
@@ -14,7 +14,7 @@ local ry=0-- Rotation Y
|
||||
|
||||
local p1,p2-- Player data
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('none')
|
||||
BGM.play('way')
|
||||
state=0
|
||||
|
||||
@@ -15,7 +15,7 @@ local function reset()
|
||||
s1,s2=0,0
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BG.set('none')
|
||||
end
|
||||
|
||||
@@ -11,7 +11,7 @@ local startTime,time
|
||||
local state,progress
|
||||
local tapFX,mistake
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('space')
|
||||
BGM.play('way')
|
||||
board={}
|
||||
|
||||
@@ -23,7 +23,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=0
|
||||
time1=STRING.time(0)
|
||||
time2=STRING.time(0)
|
||||
|
||||
@@ -8,7 +8,7 @@ local scene={}
|
||||
local lastKey,keyTime
|
||||
local speed,maxSpeed=0,260
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
lastKey=nil
|
||||
speed=0
|
||||
keyTime={} for i=1,40 do keyTime[i]=-1e99 end
|
||||
|
||||
@@ -54,7 +54,7 @@ local function reset()
|
||||
fallingTimer=false
|
||||
failPos=false
|
||||
end
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow2')
|
||||
BGM.play('truth')
|
||||
preview={}
|
||||
|
||||
@@ -264,7 +264,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
player:reset()
|
||||
BGM.play('truth')
|
||||
end
|
||||
|
||||
@@ -24,12 +24,12 @@ local sList={
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
destroyPlayers()
|
||||
BG.set(CUSTOMENV.bg)
|
||||
BGM.play(CUSTOMENV.bgm)
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(CUSTOMENV,'conf/customEnv')
|
||||
BGM.play()
|
||||
end
|
||||
@@ -216,13 +216,13 @@ scene.widgetList={
|
||||
WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')},
|
||||
|
||||
-- Special rules
|
||||
WIDGET.newSwitch{name='ospin', x=850, y=830, lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
|
||||
WIDGET.newSwitch{name='fineKill', x=850, y=890, lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')},
|
||||
WIDGET.newSwitch{name='b2bKill', x=850, y=950, lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')},
|
||||
WIDGET.newSwitch{name='lockout', x=850, y=1010,lim=210,disp=CUSval('lockout'), code=CUSrev('lockout')},
|
||||
WIDGET.newSwitch{name='easyFresh', x=1170,y=830, lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')},
|
||||
WIDGET.newSwitch{name='deepDrop', x=1170,y=890, lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')},
|
||||
WIDGET.newSwitch{name='bone', x=1170,y=950, lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
|
||||
WIDGET.newSwitch{name='ospin', x=850, y=850, lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
|
||||
WIDGET.newSwitch{name='fineKill', x=850, y=910, lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')},
|
||||
WIDGET.newSwitch{name='b2bKill', x=850, y=970, lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')},
|
||||
WIDGET.newSwitch{name='lockout', x=850, y=1030,lim=210,disp=CUSval('lockout'), code=CUSrev('lockout')},
|
||||
WIDGET.newSwitch{name='easyFresh', x=1170,y=850, lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')},
|
||||
WIDGET.newSwitch{name='deepDrop', x=1170,y=910, lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')},
|
||||
WIDGET.newSwitch{name='bone', x=1170,y=970, lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
|
||||
|
||||
-- Next & Hold
|
||||
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode'),hideF=function() return CUSTOMENV.holdCount==0 end},
|
||||
@@ -232,8 +232,8 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function() return CUSTOMENV.holdCount==0 end},
|
||||
|
||||
-- BG & BGM
|
||||
WIDGET.newSelector{name='bg', x=840, y=1090,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i) CUSTOMENV.bg=i BG.set(i) end},
|
||||
WIDGET.newSelector{name='bgm', x=1120,y=1090,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i) CUSTOMENV.bgm=i BGM.play(i) end},
|
||||
WIDGET.newSelector{name='bg', x=840, y=1100,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i) CUSTOMENV.bg=i BG.set(i) end},
|
||||
WIDGET.newSelector{name='bgm', x=1120,y=1100,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i) CUSTOMENV.bgm=i BGM.play(i) end},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -117,14 +117,14 @@ local function _pDraw()
|
||||
while #F>0 and isEmpty(F[#F]) do rem(F) end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
curPen=false
|
||||
penMode=0
|
||||
penX,penY=1,1
|
||||
demo=false
|
||||
page=1
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copyBoards(),'conf/customBoards')
|
||||
end
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@ local scene={}
|
||||
local input-- Input buffer
|
||||
local cur-- Cursor position
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
input=""
|
||||
cur=#MISSION
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copyMission(),'conf/customMissions')
|
||||
end
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
local gc,sys=love.graphics,love.system
|
||||
local sys=love.system
|
||||
local kb=love.keyboard
|
||||
|
||||
local sin=math.sin
|
||||
local ins,rem=table.insert,table.remove
|
||||
local gc_setColor,gc_print=gc.setColor,gc.print
|
||||
local gc_setColor,gc_print=GC.setColor,GC.print
|
||||
|
||||
local scene={}
|
||||
|
||||
local cur-- Cursor position
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
cur=#BAG
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copySequence(),'conf/customSequence')
|
||||
end
|
||||
|
||||
@@ -112,12 +112,12 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
|
||||
local blockCharWidth={} for i=1,#BLOCK_CHARS do blockCharWidth[i]=gc.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth() end
|
||||
local blockCharWidth={} for i=1,#BLOCK_CHARS do blockCharWidth[i]=GC.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth() end
|
||||
function scene.draw()
|
||||
-- Draw frame
|
||||
gc_setColor(COLOR.Z)
|
||||
gc.setLineWidth(2)
|
||||
gc.rectangle('line',100,110,1080,260,5)
|
||||
GC.setLineWidth(2)
|
||||
GC.rectangle('line',100,110,1080,260,5)
|
||||
|
||||
-- Draw sequence
|
||||
local BLOCK_COLORS=BLOCK_COLORS
|
||||
@@ -166,7 +166,7 @@ function scene.draw()
|
||||
|
||||
-- Draw cursor
|
||||
gc_setColor(.5,1,.5,.6+.4*sin(TIME()*6.26))
|
||||
gc.line(cx-5,cy-20,cx-5,cy+20)
|
||||
GC.line(cx-5,cy-20,cx-5,cy+20)
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
|
||||
@@ -4,7 +4,7 @@ local scene={}
|
||||
|
||||
local timer
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
timer=1
|
||||
scene.widgetList.pause.x=
|
||||
SETTING.menuPos=='right' and 1195 or
|
||||
|
||||
@@ -75,7 +75,7 @@ local function _search()
|
||||
lastSearch=input
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
dict=require("parts.language.dict_"..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or 'en'))
|
||||
_scanDict(dict)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ local errorShot,errorInfo
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BGcolor=math.random()>.026 and {.3,.5,.9} or {.62,.3,.926}
|
||||
sysAndScn=SYSTEM.."-"..VERSION.string.." scene:"..Z.getErr('#').scene
|
||||
errorText=LOADED and text.errorMsg or "An error has occurred while the game was loading.\nAn error log has been created so you can send it to the author."
|
||||
@@ -34,7 +34,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='console',x=940,y=640,w=170,h=80,font=65,fText=CHAR.icon.console,code=goScene'app_console'},
|
||||
WIDGET.newKey{name='quit',x=1140,y=640,w=170,h=80,font=40,fText=CHAR.icon.cross_thick,code=love.event.quit},
|
||||
WIDGET.newKey{name='quit',x=1140,y=640,w=170,h=80,font=40,fText=CHAR.icon.cross_thick,code=goScene('quit','none')},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -133,7 +133,7 @@ local function _checkGameKeyDown(key)
|
||||
return true-- No key pressed
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
if GAME.init then
|
||||
resetGameData()
|
||||
GAME.init=false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
scene.widgetList.texts:setTexts(require"parts.updateLog":split("\n"))
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ local curLang=1
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local scene={}
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
local fileData=love.filesystem.read("legals.md")
|
||||
if fileData then
|
||||
|
||||
@@ -107,25 +107,25 @@ local loadingThread=coroutine.wrap(function()
|
||||
LOADED=true
|
||||
saveStats()
|
||||
Z.setPowerInfo(SETTING.powerInfo)
|
||||
return'finish'
|
||||
return 'finish'
|
||||
end)
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
studioLogo=GC.newText(getFont(90),"26F Studio")
|
||||
progress=0
|
||||
maxProgress=10
|
||||
t1,t2=0,0-- Timer
|
||||
animeType={} for i=1,#SVG_TITLE_FILL do animeType[i]=math.random(#titleTransform) end-- Random animation type
|
||||
end
|
||||
function scene.sceneBack()
|
||||
love.event.quit()
|
||||
function scene.leave()
|
||||
SCN.go('quit','none')
|
||||
end
|
||||
|
||||
function scene.mouseDown()
|
||||
if LOADED then
|
||||
if FIRSTLAUNCH then
|
||||
SCN.push('main')
|
||||
SCN.swapTo('lang')
|
||||
SCN.go('lang')
|
||||
else
|
||||
SCN.go(SETTING.simpMode and 'main_simple' or 'main')
|
||||
end
|
||||
@@ -134,7 +134,7 @@ end
|
||||
scene.touchDown=scene.mouseDown
|
||||
function scene.keyDown(key)
|
||||
if key=='escape' then
|
||||
love.event.quit()
|
||||
SCN.go('quit','none')
|
||||
else
|
||||
scene.mouseDown()
|
||||
end
|
||||
|
||||
@@ -9,7 +9,6 @@ local function _getCode()
|
||||
NET.getCode(email)
|
||||
end
|
||||
end
|
||||
|
||||
local function _codeLogin()
|
||||
local code=scene.widgetList.code:getText():upper()
|
||||
if #code~=8 then
|
||||
@@ -18,8 +17,19 @@ local function _codeLogin()
|
||||
NET.codeLogin(USER.email,code)
|
||||
end
|
||||
end
|
||||
local function _paste()
|
||||
local t=love.system.getClipboardText()
|
||||
if t then
|
||||
t=STRING.trim(t)
|
||||
if #t==8 and t:match("[0-9]+") then
|
||||
scene.widgetList.code:setText(t)
|
||||
return
|
||||
end
|
||||
end
|
||||
MES.new('warn',text.wrongCode)
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
scene.widgetList.email:setText(USER.email or "")
|
||||
scene.widgetList.code:clear()
|
||||
end
|
||||
@@ -33,6 +43,8 @@ function scene.keyDown(key,rep)
|
||||
else
|
||||
_codeLogin()
|
||||
end
|
||||
elseif key=='v' and love.keyboard.isDown('lctrl','rctrl') then
|
||||
_paste()
|
||||
else
|
||||
return true
|
||||
end
|
||||
@@ -45,8 +57,9 @@ scene.widgetList={
|
||||
WIDGET.newInputBox{name='email', x=380, y=200,w=626,h=60,limit=128},
|
||||
WIDGET.newKey{name='send', x=640, y=330,w=300,h=80,font=40,code=_getCode},
|
||||
|
||||
WIDGET.newInputBox{name='code', x=380, y=400,w=626 ,h=60,limit=8},
|
||||
WIDGET.newInputBox{name='code', x=380, y=400,w=626,h=60,regex="[0-9a-zA-Z]",limit=8},
|
||||
WIDGET.newKey{name='verify', x=640, y=530,w=300,h=80,font=40,code=_codeLogin},
|
||||
WIDGET.newKey{name='paste', x=850, y=530,w=80,font=40,fText=CHAR.icon.import,code=_paste},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
showEmail=false
|
||||
emailBox.secret=true
|
||||
emailBox:setText(USER.email)
|
||||
@@ -23,8 +23,12 @@ function scene.sceneInit()
|
||||
end
|
||||
|
||||
function scene.keyDown(key,rep)
|
||||
if key~='return' or rep then return true end
|
||||
_login()
|
||||
if rep then return true end
|
||||
if key=='return' then
|
||||
_login()
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
|
||||
@@ -18,7 +18,7 @@ local enterConsole=coroutine.wrap(function()
|
||||
Snd('bell',.6,'A4',.7,'A5',1,'A6')SFX.play('ren_mega')SCN.go('app_console')coroutine.yield()
|
||||
end
|
||||
end)
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
if THEME.cur=='halloween' then
|
||||
TASK.new(function()
|
||||
TEST.yieldT(.26)
|
||||
|
||||
@@ -2,7 +2,7 @@ local scene={}
|
||||
|
||||
local tip=GC.newText(getFont(30),"")
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
tip:set(text.getTip())
|
||||
BG.set()
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
local fileData=FILE.load('parts/language/manual_'..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or 'en')..'.txt','-string')
|
||||
if fileData then
|
||||
|
||||
@@ -38,7 +38,7 @@ local function _toggleMod(M,back)
|
||||
scene.widgetList.unranked.hide=scoreValid()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selected=false
|
||||
scene.widgetList.unranked.hide=scoreValid()
|
||||
BG.set('tunnel')
|
||||
|
||||
@@ -24,7 +24,7 @@ local touchDist
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
mapCam.zoomK=SCN.prev=='main' and 5 or 1
|
||||
visibleModes={}-- 1=unlocked, 2=locked but visible
|
||||
|
||||
@@ -23,7 +23,7 @@ local selected-- Music selected
|
||||
local bgmList=BGM.getList()
|
||||
if #bgmList==0 then bgmList={"[NO BGM]"} end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
playing=BGM.getPlaying()[1]
|
||||
selected=TABLE.find(bgmList,playing) or 1
|
||||
end
|
||||
|
||||
@@ -59,7 +59,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
noTouch=not SETTING.VKSwitch
|
||||
playing=false
|
||||
lastUpstreamTime=0
|
||||
@@ -73,7 +73,7 @@ function scene.sceneInit()
|
||||
GAME.prevBG=false
|
||||
end
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
TASK.unlock('netPlaying')
|
||||
end
|
||||
|
||||
@@ -127,19 +127,42 @@ function scene.keyDown(key,isRep)
|
||||
else
|
||||
_quit()
|
||||
end
|
||||
elseif key=='/' then
|
||||
if inputBox.hide then
|
||||
_switchChat()
|
||||
local mes=STRING.trim(inputBox:getText())
|
||||
if #mes==0 then
|
||||
inputBox:setText("/")
|
||||
end
|
||||
end
|
||||
elseif key=='return' or key=='kpenter' then
|
||||
local mes=STRING.trim(inputBox:getText())
|
||||
if not inputBox.hide and #mes>0 then
|
||||
if mes:sub(1,1)=='/' then
|
||||
local cmd=STRING.split(mes,' ')
|
||||
|
||||
-- Common commands
|
||||
if cmd[1]=='/kick' then
|
||||
if tonumber(cmd[2]) then NET.room_kick(tonumber(cmd[2])) end
|
||||
elseif cmd[1]=='/pw' then
|
||||
if cmd[2] then NET.room_setPW(cmd[2]) end
|
||||
elseif cmd[1]=='/host' then
|
||||
if tonumber(cmd[2]) then NET.player_setHost(tonumber(cmd[2])) end
|
||||
elseif cmd[1]=='/group' then
|
||||
if tonumber(cmd[2]) and tonumber(cmd[2])%1==0 and tonumber(cmd[2])>=0 and tonumber(cmd[2])<=6 then
|
||||
NET.player_joinGroup(tonumber(cmd[2]))
|
||||
end
|
||||
elseif cmd[1]=='/exit' or cmd[1]=='/quit' then
|
||||
_quit()
|
||||
|
||||
-- Admin commands
|
||||
elseif cmd[1]=='/fkick' then
|
||||
if tonumber(cmd[2]) then NET.room_kick(tonumber(cmd[2]),NET.roomState.roomId) end
|
||||
elseif cmd[1]=='/fpw' then
|
||||
if cmd[2] then NET.room_setPW(cmd[2],NET.roomState.roomId) end
|
||||
elseif cmd[1]=='/fexit' or cmd[1]=='/fquit' then
|
||||
NET.room_remove(NET.roomState.roomId)
|
||||
|
||||
else
|
||||
NET.textBox:push{COLOR.R,'Invalid command'}
|
||||
end
|
||||
@@ -150,6 +173,8 @@ function scene.keyDown(key,isRep)
|
||||
else
|
||||
_switchChat()
|
||||
end
|
||||
elseif #key==1 and key:find("^[0-6]$") and kb.isDown('lctrl','rctrl') then
|
||||
NET.player_joinGroup(tonumber(key))
|
||||
elseif not inputBox.hide then
|
||||
WIDGET.focus(inputBox)
|
||||
inputBox:keypress(key)
|
||||
@@ -343,6 +368,15 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='ready', x=1060,y=510,w=360,h=90,color='lG',font=35, code=_setReady,hideF=_hideF_ready},
|
||||
WIDGET.newKey{name='spectate',x=1060,y=610,w=360,h=90,color='lO',font=35, code=_setSpectate,hideF=_hideF_ready},
|
||||
WIDGET.newKey{name='cancel', x=1060,y=560,w=360,h=120,color='lH',font=40,code=_setCancel,hideF=_hideF_standby},
|
||||
|
||||
WIDGET.newButton{x=320,y=45,w=40,color='Z', fText="",code=function() NET.player_joinGroup(0) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=190,y=25,w=30,color='lR',fText="",code=function() NET.player_joinGroup(1) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=230,y=25,w=30,color='lG',fText="",code=function() NET.player_joinGroup(2) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=270,y=25,w=30,color='lB',fText="",code=function() NET.player_joinGroup(3) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=190,y=65,w=30,color='lY',fText="",code=function() NET.player_joinGroup(4) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=230,y=65,w=30,color='lM',fText="",code=function() NET.player_joinGroup(5) end,hideF=_hideF_ready},
|
||||
WIDGET.newButton{x=270,y=65,w=30,color='lC',fText="",code=function() NET.player_joinGroup(6) end,hideF=_hideF_ready},
|
||||
|
||||
WIDGET.newKey{name='chat', x=390,y=45,w=60,fText="···", code=_switchChat},
|
||||
WIDGET.newKey{name='quit', x=890,y=45,w=60,font=30,fText=CHAR.icon.cross_thick,code=_quit},
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('league')
|
||||
BGM.play('exploration')
|
||||
end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
NET.ws_close()
|
||||
TASK.removeTask_code(NET.ws_update)
|
||||
end
|
||||
|
||||
@@ -50,11 +50,11 @@ local function _createRoom()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
sure=0
|
||||
destroyPlayers()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
BGM.play()
|
||||
end
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ local function _fetchRoom()
|
||||
end
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
_fetchRoom()
|
||||
end
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
local gc=love.graphics
|
||||
local sin,log=math.sin,math.log10
|
||||
|
||||
local GAME,SCR=GAME,SCR
|
||||
local setFont,mStr=FONT.set,GC.mStr
|
||||
local sin,log=math.sin,math.log10
|
||||
local GC=GC
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -17,7 +15,7 @@ local rank-- Current rank
|
||||
local trophy-- Current trophy
|
||||
local trophyColor-- Current trophy color
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
page=0
|
||||
if SCN.prev:find("setting") then
|
||||
TEXT.show(text.needRestart,640,410,50,'fly',.6)
|
||||
@@ -116,7 +114,7 @@ function scene.sceneInit()
|
||||
GAME.prevBG=false
|
||||
end
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
trySave()
|
||||
end
|
||||
|
||||
@@ -181,7 +179,7 @@ local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}
|
||||
for i=1,6 do hexList[i]=hexList[i]*150 end
|
||||
local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25}
|
||||
local dataPos={90,143,-90,143,-200,-13,-90,-169,90,-169,200,-13}
|
||||
local tasText=gc.newText(getFont(100),"TAS")
|
||||
local tasText=GC.newText(getFont(100),"TAS")
|
||||
function scene.draw()
|
||||
if timer1<1 or GAME.result then
|
||||
SCN.scenes.game.draw()
|
||||
@@ -190,157 +188,157 @@ function scene.draw()
|
||||
-- Dark BG
|
||||
local _=timer1
|
||||
if GAME.result then _=_*.76 end
|
||||
gc.setColor(.12,.12,.12,_)
|
||||
gc.replaceTransform(SCR.origin)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.replaceTransform(SCR.xOy)
|
||||
GC.setColor(.12,.12,.12,_)
|
||||
GC.replaceTransform(SCR.origin)
|
||||
GC.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
GC.replaceTransform(SCR.xOy)
|
||||
|
||||
gc.setColor(.97,.97,.97,timer1)
|
||||
GC.setColor(.97,.97,.97,timer1)
|
||||
|
||||
-- Result Text
|
||||
mDraw(GAME.result and TEXTOBJ[GAME.result] or TEXTOBJ.pause,640,70-10*(5-timer1*5)^1.5)
|
||||
|
||||
-- Mode Info (outside)
|
||||
gc.draw(TEXTOBJ.modeName,745-TEXTOBJ.modeName:getWidth(),143)
|
||||
GC.draw(TEXTOBJ.modeName,745-TEXTOBJ.modeName:getWidth(),143)
|
||||
|
||||
-- Level rank
|
||||
if RANK_CHARS[GAME.rank] then
|
||||
gc.push('transform')
|
||||
gc.translate(1050,5)
|
||||
setFont(80)
|
||||
gc.setColor(0,0,0,timer1*.7)
|
||||
gc.print(RANK_CHARS[GAME.rank],-5,-4,nil,1.5)
|
||||
GC.push('transform')
|
||||
GC.translate(1050,5)
|
||||
FONT.set(80)
|
||||
GC.setColor(0,0,0,timer1*.7)
|
||||
GC.print(RANK_CHARS[GAME.rank],-5,-4,nil,1.5)
|
||||
local L=RANK_COLORS[GAME.rank]
|
||||
gc.setColor(L[1],L[2],L[3],timer1)
|
||||
gc.print(RANK_CHARS[GAME.rank],0,0,nil,1.5)
|
||||
gc.pop()
|
||||
GC.setColor(L[1],L[2],L[3],timer1)
|
||||
GC.print(RANK_CHARS[GAME.rank],0,0,nil,1.5)
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
if GAME.tasUsed then
|
||||
gc.setColor(.97,.97,.97,timer1*.08)
|
||||
GC.setColor(.97,.97,.97,timer1*.08)
|
||||
mDraw(tasText,870,395,.3,2.6)
|
||||
end
|
||||
|
||||
-- Big info frame
|
||||
if PLAYERS[1].frameRun>=180 then
|
||||
gc.push('transform')
|
||||
gc.translate(560,205)
|
||||
gc.setLineWidth(2)
|
||||
GC.push('transform')
|
||||
GC.translate(560,205)
|
||||
GC.setLineWidth(2)
|
||||
|
||||
-- Pause Info (outside)
|
||||
setFont(25)
|
||||
FONT.set(25)
|
||||
if GAME.pauseCount>0 then
|
||||
gc.setColor(.97,.97,.97,timer1*.06)
|
||||
gc.rectangle('fill',-5,390,620,36,8)
|
||||
gc.setColor(.97,.97,.97,timer1)
|
||||
gc.rectangle('line',-5,390,620,36,8)
|
||||
mStr(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),305,389)
|
||||
GC.setColor(.97,.97,.97,timer1*.06)
|
||||
GC.rectangle('fill',-5,390,620,36,8)
|
||||
GC.setColor(.97,.97,.97,timer1)
|
||||
GC.rectangle('line',-5,390,620,36,8)
|
||||
GC.mStr(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),305,389)
|
||||
end
|
||||
|
||||
-- Pages
|
||||
if page==0 then
|
||||
-- Frame
|
||||
gc.setColor(.97,.97,.97,timer2*.06)
|
||||
gc.rectangle('fill',-5,-5,620,380,8)
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
gc.rectangle('line',-5,-5,620,380,8)
|
||||
GC.setColor(.97,.97,.97,timer2*.06)
|
||||
GC.rectangle('fill',-5,-5,620,380,8)
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
GC.rectangle('line',-5,-5,620,380,8)
|
||||
|
||||
-- Game statistics
|
||||
gc.push('transform')
|
||||
gc.scale(.85)
|
||||
gc.setLineWidth(2)
|
||||
GC.push('transform')
|
||||
GC.scale(.85)
|
||||
GC.setLineWidth(2)
|
||||
|
||||
-- Stats
|
||||
_=form
|
||||
setFont(30)
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
FONT.set(30)
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
for i=1,10 do
|
||||
gc.print(text.pauseStat[i],5,43*(i-1)+2)
|
||||
gc.printf(_[i],210,43*(i-1)+2,500,'right')
|
||||
GC.print(text.pauseStat[i],5,43*(i-1)+2)
|
||||
GC.printf(_[i],210,43*(i-1)+2,500,'right')
|
||||
end
|
||||
|
||||
-- Finesse rank & trophy
|
||||
if rank then
|
||||
setFont(40)
|
||||
gc.setColor(.7,.7,.7,timer2)
|
||||
gc.print(rank,405,383)
|
||||
FONT.set(40)
|
||||
GC.setColor(.7,.7,.7,timer2)
|
||||
GC.print(rank,405,383)
|
||||
if trophy then
|
||||
setFont(30)
|
||||
gc.setColor(trophyColor[1],trophyColor[2],trophyColor[3],timer2*2-1)
|
||||
gc.printf(trophy,95-120*(1-timer2^.5),390,300,'right')
|
||||
FONT.set(30)
|
||||
GC.setColor(trophyColor[1],trophyColor[2],trophyColor[3],timer2*2-1)
|
||||
GC.printf(trophy,95-120*(1-timer2^.5),390,300,'right')
|
||||
end
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
elseif page==1 then
|
||||
-- Radar Chart
|
||||
gc.setLineWidth(1)
|
||||
gc.push('transform')
|
||||
gc.translate(310,185)
|
||||
GC.setLineWidth(1)
|
||||
GC.push('transform')
|
||||
GC.translate(310,185)
|
||||
|
||||
-- Polygon
|
||||
gc.push('transform')
|
||||
gc.scale((3-2*timer2)*timer2)
|
||||
gc.setColor(.97,.97,.97,timer2*(.5+.3*sin(TIME()*6.26)))
|
||||
GC.push('transform')
|
||||
GC.scale((3-2*timer2)*timer2)
|
||||
GC.setColor(.97,.97,.97,timer2*(.5+.3*sin(TIME()*6.26)))
|
||||
GC.regRoundPolygon('line',0,0,120,6,8)
|
||||
gc.setColor(chartColor[1],chartColor[2],chartColor[3],timer2*.626)
|
||||
GC.setColor(chartColor[1],chartColor[2],chartColor[3],timer2*.626)
|
||||
for i=1,9,2 do
|
||||
gc.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3])
|
||||
GC.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3])
|
||||
end
|
||||
gc.polygon('fill',0,0,val[11],val[12],val[1],val[2])
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
GC.polygon('fill',0,0,val[11],val[12],val[1],val[2])
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
for i=1,9,2 do
|
||||
gc.line(val[i],val[i+1],val[i+2],val[i+3])
|
||||
GC.line(val[i],val[i+1],val[i+2],val[i+3])
|
||||
end
|
||||
gc.line(val[11],val[12],val[1],val[2])
|
||||
gc.pop()
|
||||
GC.line(val[11],val[12],val[1],val[2])
|
||||
GC.pop()
|
||||
|
||||
-- Texts
|
||||
local C
|
||||
_=TIME()%6.2832
|
||||
if _>3.142 then
|
||||
gc.setColor(.97,.97,.97,-timer2*sin(_))
|
||||
setFont(35)
|
||||
GC.setColor(.97,.97,.97,-timer2*sin(_))
|
||||
FONT.set(35)
|
||||
C,_=text.radar,textPos
|
||||
else
|
||||
gc.setColor(.97,.97,.97,timer2*sin(_))
|
||||
setFont(20)
|
||||
GC.setColor(.97,.97,.97,timer2*sin(_))
|
||||
FONT.set(20)
|
||||
C,_=radar,dataPos
|
||||
end
|
||||
for i=1,6 do
|
||||
mStr(C[i],_[2*i-1],_[2*i])
|
||||
GC.mStr(C[i],_[2*i-1],_[2*i])
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
-- Mods
|
||||
gc.push('transform')
|
||||
gc.translate(131,600)
|
||||
gc.scale(.65)
|
||||
GC.push('transform')
|
||||
GC.translate(131,600)
|
||||
GC.scale(.65)
|
||||
if #GAME.mod>0 then
|
||||
gc.setLineWidth(2)
|
||||
GC.setLineWidth(2)
|
||||
if scoreValid() then
|
||||
gc.setColor(.7,.7,.7,timer1)
|
||||
gc.rectangle('line',-5,-5,500,150,8)
|
||||
gc.setColor(.7,.7,.7,timer1*.05)
|
||||
gc.rectangle('fill',-5,-5,500,150,8)
|
||||
GC.setColor(.7,.7,.7,timer1)
|
||||
GC.rectangle('line',-5,-5,500,150,8)
|
||||
GC.setColor(.7,.7,.7,timer1*.05)
|
||||
GC.rectangle('fill',-5,-5,500,150,8)
|
||||
else
|
||||
gc.setColor(.8,0,0,timer1)
|
||||
gc.rectangle('line',-5,-5,500,150,8)
|
||||
gc.setColor(1,0,0,timer1*.05)
|
||||
gc.rectangle('fill',-5,-5,500,150,8)
|
||||
GC.setColor(.8,0,0,timer1)
|
||||
GC.rectangle('line',-5,-5,500,150,8)
|
||||
GC.setColor(1,0,0,timer1*.05)
|
||||
GC.rectangle('fill',-5,-5,500,150,8)
|
||||
end
|
||||
setFont(35)
|
||||
FONT.set(35)
|
||||
for _,M in next,MODOPT do
|
||||
if M.sel>0 then
|
||||
_=M.color
|
||||
gc.setColor(_[1],_[2],_[3],timer1)
|
||||
mStr(M.id,35+M.no%8*60,math.floor(M.no/8)*45)
|
||||
GC.setColor(_[1],_[2],_[3],timer1)
|
||||
GC.mStr(M.id,35+M.no%8*60,math.floor(M.no/8)*45)
|
||||
end
|
||||
end
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
if SYSTEM~="iOS" then
|
||||
function scene.enter()
|
||||
if SYSTEM=="iOS" then
|
||||
MES.update(1e99)
|
||||
Z.setPowerInfo(false)
|
||||
Z.setClickFX(false)
|
||||
VERSION.string=""
|
||||
MES.new('error',"Please swipe up or press Home button to quit Techmino on iOS",1e99)
|
||||
else
|
||||
if math.random()>.0000626 then
|
||||
love.timer.sleep(.26)
|
||||
love.event.quit()
|
||||
else
|
||||
error("So lucky! 0.00626% to get this!! You can quit the game now.")
|
||||
end
|
||||
else
|
||||
MES.update(1e99)
|
||||
Z.setPowerInfo(false)
|
||||
Z.setClickFX(false)
|
||||
VERSION.string=""
|
||||
MES.new('error',"Please swipe up or press Home button to quit Techmino on iOS",1e99)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ local function _updateButtonVisibility()
|
||||
scene.widgetList[i].hide=hide
|
||||
end
|
||||
end
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
listBox:setList(REPLAY)
|
||||
_updateButtonVisibility()
|
||||
|
||||
@@ -14,6 +14,17 @@ local function _setPW()
|
||||
NET.setPW(code,password)
|
||||
end
|
||||
end
|
||||
local function _paste()
|
||||
local t=love.system.getClipboardText()
|
||||
if t then
|
||||
t=STRING.trim(t)
|
||||
if #t==8 and t:match("[0-9]+") then
|
||||
scene.widgetList.code:setText(t)
|
||||
return
|
||||
end
|
||||
end
|
||||
MES.new('warn',text.wrongCode)
|
||||
end
|
||||
|
||||
function scene.enter()
|
||||
if SCN.args[1] then
|
||||
@@ -29,6 +40,8 @@ function scene.keyDown(key,rep)
|
||||
else
|
||||
_setPW()
|
||||
end
|
||||
elseif key=='v' and love.keyboard.isDown('lctrl','rctrl') then
|
||||
_paste()
|
||||
else
|
||||
return true
|
||||
end
|
||||
@@ -37,11 +50,13 @@ end
|
||||
scene.widgetList={
|
||||
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
|
||||
|
||||
WIDGET.newInputBox{name='code', x=380, y=170,w=626,h=60,regex="[0-9a-zA-Z]",limit=8},
|
||||
WIDGET.newKey{name='send', x=640, y=300,w=300,h=80,font=40,code=function() NET.getCode(USER.email) end},
|
||||
WIDGET.newInputBox{name='code', x=380, y=170,w=626,h=60,limit=8},
|
||||
|
||||
WIDGET.newInputBox{name='password', x=380, y=370,w=626,h=60,secret=true,regex="[ -~]",limit=64},
|
||||
WIDGET.newInputBox{name='password2',x=380, y=470,w=626,h=60,secret=true,regex="[ -~]",limit=64},
|
||||
WIDGET.newKey{name='setPW', x=640, y=600,w=350,h=80,font=40,code=_setPW},
|
||||
WIDGET.newKey{name='paste', x=850, y=300,w=80,font=40,fText=CHAR.icon.import,code=_paste},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ local scene={}
|
||||
local das,arr
|
||||
local pos,dir,wait
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
das,arr=SETTING.das,SETTING.arr
|
||||
pos,dir,wait=0,1,30
|
||||
BG.set('bg1')
|
||||
|
||||
@@ -2,10 +2,10 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
|
||||
@@ -98,12 +98,12 @@ local function _freshKeyList()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selected=false
|
||||
_freshKeyList()
|
||||
BG.set('none')
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(KEY_MAP,'conf/key')
|
||||
end
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ local playEgg=WIDGET.newButton{name='playEgg', x=1140,y=540,w=140,h=65,color='l
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selEggMode=false
|
||||
scene.widgetList.playEgg.hide=true
|
||||
BG.set()
|
||||
|
||||
@@ -8,7 +8,7 @@ local last1,last2-- Last touch/sound time
|
||||
local sfxPack=SETTING.sfxPack
|
||||
local vocPack=SETTING.vocPack
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
last1,last2=0,0
|
||||
sfxPack=SETTING.sfxPack
|
||||
vocPack=SETTING.vocPack
|
||||
@@ -16,7 +16,7 @@ function scene.sceneInit()
|
||||
scene.widgetList.vocPack:reset()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
@@ -74,9 +74,6 @@ function scene.draw()
|
||||
elseif vocPack=="miku" then
|
||||
gc.translate(700,320+12*sin(TIME()*.5))
|
||||
gc.draw(IMG.mikuCH,nil,nil,nil,.8)
|
||||
elseif vocPack=="rin" then
|
||||
gc.translate(820,280+12*sin(TIME()*.5))
|
||||
gc.draw(IMG.rinCH,nil,nil,nil,.8)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
@@ -31,12 +31,12 @@ local function _load2()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow')
|
||||
defaultSetSelect=1
|
||||
selected=false
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(VK_ORG,'conf/virtualkey')
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('matrix')
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
local gc=love.graphics
|
||||
local kb,tc=love.keyboard,love.touch
|
||||
local rnd=math.random
|
||||
local ins,rem=table.insert,table.remove
|
||||
@@ -10,7 +9,7 @@ local patron=require"parts.patron"
|
||||
local names
|
||||
local counter
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
time=0
|
||||
v=22.6
|
||||
BG.set()
|
||||
@@ -50,7 +49,7 @@ function scene.update(dt)
|
||||
counter=counter-1
|
||||
if counter==0 then
|
||||
local N=patron[rnd(#patron)]
|
||||
local T=gc.newText(getFont(N.font),N.name)
|
||||
local T=GC.newText(getFont(N.font),N.name)
|
||||
local r=rnd()<.5
|
||||
ins(names,{
|
||||
text=T,
|
||||
@@ -71,26 +70,26 @@ function scene.update(dt)
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.replaceTransform(SCR.origin)
|
||||
gc.setColor(1,1,1,.3)
|
||||
GC.replaceTransform(SCR.origin)
|
||||
GC.setColor(1,1,1,.3)
|
||||
for i=1,#names do
|
||||
local N=names[i]
|
||||
gc.draw(N.text,N.x,N.y)
|
||||
GC.draw(N.text,N.x,N.y)
|
||||
end
|
||||
|
||||
gc.replaceTransform(SCR.xOy)
|
||||
GC.replaceTransform(SCR.xOy)
|
||||
local T=40*math.min(time,185)
|
||||
gc.setColor(.97,.97,.97,185-math.min(time,185))
|
||||
GC.setColor(.97,.97,.97,185-math.min(time,185))
|
||||
local L=text.staff
|
||||
setFont(40)
|
||||
for i=1,#L do
|
||||
GC.mStr(L[i],640,950+65*i-T)
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
GC.setColor(1,1,1)
|
||||
mDraw(TEXTURE.title_color,640,900-T,nil,.6)
|
||||
mDraw(TEXTURE.title,640,7770-T,nil,.6)
|
||||
if time>190 then
|
||||
gc.print("CLICK ME →",50,550,-.5)
|
||||
GC.print("CLICK ME →",50,550,-.5)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ local scene={}
|
||||
local form-- Form of clear & spins
|
||||
local item-- Detail datas
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
local S=STAT
|
||||
local X1,X2,Y1,Y2={0,0,0,0},{0,0,0,0},{},{}
|
||||
|
||||
@@ -9,7 +9,7 @@ local function _push(mes)
|
||||
timer=1
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
backCounter=5
|
||||
list={}
|
||||
timer=0
|
||||
|
||||
@@ -2,6 +2,24 @@ return[=[
|
||||
未来计划:
|
||||
正在点亮科技树...
|
||||
|
||||
0.17.9: 暂停 Break
|
||||
修复:
|
||||
第一次启动选择语言后直接就退出了
|
||||
攻击竞速模式左侧攻击数字从%.1f改为%d #780
|
||||
SRS+旋转系统I的踢墙表不对称(之前就是SRS的压根没改) #772
|
||||
两个堆叠模式消除垃圾行的时候没减少内部的垃圾行高计数
|
||||
require模块在mac系统下可能崩溃 #788
|
||||
没登录的时候回合制必定崩溃
|
||||
|
||||
0.17.8: 暂停 Break
|
||||
新增:
|
||||
联网游戏房间菜单添加选队伍按钮,键盘可以用ctrl+数字切换
|
||||
粘贴验证码按钮
|
||||
修复:
|
||||
联网游戏死亡前打出攻击会导致其他人不同步
|
||||
联网游戏聊天框看不全
|
||||
其他玩家进房check是否已存在的时候因为访问不存在的玩家而报错
|
||||
|
||||
0.17.7: 暂停 Break
|
||||
新增:
|
||||
联网能玩了
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return {
|
||||
["apkCode"]=451,
|
||||
["code"]=1707,
|
||||
["string"]="V0.17.7",
|
||||
["room"]="ver A-7",
|
||||
["apkCode"]=453,
|
||||
["code"]=1709,
|
||||
["string"]="V0.17.9",
|
||||
["room"]="ver A-9",
|
||||
["name"]="暂停 Break",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user