Compare commits
39 Commits
pre1
...
pre0.16.5-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
230d67492e | ||
|
|
4f9d5b282c | ||
|
|
a2955e8722 | ||
|
|
df892671d5 | ||
|
|
7fa96eee1a | ||
|
|
a1030906c7 | ||
|
|
e6a9a4f4be | ||
|
|
efa1247596 | ||
|
|
069fcee721 | ||
|
|
66621404f1 | ||
|
|
e09609ea21 | ||
|
|
d02ae67bc0 | ||
|
|
27327d57c4 | ||
|
|
cce93b6df9 | ||
|
|
546104ba5b | ||
|
|
ca5816ba14 | ||
|
|
e5bd16476e | ||
|
|
94431d4c2e | ||
|
|
f98d6892f1 | ||
|
|
1fe436cbe3 | ||
|
|
c5a37a9920 | ||
|
|
eed7e96096 | ||
|
|
a7f36a4162 | ||
|
|
8ba872d45d | ||
|
|
7a55451faa | ||
|
|
372571bd80 | ||
|
|
77120c0b90 | ||
|
|
01d1e44644 | ||
|
|
0ad8cddefe | ||
|
|
ce67253502 | ||
|
|
cb9f2c0617 | ||
|
|
635d9407ed | ||
|
|
0f9f6565f1 | ||
|
|
a45b6ad57e | ||
|
|
a5de06dedb | ||
|
|
fbfbd1ed98 | ||
|
|
8f06b3bd1a | ||
|
|
7e0dbceefc | ||
|
|
7e3db1de17 |
5
.github/actions/upload-artifact/action.yml
vendored
5
.github/actions/upload-artifact/action.yml
vendored
@@ -19,6 +19,9 @@ inputs:
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.9'
|
||||
- name: Install Webdav 4
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -34,7 +37,7 @@ runs:
|
||||
auth=("${{ inputs.WEBDAV_USERNAME }}", "${{ inputs.WEBDAV_PASSWORD }}"),
|
||||
timeout=None,
|
||||
)
|
||||
if '${{ inputs.ARTIFACT_TYPE }}' == 'release'
|
||||
if '${{ inputs.ARTIFACT_TYPE }}' == 'release':
|
||||
print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} release file...')
|
||||
for file in client.ls('Techmino distribution'):
|
||||
if re.search(r'(Techmino_a[0-9]+\.[0-9]+\.[0-9]_${{ inputs.ARTIFACT_PLATFORM }}.*)', file['name']):
|
||||
|
||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -198,7 +198,7 @@ jobs:
|
||||
- name: Pack Techmino
|
||||
run: mv Techmino.ipa Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifacts
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
|
||||
@@ -16,62 +16,62 @@ end
|
||||
local COLOR={
|
||||
hsv=hsv,
|
||||
|
||||
red= {hsv(0, .85,.85)},
|
||||
fire= {hsv(0.0625,.85,.85)},
|
||||
orange= {hsv(0.125, .85,.85)},
|
||||
yellow= {hsv(0.1875,.85,.85)},
|
||||
lime= {hsv(0.25, .85,.85)},
|
||||
jade= {hsv(0.3125,.85,.85)},
|
||||
green= {hsv(0.375, .85,.85)},
|
||||
aqua= {hsv(0.4375,.85,.85)},
|
||||
cyan= {hsv(0.5, .85,.85)},
|
||||
navy= {hsv(0.5625,.85,.85)},
|
||||
sea= {hsv(0.625, .85,.85)},
|
||||
blue= {hsv(0.6875,.85,.85)},
|
||||
violet= {hsv(0.75, .85,.85)},
|
||||
purple= {hsv(0.8125,.85,.85)},
|
||||
magenta= {hsv(0.875, .85,.85)},
|
||||
wine= {hsv(0.9375,.85,.85)},
|
||||
red= {hsv(0.00, 0.89, 0.91)},
|
||||
fire= {hsv(0.04, 0.93, 0.94)},
|
||||
orange= {hsv(0.09, 0.99, 0.96)},
|
||||
yellow= {hsv(0.16, 0.82, 0.90)},
|
||||
lime= {hsv(0.18, 0.89, 0.88)},
|
||||
jade= {hsv(0.23, 1.00, 0.82)},
|
||||
green= {hsv(0.33, 1.00, 0.81)},
|
||||
aqua= {hsv(0.48, 1.00, 0.74)},
|
||||
cyan= {hsv(0.53, 1.00, 0.88)},
|
||||
navy= {hsv(0.56, 1.00, 1.00)},
|
||||
sea= {hsv(0.61, 1.00, 1.00)},
|
||||
blue= {hsv(0.64, 1.00, 0.95)},
|
||||
violet= {hsv(0.73, 1.00, 0.91)},
|
||||
purple= {hsv(0.80, 1.00, 0.81)},
|
||||
magenta= {hsv(0.86, 1.00, 0.78)},
|
||||
wine= {hsv(0.94, 0.96, 0.91)},
|
||||
|
||||
lRed= {hsv(0, .5,.95)},
|
||||
lFire= {hsv(0.0625,.5,.95)},
|
||||
lOrange= {hsv(0.125, .5,.95)},
|
||||
lYellow= {hsv(0.1875,.5,.95)},
|
||||
lLime= {hsv(0.25, .5,.95)},
|
||||
lJade= {hsv(0.3125,.5,.95)},
|
||||
lGreen= {hsv(0.375, .5,.95)},
|
||||
lAqua= {hsv(0.4375,.5,.95)},
|
||||
lCyan= {hsv(0.5, .5,.95)},
|
||||
lNavy= {hsv(0.5625,.5,.95)},
|
||||
lSea= {hsv(0.625, .5,.95)},
|
||||
lBlue= {hsv(0.6875,.5,.95)},
|
||||
lViolet= {hsv(0.75, .5,.95)},
|
||||
lPurple= {hsv(0.8125,.5,.95)},
|
||||
lMagenta={hsv(0.875, .5,.95)},
|
||||
lWine= {hsv(0.9375,.5,.95)},
|
||||
lRed= {hsv(0.00, 0.38, 0.93)},
|
||||
lFire= {hsv(0.04, 0.45, 0.91)},
|
||||
lOrange= {hsv(0.10, 0.53, 0.92)},
|
||||
lYellow= {hsv(0.15, 0.61, 0.95)},
|
||||
lLime= {hsv(0.19, 0.66, 0.92)},
|
||||
lJade= {hsv(0.24, 0.56, 0.90)},
|
||||
lGreen= {hsv(0.34, 0.49, 0.89)},
|
||||
lAqua= {hsv(0.49, 0.59, 0.85)},
|
||||
lCyan= {hsv(0.51, 0.77, 0.88)},
|
||||
lNavy= {hsv(0.54, 0.80, 0.95)},
|
||||
lSea= {hsv(0.56, 0.72, 0.97)},
|
||||
lBlue= {hsv(0.64, 0.44, 0.96)},
|
||||
lViolet= {hsv(0.73, 0.47, 0.95)},
|
||||
lPurple= {hsv(0.80, 0.62, 0.89)},
|
||||
lMagenta= {hsv(0.86, 0.61, 0.89)},
|
||||
lWine= {hsv(0.93, 0.57, 0.92)},
|
||||
|
||||
dRed= {hsv(0, .9,.5)},
|
||||
dFire= {hsv(0.0625,.9,.5)},
|
||||
dOrange= {hsv(0.125, .9,.5)},
|
||||
dYellow= {hsv(0.1875,.9,.5)},
|
||||
dLime= {hsv(0.25, .9,.5)},
|
||||
dJade= {hsv(0.3125,.9,.5)},
|
||||
dGreen= {hsv(0.375, .9,.5)},
|
||||
dAqua= {hsv(0.4375,.9,.5)},
|
||||
dCyan= {hsv(0.5, .9,.5)},
|
||||
dNavy= {hsv(0.5625,.9,.5)},
|
||||
dSea= {hsv(0.625, .9,.5)},
|
||||
dBlue= {hsv(0.6875,.9,.5)},
|
||||
dViolet= {hsv(0.75, .9,.5)},
|
||||
dPurple= {hsv(0.8125,.9,.5)},
|
||||
dMagenta={hsv(0.875, .9,.5)},
|
||||
dWine= {hsv(0.9375,.9,.5)},
|
||||
dRed= {hsv(0.00, 0.80, 0.48)},
|
||||
dFire= {hsv(0.04, 0.80, 0.34)},
|
||||
dOrange= {hsv(0.07, 0.80, 0.39)},
|
||||
dYellow= {hsv(0.11, 0.80, 0.37)},
|
||||
dLime= {hsv(0.17, 0.80, 0.26)},
|
||||
dJade= {hsv(0.31, 0.80, 0.27)},
|
||||
dGreen= {hsv(0.33, 0.80, 0.26)},
|
||||
dAqua= {hsv(0.47, 0.80, 0.23)},
|
||||
dCyan= {hsv(0.50, 0.80, 0.30)},
|
||||
dNavy= {hsv(0.59, 0.80, 0.42)},
|
||||
dSea= {hsv(0.64, 0.80, 0.40)},
|
||||
dBlue= {hsv(0.67, 0.80, 0.34)},
|
||||
dViolet= {hsv(0.71, 0.80, 0.35)},
|
||||
dPurple= {hsv(0.76, 0.80, 0.32)},
|
||||
dMagenta= {hsv(0.87, 0.80, 0.28)},
|
||||
dWine= {hsv(0.92, 0.80, 0.28)},
|
||||
|
||||
black= {hsv(0,0,.05)},
|
||||
dGray= {hsv(0,0,0.3)},
|
||||
gray= {hsv(0,0,0.6)},
|
||||
lGray= {hsv(0,0,0.8)},
|
||||
white= {hsv(0,0,.97)},
|
||||
black= {hsv(0.04, 0.04, 0.14)},
|
||||
dGray= {hsv(0.02, 0.05, 0.44)},
|
||||
gray= {hsv(0.02, 0.05, 0.65)},
|
||||
lGray= {hsv(0.02, 0.06, 0.86)},
|
||||
white= {hsv(0.01, 0.02, 0.99)},
|
||||
}
|
||||
for k,v in next,{
|
||||
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',
|
||||
|
||||
Binary file not shown.
@@ -686,13 +686,7 @@ do
|
||||
sfx='prerotate'
|
||||
elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then
|
||||
sfx='rotatekick'
|
||||
if P.gameEnv.shakeFX then
|
||||
if d==1 or d==3 then
|
||||
P.fieldOff.va=P.fieldOff.va+(2-d)*6e-3
|
||||
else
|
||||
P.fieldOff.va=P.fieldOff.va+P:getCenterX()*3e-3
|
||||
end
|
||||
end
|
||||
P:_rotateField(d)
|
||||
else
|
||||
sfx='rotate'
|
||||
end
|
||||
|
||||
@@ -33,6 +33,7 @@ return{
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
P:shakeField(9)
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
|
||||
@@ -42,6 +42,7 @@ return{
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
end
|
||||
P:shakeField(10)
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,6 +40,7 @@ return{
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
P.dropDelay,P.gameEnv.drop=2,2
|
||||
end
|
||||
P:shakeField(3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,6 +40,7 @@ return{
|
||||
P.dropDelay,P.gameEnv.drop=5,5
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
P:shakeField(3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -89,6 +89,7 @@ return
|
||||
ENV.bone=true
|
||||
|
||||
P.modeData.target=62
|
||||
SFX.play('reach')
|
||||
else
|
||||
p=41
|
||||
end
|
||||
@@ -112,6 +113,7 @@ return
|
||||
ENV.fall=4
|
||||
|
||||
P.modeData.target=162
|
||||
SFX.play('reach')
|
||||
elseif T==162 then--Stage 7: speed up+++
|
||||
P:stageComplete(7)
|
||||
P.life=P.life+1
|
||||
@@ -146,6 +148,7 @@ return
|
||||
P.modeData.target=260
|
||||
p=260
|
||||
SFX.play('blip_2')
|
||||
SFX.play('reach')
|
||||
else
|
||||
p=260
|
||||
end
|
||||
|
||||
@@ -21,6 +21,7 @@ return{
|
||||
if D.wave==60 then
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
P:shakeField(3)
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
|
||||
@@ -24,6 +24,7 @@ return{
|
||||
if D.wave==30 then
|
||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||
end
|
||||
P:shakeField(9)
|
||||
D.timer=0
|
||||
D.wave=D.wave+1
|
||||
end
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@ return{
|
||||
{"Translator Note 1",
|
||||
"",
|
||||
"help",
|
||||
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text.\n\nCorrected by C29H25N3O5.\n\nTo view the list of contributors or make contributions, feel free to visit the GitHub page.",
|
||||
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text.\n\nCorrected by C₂₉H₂₅N₃O₅.\n\nTo view the list of contributors or make contributions, feel free to visit the GitHub page.",
|
||||
"https://github.com/26F-Studio/Techmino/blob/main/parts/language/dict_en.lua",
|
||||
},
|
||||
{"Official Website",
|
||||
|
||||
@@ -119,8 +119,15 @@ local function _stencilBoard()gc_rectangle('fill',0,-10,300,610)end
|
||||
local function _applyField(P)
|
||||
gc_push('transform')
|
||||
|
||||
--Apply fieldOffset
|
||||
local O=P.fieldOff
|
||||
--Apply shaking
|
||||
if P.shakeTimer>0 then
|
||||
local dx=int(P.shakeTimer/2)
|
||||
local dy=int(P.shakeTimer/3)
|
||||
gc_translate(dx^1.6*(dx%2*2-1)*(P.gameEnv.shakeFX+1)/30,dy^1.4*(dy%2*2-1)*(P.gameEnv.shakeFX+1)/30)
|
||||
end
|
||||
|
||||
--Apply swingOffset
|
||||
local O=P.swingOffset
|
||||
if P.gameEnv.shakeFX then
|
||||
local k=P.gameEnv.shakeFX
|
||||
gc_translate(O.x*k+150+150,O.y*k+300)
|
||||
|
||||
@@ -102,11 +102,12 @@ local function _newEmptyPlayer(id,mini)
|
||||
end
|
||||
|
||||
--Field position
|
||||
P.fieldOff={--Shake FX
|
||||
P.swingOffset={--Shake FX
|
||||
x=0,y=0,
|
||||
vx=0,vy=0,
|
||||
a=0,va=0,
|
||||
}
|
||||
P.shakeTimer=0
|
||||
P.x,P.y,P.size=0,0,1
|
||||
P.frameColor=COLOR.Z
|
||||
|
||||
|
||||
@@ -30,6 +30,25 @@ end
|
||||
function Player:_createClearingFX(y,spd)--Not used
|
||||
ins(self.clearFX,{y,0,spd})
|
||||
end
|
||||
function Player:_rotateField(dir)
|
||||
if self.gameEnv.shakeFX then
|
||||
if dir==1 or dir==3 then
|
||||
self.swingOffset.va=self.swingOffset.va+(2-dir)*6e-3
|
||||
else
|
||||
self.swingOffset.va=self.swingOffset.va+self:getCenterX()*3e-3
|
||||
end
|
||||
end
|
||||
end
|
||||
function Player:shakeField(strength)--Range: 1~10
|
||||
if self.gameEnv.shakeFX then
|
||||
self.shakeTimer=max(self.shakeTimer,3*self.gameEnv.shakeFX+int(4*min(max(strength,1),10)))
|
||||
end
|
||||
end
|
||||
function Player:checkTouchSound()
|
||||
if self.sound and self.curY==self.ghoY then
|
||||
SFX.play('touch')
|
||||
end
|
||||
end
|
||||
function Player:showText(text,dx,dy,font,style,spd,stop)
|
||||
if self.gameEnv.text then
|
||||
ins(self.bonus,TEXT.getText(text,150+dx,300+dy,font,style,spd,stop))
|
||||
@@ -139,7 +158,7 @@ function Player:createSplashFX(h)
|
||||
if self.gameEnv.splashFX then
|
||||
local L=self.field[h]
|
||||
local size=self.size
|
||||
local y=self.fieldY+size*(self.fieldOff.y+self.fieldBeneath+self.fieldUp+615)-30*h*size
|
||||
local y=self.fieldY+size*(self.swingOffset.y+self.fieldBeneath+self.fieldUp+615)-30*h*size
|
||||
for x=1,10 do
|
||||
local c=L[x]
|
||||
if c>0 then
|
||||
@@ -481,6 +500,9 @@ function Player:receive(A,send,time,line)
|
||||
if self.sound then
|
||||
SFX.play(send<4 and'blip_1'or'blip_2',min(send+1,5)*.1)
|
||||
end
|
||||
if send>=2 then
|
||||
self:shakeField(send/2)
|
||||
end
|
||||
end
|
||||
end
|
||||
function Player:clearAttackBuffer()
|
||||
@@ -563,7 +585,7 @@ function Player:freshBlock(mode)--string mode: push/move/fresh/newBlock
|
||||
if self.curY>self.ghoY then
|
||||
self:createDropFX()
|
||||
if ENV.shakeFX then
|
||||
self.fieldOff.vy=.5
|
||||
self.swingOffset.vy=.5
|
||||
end
|
||||
self.curY=self.ghoY
|
||||
end
|
||||
@@ -605,10 +627,9 @@ function Player:freshBlock(mode)--string mode: push/move/fresh/newBlock
|
||||
end
|
||||
|
||||
--Play sound if touch ground
|
||||
if mode=='move'and self.sound and self.curY==self.ghoY then
|
||||
SFX.play('touch')
|
||||
if mode=='move'then
|
||||
self:checkTouchSound()
|
||||
end
|
||||
|
||||
end
|
||||
function Player:lock()
|
||||
local CB=self.cur.bk
|
||||
@@ -797,19 +818,13 @@ function Player:spin(d,ifpre)
|
||||
self.freshTime=self.freshTime-1
|
||||
end
|
||||
|
||||
--Sound & Field shaking
|
||||
--Sound & Field swinging
|
||||
local sfx
|
||||
if ifpre then
|
||||
sfx='prerotate'
|
||||
elseif self:ifoverlap(icb,ix,iy+1)and self:ifoverlap(icb,ix-1,iy)and self:ifoverlap(icb,ix+1,iy)then
|
||||
sfx='rotatekick'
|
||||
if self.gameEnv.shakeFX then
|
||||
if d==1 or d==3 then
|
||||
self.fieldOff.va=self.fieldOff.va+(2-d)*6e-3
|
||||
else
|
||||
self.fieldOff.va=self.fieldOff.va+self:getCenterX()*3e-3
|
||||
end
|
||||
end
|
||||
self:_rotateField(d)
|
||||
else
|
||||
sfx='rotate'
|
||||
end
|
||||
@@ -1846,10 +1861,10 @@ local function _updateMisc(P)
|
||||
end
|
||||
end
|
||||
|
||||
--Field shaking
|
||||
--Field swinging
|
||||
if P.gameEnv.shakeFX then
|
||||
local O=P.fieldOff
|
||||
O.vx=O.vx*.7-abs(O.x)^1.3*(O.x>0 and .1 or -.1)
|
||||
local O=P.swingOffset
|
||||
O.vx=O.vx*.6-abs(O.x)^1.3*(O.x>0 and .1 or -.1)
|
||||
O.x=O.x+O.vx
|
||||
|
||||
O.vy=O.vy*.7-abs(O.y)^1.2*(O.y>0 and .1 or -.1)
|
||||
@@ -1862,6 +1877,11 @@ local function _updateMisc(P)
|
||||
end
|
||||
end
|
||||
|
||||
--Field Shaking
|
||||
if P.shakeTimer>0 then
|
||||
P.shakeTimer=P.shakeTimer-1
|
||||
end
|
||||
|
||||
--Update texts
|
||||
if P.bonus then
|
||||
TEXT.update(1/60,P.bonus)
|
||||
@@ -1950,13 +1970,9 @@ local function update_alive(P)
|
||||
|
||||
if GAME.modeEnv.royaleMode then
|
||||
local v=P.swappingAtkMode
|
||||
if P.keyPressing[9]then
|
||||
P.swappingAtkMode=min(v+2,30)
|
||||
else
|
||||
local tar=#P.field>15 and 4 or 8
|
||||
if v~=tar then
|
||||
P.swappingAtkMode=v+(v<tar and 1 or -1)
|
||||
end
|
||||
local tar=#P.field>15 and 4 or 8
|
||||
if v~=tar then
|
||||
P.swappingAtkMode=v+(v<tar and 1 or -1)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1998,7 +2014,7 @@ local function update_alive(P)
|
||||
end
|
||||
end
|
||||
if mov>=das and ENV.shakeFX and P.cur and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
|
||||
P.fieldOff.vx=.5
|
||||
P.swingOffset.vx=.5
|
||||
end
|
||||
else
|
||||
P.movDir=0
|
||||
@@ -2023,7 +2039,7 @@ local function update_alive(P)
|
||||
end
|
||||
end
|
||||
if mov>=das and ENV.shakeFX and P.cur and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
|
||||
P.fieldOff.vx=-.5
|
||||
P.swingOffset.vx=-.5
|
||||
end
|
||||
else
|
||||
P.movDir=0
|
||||
@@ -2042,7 +2058,7 @@ local function update_alive(P)
|
||||
end
|
||||
|
||||
--Drop pressed
|
||||
if P.keyPressing[7]and not P.keyPressing[9]then
|
||||
if P.keyPressing[7]then
|
||||
P.downing=P.downing+1
|
||||
local d=P.downing-ENV.sddas
|
||||
if d>1 then
|
||||
@@ -2054,7 +2070,7 @@ local function update_alive(P)
|
||||
P:act_insDown()
|
||||
end
|
||||
if ENV.shakeFX then
|
||||
P.fieldOff.vy=.2
|
||||
P.swingOffset.vy=.2
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -2116,9 +2132,8 @@ local function update_alive(P)
|
||||
|
||||
if P.ghoY~=P.curY then
|
||||
P.dropDelay=ENV.drop
|
||||
elseif P.sound then
|
||||
SFX.play('touch')
|
||||
end
|
||||
P:checkTouchSound()
|
||||
else
|
||||
P.lockDelay=P.lockDelay-1
|
||||
if P.lockDelay>=0 then
|
||||
@@ -2435,12 +2450,7 @@ function Player:act_moveLeft(auto)
|
||||
self.ctrlCount=self.ctrlCount+1
|
||||
end
|
||||
self.movDir=-1
|
||||
if self.keyPressing[9]then
|
||||
if self.gameEnv.swap then
|
||||
self:changeAtkMode(1)
|
||||
self.keyPressing[1]=false
|
||||
end
|
||||
elseif self.control and self.waiting==-1 then
|
||||
if self.control and self.waiting==-1 then
|
||||
if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)then
|
||||
self:createMoveFX('left')
|
||||
self.curX=self.curX-1
|
||||
@@ -2461,12 +2471,7 @@ function Player:act_moveRight(auto)
|
||||
self.ctrlCount=self.ctrlCount+1
|
||||
end
|
||||
self.movDir=1
|
||||
if self.keyPressing[9]then
|
||||
if self.gameEnv.swap then
|
||||
self:changeAtkMode(2)
|
||||
self.keyPressing[2]=false
|
||||
end
|
||||
elseif self.control and self.waiting==-1 then
|
||||
if self.control and self.waiting==-1 then
|
||||
if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)then
|
||||
self:createMoveFX('right')
|
||||
self.curX=self.curX+1
|
||||
@@ -2505,12 +2510,7 @@ function Player:act_rot180()
|
||||
end
|
||||
function Player:act_hardDrop()
|
||||
local ENV=self.gameEnv
|
||||
if self.keyPressing[9]then
|
||||
if ENV.swap then
|
||||
self:changeAtkMode(3)
|
||||
end
|
||||
self.keyPressing[6]=false
|
||||
elseif self.control and self.waiting==-1 and self.cur then
|
||||
if self.control and self.waiting==-1 and self.cur then
|
||||
if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frame<ENV.dropcut then
|
||||
SFX.play('drop_cancel',.3)
|
||||
else
|
||||
@@ -2524,8 +2524,8 @@ function Player:act_hardDrop()
|
||||
end
|
||||
end
|
||||
if ENV.shakeFX then
|
||||
self.fieldOff.vy=.6
|
||||
self.fieldOff.va=self.fieldOff.va+self:getCenterX()*6e-4
|
||||
self.swingOffset.vy=.6
|
||||
self.swingOffset.va=self.swingOffset.va+self:getCenterX()*6e-4
|
||||
end
|
||||
self.lockDelay=-1
|
||||
self:drop()
|
||||
@@ -2535,30 +2535,25 @@ function Player:act_hardDrop()
|
||||
end
|
||||
function Player:act_softDrop()
|
||||
local ENV=self.gameEnv
|
||||
if self.keyPressing[9]then
|
||||
if ENV.swap then
|
||||
self:changeAtkMode(4)
|
||||
end
|
||||
else
|
||||
self.downing=1
|
||||
if self.control and self.waiting==-1 and self.cur then
|
||||
if self.curY>self.ghoY then
|
||||
self.curY=self.curY-1
|
||||
self:freshBlock('fresh')
|
||||
self.spinLast=false
|
||||
elseif ENV.deepDrop then
|
||||
local CB=self.cur.bk
|
||||
local y=self.curY-1
|
||||
while self:ifoverlap(CB,self.curX,y)and y>0 do
|
||||
y=y-1
|
||||
end
|
||||
if y>0 then
|
||||
self.ghoY=y
|
||||
self:createDropFX()
|
||||
self.curY=y
|
||||
self:freshBlock('move')
|
||||
SFX.play('swipe')
|
||||
end
|
||||
self.downing=1
|
||||
if self.control and self.waiting==-1 and self.cur then
|
||||
if self.curY>self.ghoY then
|
||||
self.curY=self.curY-1
|
||||
self:freshBlock('fresh')
|
||||
self.spinLast=false
|
||||
self:checkTouchSound()
|
||||
elseif ENV.deepDrop then
|
||||
local CB=self.cur.bk
|
||||
local y=self.curY-1
|
||||
while self:ifoverlap(CB,self.curX,y)and y>0 do
|
||||
y=y-1
|
||||
end
|
||||
if y>0 then
|
||||
self.ghoY=y
|
||||
self:createDropFX()
|
||||
self.curY=y
|
||||
self:freshBlock('move')
|
||||
SFX.play('swipe')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2592,7 +2587,7 @@ function Player:act_insLeft(auto)
|
||||
self.spinLast=false
|
||||
end
|
||||
if self.gameEnv.shakeFX then
|
||||
self.fieldOff.vx=-.5
|
||||
self.swingOffset.vx=-1.5
|
||||
end
|
||||
if auto then
|
||||
if self.ctrlCount==0 then
|
||||
@@ -2616,7 +2611,7 @@ function Player:act_insRight(auto)
|
||||
self.spinLast=false
|
||||
end
|
||||
if self.gameEnv.shakeFX then
|
||||
self.fieldOff.vx=.5
|
||||
self.swingOffset.vx=1.5
|
||||
end
|
||||
if auto then
|
||||
if self.ctrlCount==0 then
|
||||
@@ -2631,12 +2626,13 @@ function Player:act_insDown()
|
||||
local ENV=self.gameEnv
|
||||
self:createDropFX()
|
||||
if ENV.shakeFX then
|
||||
self.fieldOff.vy=.5
|
||||
self.swingOffset.vy=.5
|
||||
end
|
||||
self.curY=self.ghoY
|
||||
self.lockDelay=ENV.lock
|
||||
self.spinLast=false
|
||||
self:freshBlock('fresh')
|
||||
self:checkTouchSound()
|
||||
end
|
||||
end
|
||||
function Player:act_down1()
|
||||
|
||||
@@ -25,15 +25,16 @@ local function _setLang(lid)
|
||||
TEXT.show(langList[lid],640,360,100,'appear',.626)
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{x=271,y=190,w=346,h=120,font=40, fText=langList.zh, color='O',code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=637,y=190,w=346,h=120,font=40, fText=langList.zh_trad, color='F',code=function()_setLang('zh_trad')end},
|
||||
WIDGET.newButton{x=1003,y=190,w=346,h=120,font=40, fText=langList.zh_full, color='R',code=function()_setLang('zh_full')end},
|
||||
|
||||
WIDGET.newButton{x=225,y=331,w=255,h=120,font=40, fText=langList.en, color='Y',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=500,y=331,w=255,h=120,font=40, fText=langList.fr, color='L',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=40, fText=langList.es, color='J',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=1050,y=331,w=255,h=120,font=40, fText=langList.pt, color='G',code=function()_setLang('pt')end},
|
||||
WIDGET.newButton{x=225,y=331,w=255,h=120,font=40, fText=langList.en, color='L',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=500,y=331,w=255,h=120,font=40, fText=langList.fr, color='J',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=40, fText=langList.es, color='G',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=1050,y=331,w=255,h=120,font=40, fText=langList.pt, color='dG',code=function()_setLang('pt')end},
|
||||
|
||||
WIDGET.newButton{x=271,y=472,w=346,h=120,font=45, fText=langList.zh_grass,color='N',code=function()_setLang('zh_grass')end},
|
||||
WIDGET.newButton{x=637,y=472,w=346,h=120,font=45, fText=langList.zh_yygq, color='S',code=function()_setLang('zh_yygq')end},
|
||||
|
||||
@@ -20,8 +20,8 @@ local author={
|
||||
["secret7th remix"]="柒栎流星",
|
||||
["jazz nihilism"]="Trebor",
|
||||
["race remix"]="柒栎流星",
|
||||
["sakura"]="ZUN & C29H25N3O5",
|
||||
["1989"]="C29H25N3O5",
|
||||
["sakura"]="ZUN & C₂₉H₂₅N₃O₅",
|
||||
["1989"]="C₂₉H₂₅N₃O₅",
|
||||
}
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -91,9 +91,10 @@ end
|
||||
|
||||
function scene.draw()
|
||||
setFont(15)
|
||||
for i=1,#list do
|
||||
local l=#list
|
||||
for i=1,l do
|
||||
gc.setColor(1,1,1,list[i][2]/30)
|
||||
gc.print(list[i][1],20,20*i)
|
||||
gc.print(list[i][1],20,20*(l-i+1))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,12 +18,14 @@ return[=[
|
||||
新增:
|
||||
新模式:竞速-效率
|
||||
新模式:无尽马拉松
|
||||
新增场地抖动特效
|
||||
新增繁中语言,新语言设置菜单布局
|
||||
新BGM:1989(用于经典模式,by C29H25N3O5)
|
||||
新BGM:1989(用于经典模式,by C₂₉H₂₅N₃O₅)
|
||||
改动:
|
||||
移动音效改为触地音效,在方块因重力或旋转触地时也会播放
|
||||
再调整场地晃动的阻力,看起来更舒服
|
||||
更换数字和英文字符的字体
|
||||
游戏颜色表改用hsv生成
|
||||
重做全局颜色表(by C₂₉H₂₅N₃O₅)
|
||||
重新安排一些模式的BGM
|
||||
只在更新后触发自动转换以旧版本模式名存储的数据
|
||||
修复:
|
||||
@@ -77,16 +79,16 @@ return[=[
|
||||
新语音包:miku(by vocaloidvictory)
|
||||
新BGM:Jazz nihilism(用于节日主题,by Trebor)
|
||||
新BGM:Race remix(用于大师-ph,by 柒栎流星)
|
||||
新BGM:Sakura(用于限时打分,by C29H25N3O5)
|
||||
新BGM:Sakura(用于限时打分,by C₂₉H₂₅N₃O₅)
|
||||
新BGM:Null(用于节日主题)
|
||||
新音效:单次消5/6行
|
||||
新机制:swap(hold的另一种实现)
|
||||
新皮肤:shiny(by C29H25N3O5)
|
||||
新皮肤:shiny(by C₂₉H₂₅N₃O₅)
|
||||
新语言:机翻
|
||||
新小程序:Link,Arithmeic
|
||||
新音效室UI(idea by Trebor)
|
||||
新虚拟按键贴图(by C29H25N3O5)
|
||||
新功能图标(by C29H25N3O5)
|
||||
新虚拟按键贴图(by C₂₉H₂₅N₃O₅)
|
||||
新功能图标(by C₂₉H₂₅N₃O₅)
|
||||
添加失去焦点后自动静音的设置 #281
|
||||
添加启动时是否联网的开关 #377
|
||||
添加总音量滑条,移除静音按钮
|
||||
@@ -99,7 +101,7 @@ return[=[
|
||||
回合制模式改为7块一个回合与两条命
|
||||
优化master-ex/ph的信息显示
|
||||
节奏模式不再禁止瞬移 #287
|
||||
字体文件裁剪整理,补充Tech定制字符(by C29H25N3O5)
|
||||
字体文件裁剪整理,补充Tech定制字符(by C₂₉H₂₅N₃O₅)
|
||||
可以收到不同语言的公告了(目前仅支持中英 其他不会写)
|
||||
降低触发防沉迷的两个时间点为2/4小时
|
||||
微调键位设置逻辑,添加文本说明
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=394,
|
||||
["apkCode"]=395,
|
||||
["code"]=1605,
|
||||
["string"]="V0.16.5",
|
||||
["room"]="ver A-0",
|
||||
|
||||
Reference in New Issue
Block a user