Compare commits

..

8 Commits

Author SHA1 Message Date
C29H25N3O5
f9ee43b1f0 Symbol update and more
- Added a few more icon symbols
- Added symbols for playing cards
- Added a note for translators in the English Zictionary
2024-01-21 00:04:35 -06:00
C29H25N3O5
bb2ede229c Merge branch 'main' of https://github.com/C29H25N3O5/Techmino 2024-01-20 22:45:26 -06:00
C29H25N3O5
0e8ddee6c5 Update Monospaced font
Redesigned the monospaced font based on the main UI font of the game (Exo 2).
2024-01-15 17:40:22 -06:00
C₂₉H₂₅N₃O₅
bf0bb1d47b Merge branch '26F-Studio:main' into main 2024-01-15 16:20:37 -06:00
C29H25N3O5
06dc22544f Symbol and font fixes
- Added some more symbols
- Fixed some missing characters
2023-08-29 11:35:49 +08:00
C₂₉H₂₅N₃O₅
70c1b04bf6 Merge branch '26F-Studio:main' into main 2023-08-28 22:27:54 -05:00
C29H25N3O5
41c957cd8f Updated in-game font
- Adjusted the alignment of font
- Added missing glyphs in some languages
- Redesigned grade letters to increase legibility
2023-08-18 01:24:49 +08:00
C29H25N3O5
e3a0eacf1d Updated two block skins 2023-08-17 02:10:46 +08:00
235 changed files with 775 additions and 1722 deletions

View File

@@ -1,16 +0,0 @@
# Techmino - 500-star Banner
Created by NOT_A_ROBOT
13 September, 2024
**Don't forget to attribute me when using this.**
The image already includes sufficient attribution, so if you just don't crop that out, you shouldn't need to explicitly mention them.
## Attribution
Created by NOT_A_ROBOT
GitHub logo (on Z-character's screen) by GitHub
Background (space stars) originally by MrZ, ported to JS by NOT_A_ROBOT for rendering
Block skin (featured in the background) by Scf, slightly modified to make it darker
Z-character drawn by 葉枭, designed by MrZ
Techmino by MrZ and many contributors
Techmino is fun! https://github.com/26F-Studio/Techmino

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -130,7 +130,7 @@ jobs:
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
auto-test: auto-test:
runs-on: ubuntu-22.04 runs-on: ubuntu-latest
needs: build-core needs: build-core
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -141,25 +141,6 @@ jobs:
with: with:
font-path: ./parts/fonts/proportional.otf font-path: ./parts/fonts/proportional.otf
language-folder: ./parts/language language-folder: ./parts/language
- name: Download core love package
uses: actions/download-artifact@v3
with:
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
- name: Download love
shell: bash
run: |
curl -OL --retry 5 https://github.com/love2d/love/releases/download/11.4/love-11.4-x86_64.AppImage
chmod +x love-11.4-x86_64.AppImage
- name: Prepare PulseAudio and AppImage
shell: bash
run: |
sudo apt-get update
sudo apt-get install pulseaudio pulseaudio-utils pavucontrol alsa-oss alsa-utils libfuse2 -y
- name: Run automated test
uses: coactions/setup-xvfb@v1
with:
run: |
./love-11.4-x86_64.AppImage ${{ env.CORE_LOVE_PACKAGE_PATH }} --test
build-android: build-android:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -350,12 +331,6 @@ jobs:
shell: bash shell: bash
run: | run: |
rm ./ColdClear/universal/libcold_clear.a rm ./ColdClear/universal/libcold_clear.a
- name: Use Xcode 15.3
# Xcode 15.4 segfaults
# see https://forums.developer.apple.com/forums/thread/757398
uses: mobiledevops/xcode-select-version-action@v1
with:
xcode-select-version: 15.3
- name: Build macOS packages - name: Build macOS packages
id: build-packages id: build-packages
uses: love-actions/love-actions-macos-portable@v1 uses: love-actions/love-actions-macos-portable@v1
@@ -364,7 +339,6 @@ jobs:
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved." copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns
love-ref: "11.5"
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
libs-path: ./ColdClear/universal/ libs-path: ./ColdClear/universal/
product-name: ${{ steps.process-app-name.outputs.product-name }} product-name: ${{ steps.process-app-name.outputs.product-name }}
@@ -495,8 +469,8 @@ jobs:
icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico
rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
extra-assets-x86: ./ColdClear/x86/CCloader.dll ./ColdClear/x86/cold_clear.dll ./.github/build/extraLibs/Windows_x64/discord-rpc.dll extra-assets-x86: ./ColdClear/x86/CCloader.dll ./ColdClear/x86/cold_clear.dll
extra-assets-x64: ./ColdClear/x64/CCloader.dll ./ColdClear/x64/cold_clear.dll ./.github/build/extraLibs/Windows_x86/discord-rpc.dll extra-assets-x64: ./ColdClear/x64/CCloader.dll ./ColdClear/x64/cold_clear.dll
product-name: ${{ steps.process-app-name.outputs.product-name }} product-name: ${{ steps.process-app-name.outputs.product-name }}
app-id: ${{ secrets.WINDOWS_APP_ID }} app-id: ${{ secrets.WINDOWS_APP_ID }}
project-website: https://www.studio26f.org/ project-website: https://www.studio26f.org/

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
.vscode .vscode
libAndroid
*.ini *.ini
.DS_Store .DS_Store
Thumbs.db Thumbs.db

View File

@@ -1,5 +1,3 @@
-- WARNING: This framework has been remade and renamed to Zenitha. Do not use this deprecated framework for your project
NONE={}function NULL() end PAPER=love.graphics.newCanvas(1,1) NONE={}function NULL() end PAPER=love.graphics.newCanvas(1,1)
EDITING="" EDITING=""
LOADED=false LOADED=false

View File

@@ -125,14 +125,14 @@ function STRING.time_short(t)
if t<1 then return math.floor(t*1000)..timeLetters[6] end -- 123 ms if t<1 then return math.floor(t*1000)..timeLetters[6] end -- 123 ms
if t<MINUTE then return math.floor(t)..timeLetters[5]..' '..math.floor((t%1)*1000)..timeLetters[6] end -- 12s 345ms if t<MINUTE then return math.floor(t)..timeLetters[5]..' '..math.floor((t%1)*1000)..timeLetters[6] end -- 12s 345ms
local timeUnits={convertSecondsToUnits(t)} local timeUnits=TABLE.reverse({convertSecondsToUnits(t)})
TABLE.reverse(timeUnits)
-- floor seconds -- floor seconds
timeUnits[#timeUnits]=floorint(timeUnits[#timeUnits]) timeUnits[#timeUnits]=floorint(timeUnits[#timeUnits])
local outputStr=''
for i=1,#timeUnits do for i=1,#timeUnits do
if timeUnits[i]>0 then if timeUnits>0 then
return timeUnits[i]..timeLetters[i]..' '..timeUnits[i+1]..timeLetters[i+1] return timeUnits[i]..timeLetters[i]..' '..timeUnits[i+1]..timeLetters[i+1]
end end
end end

View File

@@ -8,6 +8,8 @@ local path=''
local type=type local type=type
local timer=love.timer.getTime local timer=love.timer.getTime
local TRD=love.thread.newThread("\n")
local TRD_isRunning=TRD.isRunning
local WS={} local WS={}
local wsList=setmetatable({},{ local wsList=setmetatable({},{
@@ -149,7 +151,7 @@ function WS.update(dt)
local time=timer() local time=timer()
for name,ws in next,wsList do for name,ws in next,wsList do
if ws.real and ws.status~='dead' then if ws.real and ws.status~='dead' then
if ws.thread:isRunning() then if TRD_isRunning(ws.thread) then
if ws.triggerCHN:getCount()==0 then if ws.triggerCHN:getCount()==0 then
ws.triggerCHN:push(0) ws.triggerCHN:push(0)
end end

View File

@@ -15,7 +15,6 @@ do-- Connect
SOCK:settimeout(timeout) SOCK:settimeout(timeout)
local res,err=SOCK:connect(host,port) local res,err=SOCK:connect(host,port)
-- print('C0',res,err)
assert(res,err) assert(res,err)
-- WebSocket handshake -- WebSocket handshake
@@ -32,7 +31,6 @@ do-- Connect
-- First line of HTTP -- First line of HTTP
res,err=SOCK:receive('*l') res,err=SOCK:receive('*l')
-- print('C',res,err)
assert(res,err) assert(res,err)
local code,ctLen local code,ctLen
code=res:find(' ') code=res:find(' ')
@@ -41,28 +39,22 @@ do-- Connect
-- Get body length from headers and remove headers -- Get body length from headers and remove headers
repeat repeat
res,err=SOCK:receive('*l') res,err=SOCK:receive('*l')
-- print('H',res,err)
assert(res,err) assert(res,err)
if not ctLen and res:find('content-length') then if not ctLen and res:find('length') then
ctLen=tonumber(res:match('%d+')) or 0 ctLen=tonumber(res:match('%d+'))
end end
until res=='' until res==''
-- Result -- Result
if code=='101' then
CHN_push(readCHN,'success')
end
-- Content(?)
if ctLen then if ctLen then
res,err=SOCK:receive(ctLen) if code=='101' then
-- print('R',res,err) CHN_push(readCHN,'success')
if code~='101' then else
res,err=SOCK:receive(ctLen)
res=JSON.decode(assert(res,err)) res=JSON.decode(assert(res,err))
error((code or "XXX")..":"..(res and res.reason or "Server Error")) error((code or "XXX")..":"..(res and res.reason or "Server Error"))
end end
end end
SOCK:settimeout(0) SOCK:settimeout(0)
end end
@@ -144,10 +136,10 @@ local readThread=coroutine.wrap(function()
assert(res,err) assert(res,err)
length=shl(byte(res,1),8)+byte(res,2) length=shl(byte(res,1),8)+byte(res,2)
elseif length==127 then elseif length==127 then
-- 'res' is 'lenData' here local lenData
res,err=_receive(SOCK,8) lenData,err=_receive(SOCK,8)
assert(res,err) assert(res,err)
local _,_,_,_,_5,_6,_7,_8=byte(res,1,8) local _,_,_,_,_5,_6,_7,_8=byte(lenData,1,8)
length=shl(_5,24)+shl(_6,16)+shl(_7,8)+_8 length=shl(_5,24)+shl(_6,16)+shl(_7,8)+_8
end end
res,err=_receive(SOCK,length) res,err=_receive(SOCK,length)
@@ -166,14 +158,12 @@ local readThread=coroutine.wrap(function()
lBuffer=lBuffer..res lBuffer=lBuffer..res
if fin then if fin then
CHN_push(readCHN,lBuffer) CHN_push(readCHN,lBuffer)
-- print('M',lBuffer)
lBuffer="" lBuffer=""
end end
else else
CHN_push(readCHN,op) CHN_push(readCHN,op)
if fin then if fin then
CHN_push(readCHN,res) CHN_push(readCHN,res)
-- print('S',res)
lBuffer="" lBuffer=""
else else
lBuffer=res lBuffer=res

View File

@@ -15,7 +15,6 @@ local timer=love.timer.getTime
local next=next local next=next
local floor,ceil=math.floor,math.ceil local floor,ceil=math.floor,math.ceil
local max,min=math.max,math.min local max,min=math.max,math.min
local match=string.match
local sub,ins,rem=string.sub,table.insert,table.remove local sub,ins,rem=string.sub,table.insert,table.remove
local xOy=SCR.xOy local xOy=SCR.xOy
local FONT=FONT local FONT=FONT
@@ -143,21 +142,13 @@ local button={
type='button', type='button',
mustHaveText=true, mustHaveText=true,
ATV=0,-- Activating time(0~8) ATV=0,-- Activating time(0~8)
textAlreadyWrapped=false,-- Text already wrapped? (Managed by :setObject, can be override, this will be true if obj has a '\n')
} }
function button:reset() function button:reset()
self.ATV=0 self.ATV=0
end end
function button:setObject(obj) function button:setObject(obj)
if type(obj)=='string' or type(obj)=='number' then if type(obj)=='string' or type(obj)=='number' then
if match(obj,"\n") then self.obj=gc.newText(FONT.get(self.font,self.fType),obj)
self.textAlreadyWrapped=true
self.obj=gc.newText(FONT.get(self.font,self.fType))
self.obj:addf(obj,self.w-self.edge*2,(self.align=='L' and 'left') or (self.align=='R' and 'right') or 'center')
else
self.textAlreadyWrapped=false
self.obj=gc.newText(FONT.get(self.font,self.fType),obj)
end
elseif obj then elseif obj then
self.obj=obj self.obj=obj
end end
@@ -203,7 +194,16 @@ function button:draw()
local ox,oy=obj:getWidth()*.5,obj:getHeight()*.5 local ox,oy=obj:getWidth()*.5,obj:getHeight()*.5
local y0=y+h*.5 local y0=y+h*.5
gc_setColor(1,1,1,.2+ATV*.05) gc_setColor(1,1,1,.2+ATV*.05)
if self.align=='L' or self.textAlreadyWrapped then if self.align=='M' then
local x0=x+w*.5
local kx=obj:type()=='Text' and min(w/ox/2,1) or 1
gc_draw(obj,x0-1,y0-1,nil,kx,1,ox,oy)
gc_draw(obj,x0-1,y0+1,nil,kx,1,ox,oy)
gc_draw(obj,x0+1,y0-1,nil,kx,1,ox,oy)
gc_draw(obj,x0+1,y0+1,nil,kx,1,ox,oy)
gc_setColor(r*.55,g*.55,b*.55)
gc_draw(obj,x0,y0,nil,kx,1,ox,oy)
elseif self.align=='L' then
local edge=self.edge local edge=self.edge
gc_draw(obj,x+edge-1,y0-1-oy) gc_draw(obj,x+edge-1,y0-1-oy)
gc_draw(obj,x+edge-1,y0+1-oy) gc_draw(obj,x+edge-1,y0+1-oy)
@@ -219,15 +219,6 @@ function button:draw()
gc_draw(obj,x0+1,y0+1-oy) gc_draw(obj,x0+1,y0+1-oy)
gc_setColor(r*.55,g*.55,b*.55) gc_setColor(r*.55,g*.55,b*.55)
gc_draw(obj,x0,y0-oy) gc_draw(obj,x0,y0-oy)
else--if self.align=='M' then
local x0=x+w*.5
local kx=obj:type()=='Text' and min(w/ox/2,1) or 1
gc_draw(obj,x0-1,y0-1,nil,kx,1,ox,oy)
gc_draw(obj,x0-1,y0+1,nil,kx,1,ox,oy)
gc_draw(obj,x0+1,y0-1,nil,kx,1,ox,oy)
gc_draw(obj,x0+1,y0+1,nil,kx,1,ox,oy)
gc_setColor(r*.55,g*.55,b*.55)
gc_draw(obj,x0,y0,nil,kx,1,ox,oy)
end end
end end
function button:getInfo() function button:getInfo()
@@ -299,21 +290,13 @@ local key={
type='key', type='key',
mustHaveText=true, mustHaveText=true,
ATV=0,-- Activating time(0~4) ATV=0,-- Activating time(0~4)
textAlreadyWrapped=false,---See button.setObject (line 146)
} }
function key:reset() function key:reset()
self.ATV=0 self.ATV=0
end end
function key:setObject(obj) function key:setObject(obj)
if type(obj)=='string' or type(obj)=='number' then if type(obj)=='string' or type(obj)=='number' then
if match(obj,"\n") then self.obj=gc.newText(FONT.get(self.font,self.fType),obj)
self.textAlreadyWrapped=true
self.obj=gc.newText(FONT.get(self.font,self.fType))
self.obj:addf(obj,self.w-self.edge*2,(self.align=='L' and 'left') or (self.align=='R' and 'right') or 'center')
else
self.textAlreadyWrapped=false
self.obj=gc.newText(FONT.get(self.font,self.fType),obj)
end
elseif obj then elseif obj then
self.obj=obj self.obj=obj
end end
@@ -371,15 +354,14 @@ function key:draw()
-- Drawable -- Drawable
local obj=self.obj local obj=self.obj
local ox,oy=obj:getWidth()*.5,obj:getHeight()*.5 local ox,oy=obj:getWidth()*.5,obj:getHeight()*.5
gc_setColor(r,g,b) gc_setColor(r,g,b)
if align=='L' or self.textAlreadyWrapped then if align=='M' then
gc_draw(obj,x+self.edge,y+h*.5-oy)
elseif align=='R' then
gc_draw(obj,x+w-self.edge-ox*2,y-oy+h*.5)
else--if align=='M' then
local kx=obj:type()=='Text' and min(w/ox/2,1) or 1 local kx=obj:type()=='Text' and min(w/ox/2,1) or 1
gc_draw(obj,x+w*.5,y+h*.5,nil,kx,1,ox,oy) gc_draw(obj,x+w*.5,y+h*.5,nil,kx,1,ox,oy)
elseif align=='L' then
gc_draw(obj,x+self.edge,y-oy+h*.5)
elseif align=='R' then
gc_draw(obj,x+w-self.edge-ox*2,y-oy+h*.5)
end end
end end
function key:getInfo() function key:getInfo()
@@ -1400,13 +1382,10 @@ function WIDGET.setLang(widgetText)
t=W.name or "##" t=W.name or "##"
W.color=COLOR.dV W.color=COLOR.dV
end end
if type(W.setObject)=='function' then if type(t)=='string' and W.font then
W:setObject(t) t=gc.newText(FONT.get(W.font),t)
elseif type(t)=='string' and W.font then
W.obj=gc.newText(FONT.get(W.font or 30),t)
else
W.obj=t
end end
W.obj=t
end end
end end
end end

View File

@@ -12,8 +12,6 @@ Lua is free software distributed under the terms of the MIT license. Copyright
json.lua is copyrighted by rxi. © 2022 rxi. json.lua is copyrighted by rxi. © 2022 rxi.
discord-rpc.dll is copyrighted by Discord, Inc. © 2017 Discord, Inc.
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License, Version 1.1. IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License, Version 1.1.

View File

@@ -23,7 +23,7 @@ TIME=love.timer.getTime
-- Global Vars & Settings -- Global Vars & Settings
SFXPACKS={'chiptune'} SFXPACKS={'chiptune'}
VOCPACKS={'miya','mono','xiaoya','flore','neuro','miku','zundamon'} VOCPACKS={'miya','mono','xiaoya','flore','miku','zundamon'}
FIRSTLAUNCH=false FIRSTLAUNCH=false
DAILYLAUNCH=false DAILYLAUNCH=false
@@ -271,7 +271,6 @@ IMG.init{
floreCH='media/image/characters/flore.png', floreCH='media/image/characters/flore.png',
mikuCH='media/image/characters/miku.png', mikuCH='media/image/characters/miku.png',
zundamonCH='media/image/characters/zundamon.png', zundamonCH='media/image/characters/zundamon.png',
neuroCH='media/image/characters/neuro.png',
z={ z={
character='media/image/characters/z_character.png', character='media/image/characters/z_character.png',
screen1='media/image/characters/z_screen1.png', screen1='media/image/characters/z_screen1.png',
@@ -294,41 +293,39 @@ IMG.init{
}, },
} }
SKIN.load{ SKIN.load{
{name="Arcade (Asriel)", path='media/image/skin/asriel/arcade.png'}, {name="crystal_scf", path='media/image/skin/crystal_scf.png'},
{name="Cardboard (Asriel, slimenergy)", path='media/image/skin/asriel/cardboard.png'}, {name="matte_mrz", path='media/image/skin/matte_mrz.png'},
{name="Crystal (Scf)", path='media/image/skin/scf/crystal.png'}, {name="shiny_chno", path='media/image/skin/shiny_chno.png'},
{name="Matte (MrZ)", path='media/image/skin/mrz/matte.png'}, {name="contrast_mrz", path='media/image/skin/contrast_mrz.png'},
{name="Shiny (CHNO)", path='media/image/skin/chno/shiny.png'}, {name="polkadots_scf", path='media/image/skin/polkadots_scf.png'},
{name="Contrast (MrZ)", path='media/image/skin/mrz/contrast.png'}, {name="toy_scf", path='media/image/skin/toy_scf.png'},
{name="Polkadots (Scf)", path='media/image/skin/scf/polkadots.png'}, {name="smooth_mrz", path='media/image/skin/smooth_mrz.png'},
{name="Toy (Scf)", path='media/image/skin/scf/toy.png'}, {name="simple_scf", path='media/image/skin/simple_scf.png'},
{name="Smooth (MrZ)", path='media/image/skin/mrz/smooth.png'}, {name="glass_scf", path='media/image/skin/glass_scf.png'},
{name="Simple (Scf)", path='media/image/skin/scf/simple.png'}, {name="penta_scf", path='media/image/skin/penta_scf.png'},
{name="Glass (Scf)", path='media/image/skin/scf/glass.png'}, {name="bubble_scf", path='media/image/skin/bubble_scf.png'},
{name="Penta (Scf)", path='media/image/skin/scf/penta.png'}, {name="minoes_scf", path='media/image/skin/minoes_scf.png'},
{name="Bubble (Scf)", path='media/image/skin/scf/bubble.png'}, {name="pure_mrz", path='media/image/skin/pure_mrz.png'},
{name="Minoes (Scf)", path='media/image/skin/scf/minoes.png'}, {name="bright_scf", path='media/image/skin/bright_scf.png'},
{name="pure (MrZ)", path='media/image/skin/mrz/pure.png'}, {name="glow_mrz", path='media/image/skin/glow_mrz.png'},
{name="bright (Scf)", path='media/image/skin/scf/bright.png'}, {name="plastic_mrz", path='media/image/skin/plastic_mrz.png'},
{name="Glow (MrZ)", path='media/image/skin/mrz/glow.png'}, {name="paper_mrz", path='media/image/skin/paper_mrz.png'},
{name="Plastic (MrZ)", path='media/image/skin/mrz/plastic.png'}, {name="yinyang_scf", path='media/image/skin/yinyang_scf.png'},
{name="paper (MrZ)", path='media/image/skin/mrz/paper.png'}, {name="cartooncup_earety", path='media/image/skin/cartooncup_earety.png'},
{name="Yinyang (Scf)", path='media/image/skin/scf/yinyang.png'}, {name="jelly_miya", path='media/image/skin/jelly_miya.png'},
{name="Cartooncup (Earety)", path='media/image/skin/earety/cartooncup.png'}, {name="guidetris_xmiao_lusisi",path='media/image/skin/guidetris_xmiao_lusisi.png'},
{name="Jelly (Miya)", path='media/image/skin/miya/jelly.png'}, {name="brick_notypey", path='media/image/skin/brick_notypey.png'},
{name="guidetris (xmiao, lusisi)",path='media/image/skin/guidetris_xmiao_lusisi.png'}, {name="gem_notypey", path='media/image/skin/gem_notypey.png'},
{name="brick (Notypey)", path='media/image/skin/notypey/brick.png'}, {name="classic", path='media/image/skin/classic_unknown.png'},
{name="Gem (Notypey)", path='media/image/skin/notypey/gem.png'}, {name="ball_shaw", path='media/image/skin/ball_shaw.png'},
{name="Classic", path='media/image/skin/unknown/classic.png'}, {name="retro_notypey", path='media/image/skin/retro_notypey.png'},
{name="Ball (Shaw)", path='media/image/skin/shaw/ball.png'}, {name="pixel_chno", path='media/image/skin/pixel_chno.png'},
{name="Retro (Notypey)", path='media/image/skin/notypey/retro.png'}, {name="pastel_chno", path='media/image/skin/pastel_chno.png'},
{name="Pixel (CHNO)", path='media/image/skin/chno/pixel.png'}, {name="letters_chno", path='media/image/skin/letters_chno.png'},
{name="Pastel (CHNO)", path='media/image/skin/chno/pastel.png'}, {name="kanji_chno", path='media/image/skin/kanji_chno.png'},
{name="Letters (CHNO)", path='media/image/skin/chno/letters.png'}, {name="textbone_mrz", path='media/image/skin/textbone_mrz.png'},
{name="Kanji (CHNO)", path='media/image/skin/chno/kanji.png'}, {name="coloredbone_mrz", path='media/image/skin/coloredbone_mrz.png'},
{name="Textbone (MrZ)", path='media/image/skin/mrz/textbone.png'}, {name="wtf", path='media/image/skin/wtf_mrz.png'},
{name="Coloredbone (MrZ)", path='media/image/skin/mrz/coloredbone.png'},
{name="WTF (MrZ)", path='media/image/skin/mrz/wtf.png'},
} }
-- Initialize sound libs -- Initialize sound libs
@@ -427,8 +424,7 @@ do
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end 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 not RSlist[SETTING.RS] then SETTING.RS='TRS' end
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
if type(SETTING.skinSet)=='number' then SETTING.skinSet='Crystal (Scf)' end if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
if string.find(SETTING.skinSet,"_") 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 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 SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
if type(SETTING.bg)~='string' then SETTING.bg='on' end if type(SETTING.bg)~='string' then SETTING.bg='on' end
@@ -594,22 +590,18 @@ for _,fileName in next,fs.getDirectoryItems('replay') do
end end
table.sort(REPLAY,function(a,b) return a.fileName>b.fileName end) table.sort(REPLAY,function(a,b) return a.fileName>b.fileName end)
AUTHURL="https://www.studio26f.org/oauth?product=techmino" AUTHURL="https://studio26f.org/oauth?product=techmino"
AUTHHOST="www.studio26f.org:8080" AUTHHOST="cafuuchino1.3322.org:8081"
WS.switchHost('www.studio26f.org','8081','/techmino/ws/v1') WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
HTTP.setHost("www.studio26f.org:8081") HTTP.setHost("cafuuchino1.3322.org:10026")
HTTP.setThreadCount(1) HTTP.setThreadCount(1)
-- Discord RPC
DiscordRPC=require'parts.discordRPC'
DiscordRPC.update()
table.insert(_LOADTIMELIST_,("Load Resources: %.3fs"):format(TIME()-_LOADTIME_)) table.insert(_LOADTIMELIST_,("Load Resources: %.3fs"):format(TIME()-_LOADTIME_))
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end
-- Launch testing task if launch param received -- Launch testing task if launch param received
if TABLE.find(arg,'--test') then if TABLE.find(arg,'-- test') then
TASK.new(function() TASK.new(function()
while not LOADED do coroutine.yield() end while not LOADED do coroutine.yield() end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 613 B

After

Width:  |  Height:  |  Size: 613 B

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 837 B

After

Width:  |  Height:  |  Size: 837 B

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

Before

Width:  |  Height:  |  Size: 91 B

After

Width:  |  Height:  |  Size: 91 B

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More