stuff added

This commit is contained in:
RealFD 2022-06-05 03:12:34 +02:00
parent c0498446c8
commit a2cd411f4c
31 changed files with 489 additions and 208 deletions

View File

@ -42,6 +42,11 @@
"type": "bool",
"default": false
},
"static_idol": {
"label": "If Single Image is in ,Stactic Folder, toggle this",
"type": "bool",
"default": false
},
"words": {
"type": "selection",

View File

@ -2,11 +2,17 @@ json = require "common.json"
local header = {}
header["user-agent"] = "unnamed_sdvx_clone"
local Dim = require("common.dimensions")
local Wallpaper = require("components.wallpaper")
local Background = require('components.background');
local jacketFallback = gfx.CreateSkinImage("song_select/loading.png", 0)
local diffColors = {{50,50,127}, {50,127,50}, {127,50,50}, {127, 50, 127}}
local entryW = 770
local entryH = 320
local resX,resY = game.GetResolution()
local resX,resY = Dim.design.width,Dim.design.height
local xCount = math.max(1, math.floor(resX / entryW))
local yCount = math.max(1, math.floor(resY / entryH))
local xOffset = (resX - xCount * entryW) / 2
@ -33,6 +39,8 @@ local sortingcursor = 0
local sortingOptions = {"Uploaded", "Oldest"}
local needsReload = false
local yOffset = 0
function addsong(song)
if song.jacket_url ~= nil then
song.jacket = gfx.LoadWebImageJob(song.jacket_url, jacketFallback, 250, 250)
@ -44,8 +52,7 @@ function addsong(song)
end
table.insert(songs, song)
end
local yOffset = 0
local backgroundImage = gfx.CreateSkinImage("bg.png", 1);
dlcache = io.open(cachepath, "r")
if dlcache then
@ -68,8 +75,6 @@ function encodeURI(str)
return str
end
function gotSongsCallback(response)
if response.status ~= 200 then
error()
@ -87,6 +92,7 @@ Http.GetAsync(nextUrl, header, gotSongsCallback)
function render_song(song, x,y)
--[[
gfx.Save()
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP)
gfx.Translate(x,y)
@ -143,6 +149,7 @@ function render_song(song, x,y)
end
gfx.ResetScissor()
gfx.Restore()
]]
end
function load_more()
@ -186,41 +193,38 @@ function render_hotkeys()
gfx.ResetTransform()
gfx.BeginPath()
gfx.FillColor(0,0,0,240)
gfx.Rect(0,resY - 50, resX, 50)
gfx.Rect(0,resX - 50, resY, 50)
gfx.Fill()
gfx.FontSize(30)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT, gfx.TEXT_ALIGN_BOTTOM)
gfx.Text("FXR: Sorting", resX/2 + 20, resY - 10)
gfx.Text("FXR: Sorting", resY/2, resX - 10)
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT, gfx.TEXT_ALIGN_BOTTOM)
gfx.Text("FXL: Levels", resX/2 - 20, resY - 10)
gfx.Text("FXL: Levels", resY/2 -20, resX - 10)
gfx.Restore()
end
function render_info()
gfx.Save()
gfx.ResetTransform()
gfx.BeginPath()
gfx.MoveTo(0, resY)
gfx.LineTo(350, resY)
gfx.LineTo(300, resY - 50)
gfx.LineTo(0, resY - 50)
gfx.ClosePath()
gfx.FillColor(33,33,33)
gfx.Fill()
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("Nautica", 3, resY - 3)
local xmin,ymin,xmax,ymax = gfx.TextBounds(3, resY - 3, "Nautica")
gfx.Text("Nautica", resX-2, resX-20)
gfx.FontSize(20)
gfx.Text("https://ksm.dev/", xmax + 13, resY - 3)
gfx.Text("https://ksm.dev/", resX-13, resX-3)
gfx.Restore()
end
function render(deltaTime)
gfx.BeginPath()
gfx.ImageRect(0, 0, resX, resY, backgroundImage, 1, 0);
Dim.updateResolution()
Wallpaper.render()
Dim.transformToScreenSpace()
Background.draw(deltaTime)
gfx.LoadSkinFont("NotoSans-Regular.ttf");
displayCursorPosX = displayCursorPosX - (displayCursorPosX - cursorPosX) * deltaTime * 10
displayCursorPosY = displayCursorPosY - (displayCursorPosY - cursorPosY) * deltaTime * 10
@ -380,7 +384,7 @@ function render_level_filters()
gfx.Save()
gfx.ResetTransform()
gfx.BeginPath()
gfx.Rect(0,0, resX, resY)
gfx.Rect(0,0, resX+215, resY)
gfx.FillColor(0,0,0,200)
gfx.Fill()
gfx.FillColor(255,255,255)
@ -388,16 +392,16 @@ function render_level_filters()
gfx.FontSize(60)
gfx.Text("Level filters:", 10, 10)
gfx.BeginPath()
gfx.Rect(resX/2 - 30, resY/2 - 22, 60, 44)
gfx.Rect(resX, resY, 60, 44)
gfx.StrokeColor(255,128,0)
gfx.StrokeWidth(2)
gfx.Stroke()
gfx.FontSize(40)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE)
for i = 1, 20 do
y = (resY/2) + (i - (levelcursor + 1)) * 40
y = (resX/2) + (i - (levelcursor + 1)) * 40
if selectedLevels[i] then gfx.FillColor(255,255,255) else gfx.FillColor(127,127,127) end
gfx.Text(tostring(i), resX/2, y)
gfx.Text(tostring(i), resX-115, y)
end
gfx.Restore()
end
@ -406,7 +410,7 @@ function render_sorting_selection()
gfx.Save()
gfx.ResetTransform()
gfx.BeginPath()
gfx.Rect(0,0, resX, resY)
gfx.Rect(0,0, resX+215, resY)
gfx.FillColor(0,0,0,200)
gfx.Fill()
gfx.FillColor(255,255,255)
@ -414,16 +418,16 @@ function render_sorting_selection()
gfx.FontSize(60)
gfx.Text("Sorting method:", 10, 10)
gfx.BeginPath()
gfx.Rect(resX/2 - 75, resY/2 - 22, 150, 44)
gfx.Rect(resX, resY, 150, 44)
gfx.StrokeColor(255,128,0)
gfx.StrokeWidth(2)
gfx.Stroke()
gfx.FontSize(40)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE)
for i, opt in ipairs(sortingOptions) do
y = (resY/2) + (i - (sortingcursor + 1)) * 40
y = (resX/2) + (i - (sortingcursor + 1)) * 40
if selectedSorting == opt then gfx.FillColor(255,255,255) else gfx.FillColor(127,127,127) end
gfx.Text(opt, resX/2, y)
gfx.Text(opt, resX-115, y)
end
gfx.Restore()
end

View File

@ -1,5 +1,25 @@
local bannerBaseImage = gfx.CreateSkinImage("gameplay/banner/base.png", 0)
local UsBottom = gfx.CreateSkinImage("result/multi_4p/base.png",0)
local UsTop = gfx.CreateSkinImage("result/multi_4p/top.png",0)
local pos = {
gfx.CreateSkinImage("result/multi_4p/pos/1.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/2.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/3.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/4.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/5.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/6.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/7.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/8.png", 0),
}
local desw = 1080
local desh = 1920
@ -15,13 +35,9 @@ local drawScoreboard = function (users, currentUserId)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
gfx.FontSize(32)
local x = 16;
local basey = 510;
gfx.LoadSkinFont("Digital-Serial-Bold.ttf")
for i, u in ipairs(users) do
local y = basey + i*28;
if (u.id == currentUserId) then
gfx.FillColor(128,192,255);
@ -29,6 +45,35 @@ local drawScoreboard = function (users, currentUserId)
gfx.FillColor(255,255,255);
end
isLandscape = desw < desh;
local posUPWidth, posUPHeight = gfx.ImageSize(UsBottom)
numberx = posUPWidth;
if not isLandscape then
local posUPWidth, posUPHeight = gfx.ImageSize(UsBottom)
local y = 16;
gfx.BeginPath()
gfx.ImageRect(numberx, y,posUPWidth/1.75,posUPHeight/1.75,UsBottom,1,0)
local posDWWidth, posDWHeight = gfx.ImageSize(UsTop)
gfx.BeginPath()
gfx.ImageRect(numberx, y,posDWWidth/1.75,posDWHeight/1.75,UsTop,1,0)
local posWidth, posHeight = gfx.ImageSize(pos[i])
gfx.BeginPath()
gfx.ImageRect(numberx+110, y+16,posWidth/2,posHeight/2,pos[i],1,0)
gfx.BeginPath()
gfx.FontSize(26)
gfx.Text(u.name, numberx, y)
elseif isLandscape then
local x = 16;
local basey = 510;
local y = basey + i*28;
gfx.FontSize(26)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
@ -39,7 +84,13 @@ local drawScoreboard = function (users, currentUserId)
gfx.Text(string.format("%04d", math.floor(lastFourDigits)), x+58, y+1)
gfx.FontSize(26)
gfx.Text('#' .. i .. ' ' .. u.name, x+120, y)
gfx.Text(u.name, x+155, y)
gfx.BeginPath()
local posWidth, posHeight = gfx.ImageSize(pos[i])
gfx.BeginPath()
gfx.ImageRect(x+100, y-20,posWidth/2.5,posHeight/2.5,pos[i],1,0)
end
numberx = numberx+numberx
end
end
@ -71,6 +122,8 @@ local render = function (deltaTime, users, currentUserId)
0
);
drawScoreboard(users, currentUserId); -- TODO: for now
gfx.ResetTransform()
end

View File

@ -11,6 +11,7 @@ local bgLeftImage = gfx.CreateSkinImage("gameplay/song_panel/bg_left.png", 0);
local bgRightImage = gfx.CreateSkinImage("gameplay/song_panel/bg_right.png", 0);
local notify = gfx.CreateSkinImage("gameplay/song_panel/notice.png", 0)
local demopanel = gfx.CreateSkinImage("multi/lobby/multi_jacket.png",0)
local progressDotImage = gfx.CreateSkinImage("gameplay/song_panel/dot.png", 0);
local jacketFallbackImage = gfx.CreateSkinImage("song_select/loading.png", 0);
@ -40,6 +41,48 @@ local tickTransitions = function (deltaTime)
end
local demoMode = function (songTitle,songArtist)
--[[
gfx.BeginPath();
local tw, th = gfx.ImageSize(demopanel);
th = (Dim.design.width / tw) * th;
gfx.BeginPath();
gfx.ImageRect(0, 0, Dim.design.width, Dim.design.height,temp, 1, 0);
gfx.BeginPath();
gfx.FillColor(50,80,120,100)
gfx.Rect((Dim.design.width/4)-29, th+62, Dim.design.width/1.75, th/1.75);
gfx.Fill()
gfx.BeginPath();
gfx.FillColor(50,120,80,100)
gfx.Rect((Dim.design.width/4)+15, th+129, Dim.design.width/2.12, th/2.25);
gfx.Fill()
gfx.BeginPath();
gfx.Text(actualLaneSpeed,Dim.design.width/4, th+100)
]]
gfx.BeginPath();
local tw, th = gfx.ImageSize(demopanel);
th = (desw / tw) * th;
gfx.BeginPath();
gfx.FillColor(50,80,120,100)
gfx.Rect((desw/4)-29, th+62, desw/1.75, th/1.64);
-- gfx.ImageRect((desw/4)-29,th+62,desw/1.75,th/1.64,demopanel,1,0)
gfx.Fill()
gfx.BeginPath();
gfx.FontSize(38)
gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
renderOutlinedText(desw/4+12,th+90, "DEMO MODE", 2);
gfx.BeginPath();
-- gfx.FillColor(50,120,80,100)
-- gfx.Rect((desw/4)+15, th+129, desw/2.12, th/2.25);
gfx.ImageRect((desw/4)+15,th+129,desw/2.12,th/2.25,jacketImage,1,0)
-- gfx.Fill()
gfx.BeginPath();
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(desw/2,th+685, songTitle, 2);
renderOutlinedText(desw/2,th+725, songArtist, 2);
end
local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, progress, songTitle, songArtist)
gfx.Save();
@ -99,36 +142,6 @@ local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, pro
0
);
if gameplay.autoplay and gameplay.demoMode == false and gameplay.practice_setup == false then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "AUTOPLAY IS ENABLED", 1.5);
elseif gameplay.demoMode == true and gameplay.practice_setup == false then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "DEMO MODE IS ENABLED", 1.5);
elseif gameplay.scoreReplays and gameplay.demoMode == false and gameplay.practice_setup == false then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "REPLAY MODE IS ENABLED", 1.5);
elseif gameplay.practice_setup == true then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "PRACTICE MODE IS ENABLED", 1.5);
end
-- Draw diff rectangle
local adjustedDiff = Charting.GetDisplayDifficulty(gameplay.jacketPath, diff)
DiffRectangle.render(deltaTime, 31, y+140, 0.84, adjustedDiff, level);
@ -144,6 +157,44 @@ local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, pro
renderOutlinedText(260,y+247, string.format("%.0f", bpm), 2);
renderOutlinedText(260,y+281, string.format("%.2f", actualLaneSpeed), 2);
gfx.FontSize(18);
if gameplay.autoplay and not gameplay.demoMode and gameplay.practice_setup == nil then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "AUTOPLAY IS ENABLED", 1.5);
elseif gameplay.demoMode and gameplay.practice_setup == nil then
gfx.BeginPath();
if (isLandscape) then
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "DEMO MODE IS ENABLED", 1.5);
else
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
demoMode(songTitle,songArtist)
end
elseif gameplay.scoreReplays and not gameplay.autoplay and not gameplay.demoMode and gameplay.practice_setup == nil then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "REPLAY MODE IS ENABLED", 1.5);
elseif gameplay.practice_setup then
gfx.BeginPath();
gfx.ImageRect(0,y+310,245,67,notify,1,0);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
renderOutlinedText(30,y+354.5, "PRACTICE MODE IS ENABLED", 1.5);
end
gfx.FontSize(30);
-- Draw progress
gfx.BeginPath()
gfx.FillColor(244, 204, 101)

View File

@ -89,7 +89,6 @@ local m_s_part = function ()
gfx.Text(selected_song.effector, rightPanelX+463, rightPanelY+191)
gfx.Text(selected_song.illustrator, rightPanelX+463, rightPanelY+219)
draw_diffs(selected_song.all_difficulties, 395, 205, 300, 100, selected_song.diff_index+1)
gfx.Text("Dif pos: "..selected_song.diff_index,rightPanelX, rightPanelY)
end
end

View File

@ -0,0 +1,41 @@
local Dim = require("common.dimensions")
local DigiSerBold = "Digital-Serial-Bold.ttf";
local desw,desh = Dim.design.width,Dim.design.height
local lobbypanelX = 0;
local lobbypanelY = (1080/2.5)-56;
local l_base_panel = gfx.CreateSkinImage("multi/roomselect/lobby_select.png",1);
local l_color = gfx.CreateSkinImage("multi/roomselect/lobby_select_color.png", 1);
local l_grad = gfx.CreateSkinImage("multi/roomselect/lobby_select_gradiant.png", 1);
local l_name = gfx.CreateSkinImage("multi/roomselect/multi_station.png",1);
local l_load = gfx.CreateSkinImage("multi/roomselect/lobby_not_loaded.png",1)
local getpanel = function()
local jw,jh = gfx.ImageSize(l_base_panel);
gfx.BeginPath();
gfx.ImageRect(lobbypanelX, lobbypanelY, jw, jh, l_base_panel,1,0);
gfx.BeginPath();
gfx.ImageRect(lobbypanelX, lobbypanelY, jw, jh, l_color,1,0);
-- do the lobby oder here
draw_rooms(desw/2, desh - 290);
gfx.BeginPath();
gfx.ImageRect(lobbypanelX, lobbypanelY, jw, jh, l_grad,1,0);
local nw,nh = gfx.ImageSize(l_name);
gfx.BeginPath();
gfx.ImageRect(lobbypanelX+445, lobbypanelY+9, nw, nh, l_name,1,0);
gfx.BeginPath();
if not loading then
custom_button("Create new room",40+(desw/2), 530+(desh/2),l_load,DigiSerBold,70,new_room)
end
end
return getpanel

View File

@ -5,19 +5,21 @@ local Sound = require("common.sound")
local Dim = require("common.dimensions")
local Wallpaper = require("components.wallpaper")
local Background = require('components.background');
local difbar = require("components.diff_rectangle"); --no clue but starting to separating breaks it
local difbar = require("components.diff_rectangle");
local creww = game.GetSkinSetting("single_idol")
local songjacket = require("multi.songjacket")
local m_own_info = require("multi.owninfo")
local m_base_part = require("multi.basepanel")
local m_part = require("multi.mainpanel")
local m_s_part = require("multi.songinfo")
local m_bpm_part = require("multi.bpmpanel")
local m_info_part = require("multi.infopanel")
-- inRoom components
local songjacket = require("multi.inRoom.songjacket")
local m_own_info = require("multi.inRoom.owninfo")
local m_base_part = require("multi.inRoom.basepanel")
local m_part = require("multi.inRoom.mainpanel")
local m_s_part = require("multi.inRoom.songinfo")
local m_bpm_part = require("multi.inRoom.bpmpanel")
local m_info_part = require("multi.inRoom.infopanel")
local temppanels = gfx.CreateSkinImage("song_select/textboard.png", 1); --temp
-- roomList components
local getpanel = require("multi.roomList.getpanel")
local headerMatchingImage = gfx.CreateSkinImage("titlescreen/entry.png", 1);
@ -35,10 +37,12 @@ local idolAnimTransitionScale = 0;
local leftPanelX = 575;
local leftPanelY = 1472;
local desw,desh = Dim.design.width,Dim.design.height
local mposx = 0;
local mposy = 0;
local hovered = nil;
local buttonWidth = Dim.design.width*(3/4);
local buttonWidth = desw*(3/4);
local buttonHeight = 75;
local buttonBorder = 2;
local portrait
@ -47,7 +51,7 @@ local jacket_size;
local BAR_ALPHA = 191;
local HEADER_HEIGHT = 100
local desh = game.GetResolution()
local scale;
game.LoadSkinSample("click-02")
@ -124,13 +128,14 @@ local drawIdol = function(deltaTime)
idolAnimTransitionScale = 1;
end
gfx.ImageRect(0, 0, Dim.design.width,desh, idolAnimation, 1, 0);
gfx.ImageRect(0, 0, Dim.design.width,Dim.design.height, idolAnimation, 1, 0);
gfx.GlobalAlpha(1);
end
end
user_setup = function () -- (semi new) user layering
local distance = 350
for i, user in ipairs(lobby_users) do
buttonY = 1142-360/1.2
@ -156,7 +161,7 @@ user_setup = function () -- (semi new) user layering
draw_user(user, 16+distance+distance, 1142-360/1.2, 42030//1.2, 31.2,215,245.5)
elseif i > 4 then
draw_user(user, 16+distance+distance+distance+distance, 1142-360/1.2, 420/1.2, 330/1.2, i,215,245.5)
draw_user(user, 16+distance+distance+distance+distance, 1142-360/1.2, 420/1.2, 330/1.2, 31.2,215,245.5)
end
end
end
@ -164,11 +169,11 @@ end
function drawHeader()
gfx.BeginPath()
gfx.FillColor(0, 0, 0, BAR_ALPHA)
gfx.Rect(0, 0, Dim.design.width, HEADER_HEIGHT)
gfx.Rect(0, 0, desw, HEADER_HEIGHT)
gfx.Fill()
gfx.ClosePath()
gfx.ImageRect(Dim.design.width / 2 - 200, HEADER_HEIGHT / 2 - 20, 400, 40, headerMatchingImage, 1, 0)
gfx.ImageRect(desw / 2 - 200, HEADER_HEIGHT / 2 - 20, 400, 40, headerMatchingImage, 1, 0)
end
mouse_clipped = function(x,y,w,h)
@ -177,7 +182,7 @@ end;
-- look into this when people are online
draw_room = function(name, x, y, selected, hoverindex)
local buttonWidth = Dim.design.width/2;
local buttonWidth = desw*(3/4);
local rx = x - (buttonWidth / 2);
local ty = y - (buttonHeight / 2);
local roomButtonBorder = buttonBorder;
@ -187,7 +192,7 @@ draw_room = function(name, x, y, selected, hoverindex)
gfx.FillColor(0,255,0);
roomButtonBorder = 4;
end
if mouse_clipped(rx,ty-75, buttonWidth, buttonHeight/2) then
if mouse_clipped(rx,ty, buttonWidth, buttonHeight) then
hovered = hoverindex;
gfx.FillColor(255,128,0);
end
@ -207,18 +212,40 @@ draw_room = function(name, x, y, selected, hoverindex)
gfx.Text(name, x, y);
end;
draw_button = function(name, x, y, buttonWidth, hoverindex)
draw_button_color(name, x, y, buttonWidth, hoverindex, temppanels)
custom_button = function (name,x,y,image,font,fSize,hoverindex)
local jw,jh = gfx.ImageSize(image);
gfx.BeginPath();
gfx.ImageRect(x, y, jw, jh, image,1,0);
gfx.BeginPath();
gfx.FillColor(255,255,255);
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE);
gfx.LoadSkinFont(font)
gfx.FontSize(fSize);
gfx.Text(name, x+(jw/2)+5, y+(jh/2.25));
end
draw_button_color = function(name, x, y, buttonWidth, hoverindex,img)
local rx = x;
local ty = y - buttonHeight;
draw_button = function(name, x, y, buttonWidth, hoverindex)
draw_button_color(name, x, y, buttonWidth, hoverindex, 40,40,40, 0,128,255)
end
draw_button_color = function(name, x, y, buttonWidth, hoverindex,r,g,b, olr,olg,olb)
local rx = x - (buttonWidth / 2);
local ty = y - (buttonHeight / 2);
gfx.BeginPath();
gfx.ImageRect(rx,ty,buttonWidth,buttonHeight,img,1,0)
if mouse_clipped(rx,ty, buttonWidth/1.5, buttonHeight*2) then
gfx.FillColor(olr, olg, olb);
if mouse_clipped(rx,ty, buttonWidth, buttonHeight) then
hovered = hoverindex;
gfx.FillColor(255,128,0);
end
gfx.Rect(rx - buttonBorder,
ty - buttonBorder,
buttonWidth + (buttonBorder * 2),
buttonHeight + (buttonBorder * 2));
gfx.Fill();
gfx.BeginPath();
gfx.FillColor(r,g,b);
gfx.Rect(rx, ty, buttonWidth, buttonHeight);
gfx.Fill();
gfx.BeginPath();
gfx.FillColor(255,255,255);
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE);
@ -254,7 +281,7 @@ draw_checkbox = function(text, x, y, hoverindex, current, can_click)
end
end;
draw_user = function(user, x, y , w, h, breadx,bready)
draw_user = function(user, x, y , w, h, breadx,bready, idolID)
local name = user.name
local showthing = false
if user.id == user_id then
@ -277,7 +304,6 @@ end
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE);
gfx.FillColor(255,255,255)
gfx.FontSize(30)
gfx.BeginPath()
gfx.ImageRect(x,y,w,h,m_4pb_panels_bottom,1,0)
@ -305,17 +331,17 @@ function render_loading()
gfx.Save()
gfx.ResetTransform()
gfx.BeginPath()
gfx.MoveTo(Dim.design.width, desh)
gfx.LineTo(Dim.design.width - 350, desh)
gfx.LineTo(Dim.design.width - 300, desh - 50)
gfx.LineTo(Dim.design.width, desh - 50)
gfx.MoveTo(desw, desh)
gfx.LineTo(desw - 350, desh)
gfx.LineTo(desw - 300, desh - 50)
gfx.LineTo(desw, desh - 50)
gfx.ClosePath()
gfx.FillColor(33,33,33)
gfx.Fill()
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("LOADING...", Dim.design.width - 20, desh - 3)
gfx.Text("LOADING...", desw - 20, desh - 3)
gfx.Restore()
end
@ -333,7 +359,7 @@ end
draw_diff_icon = function(diff, x, y, w, h)
difbar.render(deltaTime, x, y, 1, diff.difficulty, diff.level);
difbar.render(deltaTime, x, y, 1, diff.difficulty+1, diff.level);
end
local doffset = 0;
@ -367,7 +393,6 @@ draw_diffs = function(diffs, x, y, w, h, selectedDiff)
local xpos = x + ((w/2 - diffWidth/2) + (doffset)*(-0.8*diffWidth))
draw_diff_icon(diff, xpos + possx, y + possy, diffWidth, diffHeight, true)
gfx.ResetScissor()
end
set_diff = function(oldDiff, newDiff)
@ -417,7 +442,7 @@ function draw_rooms(y, h)
if room.password then
status = status..' <P>'
end
draw_room(room.name .. ': '.. status, Dim.design.width/2, ypos, i == selected_room_index, function()
draw_room(room.name .. ': '.. status, desw/2, ypos, i == selected_room_index, function()
join_room(room)
end)
end
@ -465,14 +490,14 @@ local IR_Handle = function()
end
function render_lobby(deltaTime)
local jw , jh = gfx.ImageSize(bg);
gfx.BeginPath();
gfx.ImageRect(0, 0, Dim.design.width, desh, bg,1,0);
gfx.ImageRect(0, 0, desw, desh, bg,1,0);
drawIdol(deltaTime)
gfx.BeginPath();
gfx.ImageRect(0, 0, Dim.design.width, desh, bg_graid1,1,0);
gfx.ImageRect(0, 0, Dim.design.width, desh, bg_graid2,1,0);
gfx.ImageRect(0, 0, desw, desh, bg_graid1,1,0);
gfx.ImageRect(0, 0, desw, desh, bg_graid2,1,0);
gfx.BeginPath();
m_base_part()
m_own_info()
@ -489,17 +514,15 @@ function render_room_list(deltaTime)
Background.draw(deltaTime)
getpanel()
draw_rooms(175, desh - 290);
-- Draw cover for rooms out of view
gfx.BeginPath()
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
if not loading then
draw_button("Create new room", Dim.design.width/2, desh-40-buttonHeight, Dim.design.width*(3/4), new_room);
end
-- draw_button("Create new room", desw/2, Dim.design.height-40-buttonHeight, desw/2, new_room);
end
@ -510,40 +533,37 @@ function render_password_screen(deltaTime)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("Joining "..selected_room.name.."...", Dim.design.width/2, desh/4)
gfx.Text("Joining "..selected_room.name.."...", desw/2, desh/4)
gfx.FillColor(50,50,50)
gfx.BeginPath()
gfx.Rect(0, desh/2-10, Dim.design.width, 40)
gfx.Rect(0, desh/2-10, desw, 40)
gfx.Fill();
gfx.FillColor(255,255,255)
gfx.Text("Please enter room password:", Dim.design.width/2, desh/2-40)
gfx.Text(string.rep("*",#textInput.text), Dim.design.width/2, desh/2+40)
gfx.Text("Please enter room password:", desw/2, desh/2-40)
gfx.Text(string.rep("*",#textInput.text), desw/2, desh/2+40)
if passwordError then
gfx.FillColor(255,50,50)
gfx.FontSize(60 + math.floor(passwordErrorOffset*20))
gfx.Text("Invalid password", Dim.design.width/2, desh/2+80)
gfx.Text("Invalid password", desw/2, desh/2+80)
end
draw_button("Join", Dim.design.width/2, desh*3/4, Dim.design.width/2, mpScreen.JoinWithPassword);
draw_button("Join", desw/2, desh*3/4, desw/2, mpScreen.JoinWithPassword);
end
function render_new_room_password(delta_time)
function render_new_room_password(deltaTime)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("Create New Room", Dim.design.width/2, desh/4)
gfx.Text("Create New Room", desw/2, desh/4)
gfx.FillColor(50,50,50)
gfx.BeginPath()
gfx.Rect(0, desh/2-10, Dim.design.width, 40)
gfx.Fill();
-- make something here
gfx.FillColor(255,255,255)
gfx.Text("Enter room password:", Dim.design.width/2, desh/2-40)
gfx.Text(string.rep("*",#textInput.text), Dim.design.width/2, desh/2+40)
draw_button("Create Room", Dim.design.width/2, desh*3/4, Dim.design.width/2, mpScreen.NewRoomStep);
gfx.Text("Enter room password:", desw/2, desh/2-40)
gfx.Text(string.rep("*",#textInput.text), desw/2, desh/2+40)
draw_button("Create Room", desw/2, desh*3/4, desw/2, mpScreen.NewRoomStep);
end
function render_new_room_name(deltaTime)
@ -552,31 +572,31 @@ function render_new_room_name(deltaTime)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("Create New Room", Dim.design.width/2, desh/4)
gfx.Text("Create New Room", desw/2, desh/4)
gfx.Rect(0, desh/2-10, Dim.design.width, 60)
gfx.Rect(0, desh/2-10, desw/2, 60)
gfx.Text("Please enter room name:", Dim.design.width/2, desh/2-40)
gfx.Text(textInput.text, Dim.design.width/2, desh/2+40)
draw_button("Next", Dim.design.width/2, desh*3/4, Dim.design.width/2, mpScreen.NewRoomStep);
gfx.Text("Please enter room name:", desw/2, desh/2-40)
gfx.Text(textInput.text, desw/2, desh/2+40)
draw_button("Next", desw/2, desh*3/4, desw/2, mpScreen.NewRoomStep);
end
function render_set_username(deltaTime)
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER, gfx.TEXT_ALIGN_BOTTOM)
gfx.FontSize(70)
gfx.Text("First things first...", Dim.design.width/2, desh/4)
gfx.Text("First things first...", desw/2, desh/4)
gfx.FillColor(50,50,50)
gfx.BeginPath()
gfx.Rect(0, desh/2-10, Dim.design.width, 60)
gfx.Rect(0, desh/2-10, desw, 60)
gfx.Fill();
gfx.FillColor(255,255,255)
gfx.Text("Enter a display name:", Dim.design.width/2, desh/2-40)
gfx.Text(textInput.text, Dim.design.width/2, desh/2+40)
draw_button("Join Multiplayer", Dim.design.width/2, desh*3/4, Dim.design.width/2, function()
gfx.Text("Enter a display name:", desw/2, desh/2-40)
gfx.Text(textInput.text, desw/2, desh/2+40)
draw_button("Join Multiplayer", desw/2, desh*3/4, desw/2, function()
loading = true;
mpScreen.SaveUsername()
end);

View File

@ -8,10 +8,12 @@ local lang = require("language.call")
local crew = game.GetSkinSetting("single_idol")
local betacrew = game.GetSkinSetting("beta_idol")
local staticcrew = game.GetSkinSetting("static_idol")
local bad = "/bad"
local okay = "/okay"
local veryokay = "/good"
local idle = "/idle"
local static = "/static"
local VolforceWindow = require('components.volforceWindow')
@ -65,6 +67,20 @@ local gaugeTypeMirrorImage = gfx.CreateSkinImage("result/gauge_type_badges/mirro
local gaugeTypeRandomImage = gfx.CreateSkinImage("result/gauge_type_badges/random.png", 0);
local gaugeTypeMirrorRandomImage = gfx.CreateSkinImage("result/gauge_type_badges/random_mirror.png", 0);
local UsBottom = gfx.CreateSkinImage("result/multi_4p/base.png",0)
local UsTop = gfx.CreateSkinImage("result/multi_4p/top.png",0)
local pos = {
gfx.CreateSkinImage("result/multi_4p/pos/1.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/2.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/3.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/4.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/5.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/6.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/7.png", 0),
gfx.CreateSkinImage("result/multi_4p/pos/8.png", 0),
}
local gradeImages = {
S = gfx.CreateSkinImage("common/grades/S.png", 0),
AAA_P = gfx.CreateSkinImage("common/grades/AAA+.png", 0),
@ -113,16 +129,13 @@ local gaugePermFillImage = gfx.CreateSkinImage(
local gaugeBlastiveFillImage = gfx.CreateSkinImage(
"gameplay/gauges/blastive/gauge_fill.png", 0)
local difficultyLabelImages = {
gfx.CreateSkinImage("diff/1 novice.png", 0),
gfx.CreateSkinImage("diff/2 advanced.png", 0),
gfx.CreateSkinImage("diff/3 exhaust.png", 0),
gfx.CreateSkinImage("diff/4 maximum.png", 0),
gfx.CreateSkinImage("diff/5 infinite.png", 0),
gfx.CreateSkinImage("diff/6 gravity.png", 0),
gfx.CreateSkinImage("diff/7 heavenly.png", 0),
gfx.CreateSkinImage("diff/8 vivid.png", 0),
gfx.CreateSkinImage("diff/9 exceed.png", 0)
local badgeImages = {
gfx.CreateSkinImage("song_select/medal/saved.png", 1),
gfx.CreateSkinImage("song_select/medal/played.png", 1),
gfx.CreateSkinImage("song_select/medal/clear.png", 1),
gfx.CreateSkinImage("song_select/medal/hard.png", 1),
gfx.CreateSkinImage("song_select/medal/uc.png", 1),
gfx.CreateSkinImage("song_select/medal/puc.png", 1),
}
local clearBadgeImages = {
@ -285,7 +298,7 @@ function drawTimingBar(y, value, max, type)
end
gettyping = function (animtype)
idolAnimation = gfx.LoadSkinAnimation('crew/anim/'..crew..animtype, 1 / 30, 0, true);
idolAnimation = gfx.LoadSkinAnimation('crew/anim/'..crew..animtype, 1 / 30, loopC, true);
end
@ -432,10 +445,6 @@ local drawRightPanelContent = function()
) * 10
);
gfx.Text(decimalPortion .. '%', rightPanelX + 988, rightPanelY + 296);
-- gfx.FontSize(24)
-- gfx.Text('%', rightPanelX + 988, rightPanelY + 294);
end
gfx.FontSize(24)
@ -484,37 +493,35 @@ local drawRightPanelContent = function()
local Fillmhd, Fillmihd = math.floor(result.meanHitDelta), result.medianHitDelta;
-- result.meanHitDelta up210 down
-- result.meanHitDelta bar
gfx.BeginPath();
gfx.FillColor(255, 100, 0, 255);
gfx.Rect(timmingX + 210, timmingY + 27.2 , Fillmhd, 12);
gfx.Fill();
if Fillmhd >= 210 then
gfx.Rect(timmingX + 210, timmingY + 27.2 , 210, 12);
gfx.Fill();
elseif Fillmhd <= -196 then
gfx.Rect(timmingX + 210, timmingY + 27.2 , -196, 12);
gfx.Fill();
elseif Fillmhd == 0 then
gfx.Rect(timmingX + 210, timmingY + 27.2 , 1, 12);
gfx.Fill();
end
gfx.Scissor(timmingX+13,timmingY + 27.2,408,12)
gfx.BeginPath();
gfx.Rect(timmingX + 210, timmingY + 27.2 , Fillmhd*2, 12);
-- result.medianHitDelta
gfx.BeginPath();
gfx.FillColor(255, 136, 0, 255);
gfx.Rect(timmingX + 210, timmingY + 27.2 + detailTextMargin, Fillmihd, 12);
if Fillmhd < 0 then
gfx.FillColor(46, 221, 241, 255);
gfx.Fill();
if Fillmihd >= 210 then
gfx.Rect(timmingX + 210, timmingY + 27.2 + detailTextMargin, 210, 12);
gfx.Fill();
elseif Fillmihd <= -196 then
gfx.Rect(timmingX + 210, timmingY + 27.2 + detailTextMargin, -196, 12);
gfx.Fill();
elseif Fillmihd == 0 then
gfx.Rect(timmingX + 210, timmingY + 27.2 + detailTextMargin, 1, 12);
else
gfx.FillColor(215, 48, 182, 255);
gfx.Fill();
end
gfx.ResetScissor()
-- result.medianHitDelta bar
gfx.BeginPath();
gfx.Scissor(timmingX+13,timmingY + 27.2 + detailTextMargin,408,12)
gfx.BeginPath();
gfx.Rect(timmingX + 210, timmingY + 27.2 + detailTextMargin, Fillmihd*2, 12);
if Fillmihd < 0 then
gfx.FillColor(46, 221, 241, 255);
gfx.Fill();
else
gfx.FillColor(215, 48, 182, 255);
gfx.Fill();
end
gfx.ResetScissor()
gfx.ClosePath();
gfx.FillColor(255, 255, 255, 255);
gfx.FontSize(19.25)
@ -659,6 +666,107 @@ local drawBottomPanelContent = function(deltatime)
gfx.Text(string.format("%dms", offset), leftX + 370, baseY + 89);
end
local drawmultipanelcontent = function(deltaTime)
if result.uid == nil then
gfx.Text(" ",100,100)
else
local i = result.displayIndex
if result.badge == 0 then
badgeImage = badgeImages[1]
elseif result.badge == 1 then
badgeImage = badgeImages[2]
elseif result.badge == 2 then
badgeImage = badgeImages[3]
elseif result.badge == 3 then
badgeImage = badgeImages[4]
elseif result.badge == 4 then
badgeImage = badgeImages[5]
elseif result.badge == 5 then
badgeImage = badgeImages[6]
end
gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
gfx.FontSize(26)
local posDWWidth, posDWHeight = gfx.ImageSize(UsBottom)
local posUPWidth, posUPHeight = gfx.ImageSize(UsTop)
local posWidth, posHeight = gfx.ImageSize(pos[i+1])
local multy = 16;
local multx = 0;
local half = 1.1
gfx.BeginPath()
gfx.ImageRect(multx, multy,posDWWidth/half,posDWHeight/half,UsBottom,1,0)
gfx.BeginPath()
gfx.ImageRect(multx, multy,posUPWidth/half,posUPHeight/half,UsTop,1,0)
gfx.BeginPath()
gfx.ImageRect(multx+332.5, multy+240, 79/half/1.5, 69/half/1.5, badgeImage, 1, 0)
gfx.BeginPath()
gfx.ImageRect(multx+332.5, multy+20,posWidth,posHeight,pos[i+1],1,0)
gfx.Text(string.upper(result.playerName),multx+75,multy+247)
gfx.Text(irText, multx + 15, multy + 294);
gfx.FontSize(24)
gfx.Text(string.format("%04d", math.floor(result.score/10000)), multx+221, multy+294)
local lastFourDigits = ((result.score / 10000) - math.floor(result.score / 10000))*10000
gfx.Text(string.format("%04d", math.floor(lastFourDigits)), multx+273, multy+294)
local gaugeFillImage = gaugeEffPassFillImage;
local gaugeBreakpoint = 0;
if result.gauge_type == 0 then
gaugeBreakpoint = 0.7;
if result.gauge <= 0.7 then
gaugeFillImage = gaugeEffFailFillImage;
else
gaugeFillImage = gaugeEffPassFillImage;
end
elseif result.gauge_type == 1 then
gaugeFillImage = gaugeExcFillImage;
elseif result.gauge_type == 2 then
gaugeFillImage = gaugePermFillImage;
elseif result.gauge_type == 3 then -- BLASTIVE RATE
gaugeFillImage = gaugeBlastiveFillImage;
end
local gaugePosX = multx + 120;
local gaugePosY = multy + 255;
local FillW, FillH = 236, 9.5;
gfx.BeginPath();
gfx.Scissor(gaugePosX, gaugePosY + (FillW - (FillW * (result.gauge))),
FillW, FillH * (result.gauge))
gfx.ImageRect(gaugePosX, gaugePosY, FillW, FillH, gaugeFillImage, 1, 0);
gfx.ResetScissor();
if (gaugeBreakpoint > 0) then
gfx.Save()
gfx.BeginPath()
gfx.GlobalAlpha(0.75);
local lineY = gaugePosY + (FillH - (FillH * (gaugeBreakpoint)))
gfx.MoveTo(gaugePosX, lineY)
gfx.LineTo(gaugePosX + 10, lineY)
gfx.StrokeWidth(2)
gfx.StrokeColor(255, 255, 255)
gfx.Stroke()
gfx.ClosePath()
gfx.Restore()
end
end
end
local drawJacketPanel = function()
gfx.BeginPath();
@ -672,16 +780,6 @@ local drawJacketPanelContent = function(deltaTime)
gfx.ImageRect(jacketPanelX + 13, jacketPanelY + 28, 265, 265, jacketImage or defaultJacketImage, 1, 0);
local adjustedDiff = Charting.GetDisplayDifficulty(result.jacketPath, result.difficulty)
DiffRectangle.render(deltaTime, jacketPanelX+183, jacketPanelY+2.5, 0.67, adjustedDiff, result.level);
-- gfx.BeginPath();
-- gfx.ImageRect(jacketPanelX + 183, jacketPanelY + 2.5, 140 / 1.5, 31 / 1.5,
-- difficultyLabelImages[result.difficulty + 1] or
-- difficultyLabelImages[4], 1, 0);
-- gfx.FontSize(17)
-- gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
-- gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE)
-- gfx.Text(result.level, jacketPanelX + 265, jacketPanelY + 13.5);
end
local IR_HeartbeatResponse = function(res)
@ -821,19 +919,27 @@ result_set = function()
end
earlyLateBarsStats.criticals = result.perfects -- Criticals are for all objects
if betacrew == true then
if result.score < grades.S then
if betacrew and not staticcrew then
if result.score > grades.S-1 then
animtype = veryokay
elseif result.score < grades.AAA then
loopC = 1
elseif result.score > grades.AAA-1 then
animtype = okay
elseif result.score < grades.A_P then
animtype = bad
elseif result.score < grades.A_P then
loopC = 1
elseif result.score < grades.AAA-1 then
animtype = bad
loopC = 1
end
else
end
if not betacrew and not staticcrew then
animtype = idle
end
loopC = 0
elseif not betacrew and staticcrew then
animtype = static
loopC = 0
end
gettyping(animtype)
@ -853,6 +959,8 @@ drawResultScreen = function (x, y, w, h, deltaTime)
gfx.GlobalAlpha(Easing.outQuad(transitionEnterScale))
drawmultipanelcontent(deltaTime)
drawBottomPanel()
drawBottomPanelContent(deltaTime)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1011 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB