Merge branch 'master' into feat/titlescreem-redo

This commit is contained in:
Hersi 2022-03-30 16:51:25 +02:00
commit f75859f7ce
18 changed files with 325 additions and 54 deletions

View File

@ -10,6 +10,7 @@ Project Starter: GSK Bladez
- Hoshikara
- GSK Bladez
- Local
- Kuenaimaku
## Graphics
- GSK Bladez

View File

@ -62,6 +62,12 @@
"type": "bool",
"default": false
},
"gameplay_showSearchControls": {
"label": "Show song select controls when searching",
"type": "bool",
"default": true
},
"separator_f": {},
"Debug": { "type": "label" },

View File

@ -131,6 +131,10 @@ ImageFont.draw = function(this, text, x, y, alpha, hFlag, vFlag)
end
function GetDisplayDifficulty(jacketPath, difficulty)
if jacketPath == nil then
return difficulty
end
local strippedPath = string.match(jacketPath:lower(), "[/\\][^\\/]+$")
if difficulty == 3 and strippedPath then
if string.find(strippedPath, "inf") ~= nil then

View File

@ -15,6 +15,7 @@ local difficultyLabelTexts = {
"ADV",
"EXH",
"MXM",
"INF",
"GRV",
"HVN",
"VVD"
@ -29,7 +30,7 @@ function render(deltatime, x, y, scale, diff, level)
gfx.BeginPath();
gfx.ImageRect(0, 0, 140, 31 ,
difficultyLabelImages[diff+1] or
difficultyLabelImages[diff] or
difficultyLabelImages[4], 1, 0);
@ -42,7 +43,7 @@ function render(deltatime, x, y, scale, diff, level)
gfx.FontSize(22)
gfx.Scale(1.2,1); -- Make the diff text more W I D E
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
gfx.Text(difficultyLabelTexts[diff+1], 18, 17);
gfx.Text(difficultyLabelTexts[diff], 18, 17);

View File

@ -103,6 +103,9 @@ end
function update_score(newScore)
score = newScore
if (score == 0) then
maxChain = 0;
end
end
function update_combo(newCombo)

View File

@ -98,7 +98,8 @@ local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, pro
);
-- Draw diff rectangle
DiffRectangle.render(deltaTime, 31, y+140, 0.84, diff, level);
local adjustedDiff = GetDisplayDifficulty(gameplay.jacketPath, diff)
DiffRectangle.render(deltaTime, 31, y+140, 0.84, adjustedDiff, level);
gfx.FontSize(30);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)

View File

@ -2,37 +2,37 @@
local lang = {
Challanges = {
--rightside
ch = "Idk",
ch1 = "Torture yourself :)",
ch = "Analyze your skill!",
ch1 = "Find out how good you are by taking on challenges!\nIn this mode your ability will pushed to the limits.",
},
Multiplayer = {
--rightside
mp = "Wait, there's multiplayer???",
mp2 = "Yes, but nobody is ever online",
mp = "Online matchmaking!",
mp2 = "Play against your friends!\nSupport for up to 8 players.",
},
Start = {
--rightside
st = "Play shit idk",
st2 = "Play something blah blah blah blah\nWith newlines",
st = "Basic play!",
st2 = "Play whatever songs you like!\nComplete for high scores on an IR around the world.",
--leftside
st3 = "Start",
sc = "Scroll",
sc = "VOL to select",
desc = "Test description. Blah blah blah",
},
Nautica = {
--rightside
dls = "Download more songs",
dls2 = "ksm.dev",
dls = "Download more songs!",
dls2 = "Get new charts from ksm.dev, updated daily!",
},
Settings = {
--rightside
se = "Adjust things",
se1= "Open settings",
se = "Open settings!",
se1= "Tweak things to your liking.",
},
Exit = {
--rightside
ex = "Leave this cursed game",
ex2 = "C'mon press that button!\nYou know you want to do it",
ex = "Close the game!",
ex2 = "Close the game and end this session.\nGoodbye!",
},
Result = {
--leftside

View File

@ -51,6 +51,10 @@ local danBadgeImage = gfx.CreateSkinImage("dan/inf.png", 0);
local badgeLines = gfx.CreateSkinImage("result/badge_lines.png", 0);
local badgeGrade = gfx.CreateSkinImage("result/badge_gradient.png", 0);
local gaugeTypeMirrorImage = gfx.CreateSkinImage("result/gauge_type_badges/mirror.png", 0);
local gaugeTypeRandomImage = gfx.CreateSkinImage("result/gauge_type_badges/random.png", 0);
local gaugeTypeMirrorRandomImage = gfx.CreateSkinImage("result/gauge_type_badges/random_mirror.png", 0);
local gradeImages = {
S = gfx.CreateSkinImage("common/grades/S.png", 0),
AAA_P = gfx.CreateSkinImage("common/grades/AAA+.png", 0),
@ -176,6 +180,13 @@ local irText = ''
game.LoadSkinSample("result")
game.LoadSkinSample("shutter")
local function isHard(result)
if result.flags == nil then
return result.gauge_type == 1
end
return result.flags & 1 == 1
end
local handleSfx = function()
if not bgSfxPlayed then
game.PlaySample("result", true)
@ -184,6 +195,55 @@ local handleSfx = function()
end
end
local drawGraph = function(x,y,w,h)
if isHard(result) then
gfx.BeginPath()
gfx.Rect(x,y,w,103)
gfx.FillColor(26,26,26,255)
gfx.Fill()
gfx.FillColor(255,255,255,255)
else
gfx.BeginPath()
gfx.Rect(x,y,w,h-68)
gfx.FillColor(55,27,51,255)
gfx.Fill()
gfx.BeginPath()
gfx.Rect(x,y+30,w,72)
gfx.FillColor(7,24,28,255)
gfx.Fill()
gfx.FillColor(255,255,255,255)
end
gfx.BeginPath()
gfx.MoveTo(x,y + h + 2 - h * result.gaugeSamples[1])
for i = 2, #result.gaugeSamples do
gfx.LineTo(x + i * w / #result.gaugeSamples,y + h + 2 - h * result.gaugeSamples[i])
end
if isHard(result) then
gfx.StrokeWidth(3)
gfx.StrokeColor(232,163,10)
gfx.Stroke()
gfx.Scissor(x, y + h *0.01, w, h*0.98)
gfx.Stroke()
gfx.ResetScissor()
gfx.Scissor(x, y + h * 0.99, w, (h * 0.03) + 4)
gfx.StrokeColor(255,0,0)
gfx.Stroke()
gfx.ResetScissor()
else
gfx.StrokeWidth(3)
gfx.StrokeColor(46,211,241)
gfx.Scissor(x, y + h * 0.3, w, (h * 0.7) + 4)
gfx.Stroke()
gfx.ResetScissor()
gfx.Scissor(x, y, w, h*0.3)
gfx.StrokeColor(215,48,182)
gfx.Stroke()
gfx.ResetScissor()
end
end
function drawTimingBar(y, value, max, type)
gfx.BeginPath();
@ -401,6 +461,21 @@ local drawRightPanelContent = function()
gfx.Restore()
end
-- Draw the gauge type flags if needed (mirror, random)
if(result.mirror or result.random) then
gfx.BeginPath();
local gaugeTypeFlagPosX = gaugePosX + 10;
local gaugeTypeFlagPosY = gaugePosY - 30;
local flagw, flagh = gfx.ImageSize(gaugeTypeMirrorImage)
if(result.mirror and result.random) then
gfx.ImageRect(gaugeTypeFlagPosX, gaugeTypeFlagPosY, flagw, flagh, gaugeTypeMirrorRandomImage, 1, 0)
elseif(result.mirror) then
gfx.ImageRect(gaugeTypeFlagPosX, gaugeTypeFlagPosY, flagw, flagh, gaugeTypeMirrorImage, 1, 0)
elseif(result.random) then
gfx.ImageRect(gaugeTypeFlagPosX, gaugeTypeFlagPosY, flagw, flagh, gaugeTypeRandomImage, 1, 0)
end
end
-- Draw err/early/critical/late/err texts
gfx.Text(earlyLateBarsStats.earlyErrors, rightPanelX + 683,
@ -497,8 +572,23 @@ local drawBottomPanelContent = function(deltatime)
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE)
gfx.Text(result.medianHitDelta.." ms", rightX, baseY);
gfx.Text(math.floor(result.meanHitDelta).." ms", rightX, baseY + detailTextMargin);
--Draw Graph
drawGraph(leftX-22, baseY-18, 454, 98);
--draw Recommended Offset
local delta = math.floor(result.medianHitDelta);
local songOffset = 0;
if (songOffset == nil) then songOffset = 0; end
local offset = tonumber(songOffset) + delta;
gfx.FillColor(255,255,255,255);
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_TOP)
gfx.Text('RECOMMENDED SONG OFFSET:', leftX + 367, baseY + 89);
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP)
gfx.Text(string.format("%dms", offset), leftX + 370, baseY + 89);
end
local drawJacketPanel = function()
gfx.BeginPath();
local tw, th = gfx.ImageSize(jacketPanelImage);
@ -508,10 +598,9 @@ end
local drawJacketPanelContent = function(deltaTime)
gfx.BeginPath();
gfx.ImageRect(jacketPanelX + 13, jacketPanelY + 28, 265, 265,
jacketImage or defaultJacketImage, 1, 0);
DiffRectangle.render(deltaTime, jacketPanelX+183, jacketPanelY+2.5, 0.67, result.difficulty, result.level);
gfx.ImageRect(jacketPanelX + 13, jacketPanelY + 28, 265, 265, jacketImage or defaultJacketImage, 1, 0);
local adjustedDiff = 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,

View File

@ -143,7 +143,8 @@ local check_or_create_cache = function(challenge)
["title"] = gfx.CreateLabel(missing_text, defaultLabelSize, 0),
["title_raw"] = missing_text,
["level"] = 0,
["difficulty"] = 0
["difficulty"] = 0,
["jacketPath"] = "",
}
}
else -- if not challenge.missing_chart then
@ -153,7 +154,8 @@ local check_or_create_cache = function(challenge)
["title"] = gfx.CreateLabel(chart.title, defaultLabelSize, 0),
["title_raw"] = chart.title,
["level"] = chart.level,
["difficulty"] = chart.difficulty
["difficulty"] = chart.difficulty,
["jacketPath"] = chart.jacketPath,
})
end
challengeCache[challenge.id]["charts"] = charts
@ -403,8 +405,8 @@ draw_challenge = function(challenge, x, y, w, h, selected)
for i, chart in ipairs(challengeCache[challenge.id]["charts"]) do
local ypos = offsetY + paddingY * (i - 1)
DiffRectangle.render(timer, offsetX, ypos, diffIconScale, chart.difficulty, chart.level)
local adjustedDiff = GetDisplayDifficulty(chart.jacketPath, chart.difficulty)
DiffRectangle.render(timer, offsetX, ypos, diffIconScale, adjustedDiff, chart.level)
local _, titleHeight = gfx.LabelSize(chart.title)
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_MIDDLE)

View File

@ -9,8 +9,8 @@ local defaultFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/bg.pn
local collectionFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/col_bg.png', 0)
local subFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/sub_bg.png', 0)
local scrollbarBgImage = gfx.CreateSkinImage("song_select/scrollbar/bg.png", 1)
local scrollbarFillImage = gfx.CreateSkinImage("song_select/scrollbar/fill.png", 1)
local scrollBarBackgroundImage = gfx.CreateSkinImage("song_select/scrollbar/bg.png", 1)
local scrollBarFillImage = gfx.CreateSkinImage("song_select/scrollbar/fill.png", 1)
local cursorImages = {
gfx.CreateSkinImage("song_select/cursor.png", 1), -- Effective rate or fallback
@ -283,27 +283,39 @@ function drawScrollbar()
if not isFilterWheelActive or transitionLeaveScale ~= 0 then return end
gfx.BeginPath()
local bgW = 13*0.85;
local bgH = 1282*0.85;
local scrollPosX = desw-20
local scrollPosY = desh/2-bgH/2
gfx.ImageRect(scrollPosX, scrollPosY, bgW, bgH, scrollbarBgImage, 1, 0)
local total = game.GetSkinSetting('_songWheelScrollbarTotal')
local index = game.GetSkinSetting('_songWheelScrollbarIndex')
if (index == nil) then return end;
local resize = 0.85;
local lw, lh = gfx.ImageSize(scrollBarBackgroundImage);
local lw = lw * resize;
local lh = lh * resize;
local xPos = desw-20
local backgroundYPos = desh/2 - lh/2
gfx.ImageRect(xPos, backgroundYPos, lw, lh, scrollBarBackgroundImage, 1, 0)
gfx.BeginPath()
local fillW = 27*0.85
local fillH = 65*0.85
local fillPosOffsetY = (bgH-fillH)*(
(index-1) /
math.max(1,total-1)
)
local sw, sh = gfx.ImageSize(scrollBarFillImage);
local sw = sw * resize;
local sh = sh * resize;
local fillXPos = xPos - 6;
gfx.ImageRect(scrollPosX-6, scrollPosY+fillPosOffsetY, fillW, fillH, scrollbarFillImage, 1, 0)
-- figure out index and total
local index = 1;
local total = 1;
if selectionMode == 'folders' then
index = selectedFolder
total = #filters.folder;
else
index = selectedLevel
total = #filters.level;
end
local minScrollYPos = backgroundYPos;
local maxScrollYPos = backgroundYPos + lh - sh;
local scrollStep = (maxScrollYPos - minScrollYPos) / (total - 1);
local scrollbarYOffset = (index - 1) * scrollStep;
local scrollbarYPos = minScrollYPos + scrollbarYOffset;
gfx.ImageRect(fillXPos, scrollbarYPos, sw, sh, scrollBarFillImage, 1, 0)
end
function tickTransitions(deltaTime)

View File

@ -27,13 +27,20 @@ local top50JacketOverlayImage = gfx.CreateSkinImage("song_select/top50_jacket.pn
local diffCursorImage = gfx.CreateSkinImage("song_select/level_cursor.png", 1)
local scrollBarBackgroundImage = gfx.CreateSkinImage("song_select/scrollbar/bg.png", 1)
local scrollBarFillImage = gfx.CreateSkinImage("song_select/scrollbar/fill.png", 1)
local filterInfoBgImage = gfx.CreateSkinImage("song_select/filter_info_bg.png", 1)
local sortInfoBgImage = gfx.CreateSkinImage("song_select/sort_info_bg.png", 1)
local searchBgImage = gfx.CreateSkinImage("song_select/search_bg.png", 1)
local searchActiveImage = gfx.CreateSkinImage("song_select/search_active.png", 1)
local searchInfoPanelImage = gfx.CreateSkinImage("song_select/search_info_panel.png", 1)
local defaultJacketImage = gfx.CreateSkinImage("song_select/loading.png", 0)
local difficultyLabelImages = {
gfx.CreateSkinImage("song_select/plate/difficulty_labels/novice.png", 1),
gfx.CreateSkinImage("song_select/plate/difficulty_labels/advanced.png", 1),
@ -141,6 +148,15 @@ local transitionJacketBgScrollScale = 0;
local transitionJacketBgScrollAlpha = 0;
local transitionJacketBgScrollPosX = 0;
--search
local searchPreviousActiveState = false;
local searchInfoPreviousActiveState = false;
local transitionSearchEnterScale = 0;
local transitionSearchInfoEnterScale = 0;
local transitionSearchBackgroundAlpha = 0;
local transitionSearchbarOffsetY = 0;
local transitionSearchInfoOffsetY = 0;
local transitionLaserScale = 0;
local transitionLaserY = 0;
@ -625,7 +641,7 @@ function drawFilterInfo(deltatime)
gfx.LoadSkinFont('NotoSans-Regular.ttf')
if (songwheel.searchInputActive) then
return;
--return;
end
gfx.BeginPath()
@ -663,22 +679,115 @@ function drawCursor()
end
function drawSearch()
if (not songwheel.searchInputActive) then
if (not songwheel.searchInputActive and searchPreviousActiveState) then
searchPreviousActiveState = false;
game.PlaySample('sort_wheel/enter.wav');
elseif (songwheel.searchInputActive and not searchPreviousActiveState) then
searchPreviousActiveState = true;
game.PlaySample('sort_wheel/leave.wav');
end
if (songwheel.searchText ~= '' and searchInfoPreviousActiveState == true) then
searchInfoPreviousActiveState = false;
elseif (songwheel.searchText == '' and searchInfoPreviousActiveState == false) then
searchInfoPreviousActiveState = true;
end
if (transitionSearchEnterScale == 0) then
return;
end
-- Draw dark overlay over Songwheel
gfx.BeginPath();
local tw, th = gfx.ImageSize(searchBgImage)
local xPos = desw-tw/2;
local yPos = 90;
gfx.FillColor(0, 0, 0, math.floor(transitionSearchBackgroundAlpha * 192));
gfx.Rect(0, 0, 1080, 1920);
gfx.Fill();
gfx.ImageRect(xPos, yPos, tw/2, th/2, searchBgImage, 1, 0)
-- Draw search info panel
gfx.BeginPath();
local infoResize = 0.855;
local sw, sh = gfx.ImageSize(searchInfoPanelImage)
sw = sw * infoResize;
sh = sh * infoResize;
local infoXPos = 0;
local infoYStartPos = desh - sh - 772 + 242;
local infoYPos = infoYStartPos + transitionSearchInfoOffsetY;
if (game.GetSkinSetting('gameplay_showSearchControls')) then
gfx.ImageRect(infoXPos, infoYPos, sw, sh, searchInfoPanelImage, transitionSearchBackgroundInfoAlpha, 0)
end
gfx.FontSize(32);
-- Draw Search is Active text
gfx.BeginPath();
local activeResize = 0.855;
local activew, activeh = gfx.ImageSize(searchActiveImage)
activew = activew * activeResize;
activeh = activeh * activeResize;
local activeXPos = 0;
local activeYStartPos = desh - sh - 722;
local activeYPos = activeYStartPos + transitionSearchInfoOffsetY;
gfx.ImageRect(activeXPos, activeYPos, activew, activeh, searchActiveImage, 1, 0);
-- Draw Searchbox
gfx.BeginPath();
local searchResize = 0.8;
local tw, th = gfx.ImageSize(searchBgImage);
tw = tw * searchResize;
th = th * searchResize;
local xPos = (desw-tw)/2;
local yStartPos = 170;
local yPos = yStartPos - transitionSearchbarOffsetY
gfx.ImageRect(xPos, yPos, tw, th, searchBgImage, 1, 0)
gfx.FontSize(48);
gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
gfx.Text(songwheel.searchText, xPos+100, yPos+52);
gfx.Text(songwheel.searchText, xPos + 160, yPos + 83.2);
end
function drawScrollbar()
if isFilterWheelActive or transitionLeaveScale ~= 0 then return end
-- Scrollbar Background
gfx.BeginPath()
local resize = 0.85;
local lw, lh = gfx.ImageSize(scrollBarBackgroundImage);
local lw = lw * resize;
local lh = lh * resize;
local xPos = desw-20
local backgroundYPos = desh/2 - lh/2
gfx.ImageRect(xPos, backgroundYPos, lw, lh, scrollBarBackgroundImage, 1, 0)
-- Scrollbar Fill
gfx.BeginPath()
local sw, sh = gfx.ImageSize(scrollBarFillImage);
local sw = sw * resize;
local sh = sh * resize;
local fillXPos = xPos - 6;
local minScrollYPos = backgroundYPos;
local maxScrollYPos = backgroundYPos + lh - sh;
local scrollStep = (maxScrollYPos - minScrollYPos) / (#songwheel.songs - 1);
local scrollbarYOffset = (selectedIndex - 1) * scrollStep;
local scrollbarYPos = minScrollYPos + scrollbarYOffset;
gfx.ImageRect(fillXPos, scrollbarYPos, sw, sh, scrollBarFillImage, 1, 0);
-- 1st letter of song title on scroll
gfx.BeginPath()
gfx.FontSize(16)
gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
gfx.Rect(fillXPos-18, scrollbarYPos - 5, 16, 16)
gfx.FillColor(0,0,0,170)
gfx.Fill()
gfx.FillColor(255,255,255)
gfx.TextAlign(gfx.TEXT_ALIGN_MIDDLE + gfx.TEXT_ALIGN_CENTER)
if (songwheel.songs[selectedIndex] ~= nil) then
local letter = string.upper(common.firstLetter(songwheel.songs[selectedIndex].title));
gfx.Text(letter, fillXPos-10, scrollbarYPos + 5);
end
end
function refreshIrLeaderboard(deltaTime)
@ -787,6 +896,41 @@ function tickTransitions(deltaTime)
transitionAfterscrollDataOverlayAlpha = 1;
end
-- Searchbar offsets and alpha
if not searchPreviousActiveState then
if transitionSearchEnterScale > 0 then
transitionSearchEnterScale = transitionSearchEnterScale - deltaTime / 0.5 -- transition should last for that time in seconds
else
transitionSearchEnterScale = 0
end
else
if transitionSearchEnterScale < 1 then
transitionSearchEnterScale = transitionSearchEnterScale + deltaTime / 0.5 -- transition should last for that time in seconds
else
transitionSearchEnterScale = 1
end
end
transitionSearchInfoOffsetY = Easing.inOutQuad(1 - transitionSearchEnterScale) * 1680
transitionSearchbarOffsetY = Easing.inOutQuad(1 - transitionSearchEnterScale) * 300
transitionSearchBackgroundAlpha = Easing.inOutQuad(transitionSearchEnterScale)
if not searchInfoPreviousActiveState then
if transitionSearchInfoEnterScale > 0 then
transitionSearchInfoEnterScale = transitionSearchInfoEnterScale - deltaTime / 0.25 -- transition should last for that time in seconds
else
transitionSearchInfoEnterScale = 0
end
else
if transitionSearchInfoEnterScale < 1 then
transitionSearchInfoEnterScale = transitionSearchInfoEnterScale + deltaTime / 0.25 -- transition should last for that time in seconds
else
transitionSearchInfoEnterScale = 1
end
end
transitionSearchBackgroundInfoAlpha = Easing.inOutQuad(transitionSearchInfoEnterScale)
-- Grade alpha
if transitionAfterscrollScale >= 0.03 and transitionAfterscrollScale < 0.033 then
transitionAfterscrollGradeAlpha = 0.5;
@ -932,6 +1076,8 @@ draw_songwheel = function(x,y,w,h, deltaTime)
drawSearch();
drawScrollbar();
gfx.BeginPath();
gfx.FontSize(18)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP)

View File

@ -16,5 +16,5 @@ uniform mat4 world;
void main()
{
fsTex = inTex;
gl_Position = proj * camera * world * vec4(inPos.x, inPos.y * 3.5, 0, 1);
gl_Position = proj * camera * world * vec4(inPos.x, inPos.y * 3.8, 0, 1);
}

View File

@ -12,4 +12,10 @@ Custom crew assets
Clean up so no part of your custom crew is outside of frame_metal.png.
For added effect, apply this transformation to the crew portrait (in Paint.net ONLY, using zoom/rotate tool)
0.00
11.31
19.38
EXPORT AS .PNG FILE!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB