From 3cc1e47ec4c06ab6bf077a94848e7505857bf3a7 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 4 Sep 2020 14:22:42 +0200 Subject: [PATCH 1/3] Implement on-demand skin downloader (fixes #1166) Seems to work on first try, I'm somewhat surprised :D Future ideas (not for this change): - I haven't checked how the performance impact is of a new skin joining, might want to move the loading to a separate thread? - Use the skins from download directory instead of redownloading? Might want to compare modified time. - Make all skins load on demand only to save some memory? --- data/languages/belarusian.txt | 3 + data/languages/bosnian.txt | 3 + data/languages/brazilian_portuguese.txt | 3 + data/languages/bulgarian.txt | 3 + data/languages/catalan.txt | 3 + data/languages/chuvash.txt | 3 + data/languages/czech.txt | 3 + data/languages/danish.txt | 3 + data/languages/dutch.txt | 3 + data/languages/finnish.txt | 3 + data/languages/french.txt | 3 + data/languages/german.txt | 3 + data/languages/greek.txt | 3 + data/languages/hungarian.txt | 3 + data/languages/italian.txt | 3 + data/languages/japanese.txt | 3 + data/languages/korean.txt | 3 + data/languages/kyrgyz.txt | 3 + data/languages/norwegian.txt | 3 + data/languages/persian.txt | 3 + data/languages/polish.txt | 3 + data/languages/portuguese.txt | 3 + data/languages/romanian.txt | 3 + data/languages/russian.txt | 15 ++-- data/languages/serbian.txt | 3 + data/languages/simplified_chinese.txt | 3 + data/languages/slovak.txt | 3 + data/languages/spanish.txt | 3 + data/languages/swedish.txt | 3 + data/languages/traditional_chinese.txt | 3 + data/languages/turkish.txt | 3 + data/languages/ukrainian.txt | 3 + src/game/client/components/menus_settings.cpp | 7 ++ src/game/client/components/skins.cpp | 75 +++++++++++++++---- src/game/client/components/skins.h | 9 +++ src/game/variables.h | 4 +- 36 files changed, 183 insertions(+), 20 deletions(-) diff --git a/data/languages/belarusian.txt b/data/languages/belarusian.txt index 39e3fe654..5264841cc 100644 --- a/data/languages/belarusian.txt +++ b/data/languages/belarusian.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/bosnian.txt b/data/languages/bosnian.txt index 105cfdde8..5ea869d68 100644 --- a/data/languages/bosnian.txt +++ b/data/languages/bosnian.txt @@ -1168,6 +1168,9 @@ Skip the main menu Max CSVs == +Download skins +== + Borderless window == diff --git a/data/languages/brazilian_portuguese.txt b/data/languages/brazilian_portuguese.txt index 1b391e89e..6f36a0cb4 100644 --- a/data/languages/brazilian_portuguese.txt +++ b/data/languages/brazilian_portuguese.txt @@ -1217,6 +1217,9 @@ Speed Skip the main menu == +Download skins +== + https://wiki.ddnet.tw/ == diff --git a/data/languages/bulgarian.txt b/data/languages/bulgarian.txt index cda6bdf87..76b55dbcc 100644 --- a/data/languages/bulgarian.txt +++ b/data/languages/bulgarian.txt @@ -847,6 +847,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/catalan.txt b/data/languages/catalan.txt index 56827d406..cd7f7c50d 100644 --- a/data/languages/catalan.txt +++ b/data/languages/catalan.txt @@ -1194,6 +1194,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/chuvash.txt b/data/languages/chuvash.txt index 62c6db382..39da61f16 100644 --- a/data/languages/chuvash.txt +++ b/data/languages/chuvash.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/czech.txt b/data/languages/czech.txt index 6b86711a9..ffa911c23 100644 --- a/data/languages/czech.txt +++ b/data/languages/czech.txt @@ -853,6 +853,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/danish.txt b/data/languages/danish.txt index d0c8b45da..0bc78242d 100644 --- a/data/languages/danish.txt +++ b/data/languages/danish.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/dutch.txt b/data/languages/dutch.txt index 0cf30b469..125fb0896 100644 --- a/data/languages/dutch.txt +++ b/data/languages/dutch.txt @@ -1206,6 +1206,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/finnish.txt b/data/languages/finnish.txt index 3faec32c1..144cede95 100644 --- a/data/languages/finnish.txt +++ b/data/languages/finnish.txt @@ -851,6 +851,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/french.txt b/data/languages/french.txt index 57fdd9303..8242eada2 100644 --- a/data/languages/french.txt +++ b/data/languages/french.txt @@ -1222,6 +1222,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/german.txt b/data/languages/german.txt index 8ff50d10c..602d92f9b 100644 --- a/data/languages/german.txt +++ b/data/languages/german.txt @@ -1225,6 +1225,9 @@ Editor Menu == Menü +Download skins +== Skins herunterladen + Warning == Warnung diff --git a/data/languages/greek.txt b/data/languages/greek.txt index 1d4ae26ad..0d1e247df 100644 --- a/data/languages/greek.txt +++ b/data/languages/greek.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/hungarian.txt b/data/languages/hungarian.txt index 5e46bf6b6..a0593669a 100644 --- a/data/languages/hungarian.txt +++ b/data/languages/hungarian.txt @@ -1200,6 +1200,9 @@ Speed Skip the main menu == +Download skins +== + Skin prefix == diff --git a/data/languages/italian.txt b/data/languages/italian.txt index 9304d5e57..3aa3bfd70 100644 --- a/data/languages/italian.txt +++ b/data/languages/italian.txt @@ -856,6 +856,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/japanese.txt b/data/languages/japanese.txt index 3938ed2c9..3a9bef932 100644 --- a/data/languages/japanese.txt +++ b/data/languages/japanese.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/korean.txt b/data/languages/korean.txt index 8b1255a26..4f7d82e1a 100644 --- a/data/languages/korean.txt +++ b/data/languages/korean.txt @@ -849,6 +849,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/kyrgyz.txt b/data/languages/kyrgyz.txt index a231089f3..0dc4288d7 100644 --- a/data/languages/kyrgyz.txt +++ b/data/languages/kyrgyz.txt @@ -841,6 +841,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/norwegian.txt b/data/languages/norwegian.txt index 92f21a78c..0b845b37a 100644 --- a/data/languages/norwegian.txt +++ b/data/languages/norwegian.txt @@ -1202,6 +1202,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/persian.txt b/data/languages/persian.txt index 552f99e38..62d4c37da 100644 --- a/data/languages/persian.txt +++ b/data/languages/persian.txt @@ -848,6 +848,9 @@ Show only supported V-Sync == +Download skins +== + may cause delay == diff --git a/data/languages/polish.txt b/data/languages/polish.txt index e401b6771..d4cc093e4 100644 --- a/data/languages/polish.txt +++ b/data/languages/polish.txt @@ -1206,6 +1206,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/portuguese.txt b/data/languages/portuguese.txt index 78fa687e8..982712735 100644 --- a/data/languages/portuguese.txt +++ b/data/languages/portuguese.txt @@ -1031,6 +1031,9 @@ Reset wanted weapon on death Skip the main menu == +Download skins +== + Vanilla skins only == diff --git a/data/languages/romanian.txt b/data/languages/romanian.txt index e68855401..2fc3d56b9 100644 --- a/data/languages/romanian.txt +++ b/data/languages/romanian.txt @@ -856,6 +856,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/russian.txt b/data/languages/russian.txt index 038362c21..31c409208 100644 --- a/data/languages/russian.txt +++ b/data/languages/russian.txt @@ -636,9 +636,6 @@ Internet Max demos == Максимальное количество демо -News -== - Join game == Играть @@ -843,9 +840,6 @@ Server best: Personal best: == Ваше лучшее: -Learn -== - Browser == Браузер @@ -1229,3 +1223,12 @@ Server executable not found, can't run server Editor == Редактор + +News +== + +Download skins +== + +Learn +== diff --git a/data/languages/serbian.txt b/data/languages/serbian.txt index 4390e71bf..64fb12c85 100644 --- a/data/languages/serbian.txt +++ b/data/languages/serbian.txt @@ -854,6 +854,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/simplified_chinese.txt b/data/languages/simplified_chinese.txt index df0516982..8677ad03e 100644 --- a/data/languages/simplified_chinese.txt +++ b/data/languages/simplified_chinese.txt @@ -1218,6 +1218,9 @@ Speed Skip the main menu == +Download skins +== + Website == diff --git a/data/languages/slovak.txt b/data/languages/slovak.txt index ff7e84bb8..2de8f9422 100644 --- a/data/languages/slovak.txt +++ b/data/languages/slovak.txt @@ -850,6 +850,9 @@ Max CSVs Dummy settings == +Download skins +== + Vanilla skins only == diff --git a/data/languages/spanish.txt b/data/languages/spanish.txt index c4e952d47..277ffc1ed 100644 --- a/data/languages/spanish.txt +++ b/data/languages/spanish.txt @@ -1207,6 +1207,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/swedish.txt b/data/languages/swedish.txt index 3ea928d85..5952f39ff 100644 --- a/data/languages/swedish.txt +++ b/data/languages/swedish.txt @@ -1203,6 +1203,9 @@ Speed Skip the main menu == +Download skins +== + Client message == diff --git a/data/languages/traditional_chinese.txt b/data/languages/traditional_chinese.txt index 3e9cd10e2..ad28f0864 100644 --- a/data/languages/traditional_chinese.txt +++ b/data/languages/traditional_chinese.txt @@ -1212,6 +1212,9 @@ Speed Skip the main menu == +Download skins +== + Website == diff --git a/data/languages/turkish.txt b/data/languages/turkish.txt index 6577b6b75..18e40bc5a 100644 --- a/data/languages/turkish.txt +++ b/data/languages/turkish.txt @@ -1209,6 +1209,9 @@ Speed Skip the main menu == +Download skins +== + https://wiki.ddnet.tw/ == diff --git a/data/languages/ukrainian.txt b/data/languages/ukrainian.txt index 8438a997a..18c3f6e2b 100644 --- a/data/languages/ukrainian.txt +++ b/data/languages/ukrainian.txt @@ -1204,6 +1204,9 @@ Markers Skip the main menu == +Download skins +== + https://wiki.ddnet.tw/ == diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp index f819458ee..0b9951395 100644 --- a/src/game/client/components/menus_settings.cpp +++ b/src/game/client/components/menus_settings.cpp @@ -452,6 +452,13 @@ void CMenus::RenderSettingsTee(CUIRect MainView) Dummy.HSplitTop(20.0f, &DummyLabel, &Dummy); + if(DoButton_CheckBox(&g_Config.m_ClDownloadSkins, Localize("Download skins"), g_Config.m_ClDownloadSkins, &DummyLabel)) + { + g_Config.m_ClDownloadSkins ^= 1; + } + + Dummy.HSplitTop(20.0f, &DummyLabel, &Dummy); + if(DoButton_CheckBox(&g_Config.m_ClVanillaSkinsOnly, Localize("Vanilla skins only"), g_Config.m_ClVanillaSkinsOnly, &DummyLabel)) { g_Config.m_ClVanillaSkinsOnly ^= 1; diff --git a/src/game/client/components/skins.cpp b/src/game/client/components/skins.cpp index 6814e88b6..af9a8579d 100644 --- a/src/game/client/components/skins.cpp +++ b/src/game/client/components/skins.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -49,19 +50,25 @@ int CSkins::SkinScan(const char *pName, int IsDir, int DirType, void *pUser) return 0; } - char aBuf[512]; + char aBuf[MAX_PATH_LENGTH]; str_format(aBuf, sizeof(aBuf), "skins/%s", pName); + return pSelf->LoadSkin(aNameWithoutPng, aBuf, DirType); +} + +int CSkins::LoadSkin(const char *pName, const char *pPath, int DirType) +{ + char aBuf[512]; CImageInfo Info; - if(!pSelf->Graphics()->LoadPNG(&Info, aBuf, DirType)) + if(!Graphics()->LoadPNG(&Info, pPath, DirType)) { str_format(aBuf, sizeof(aBuf), "failed to load skin from %s", pName); - pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "game", aBuf); + Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "game", aBuf); return 0; } CSkin Skin; - Skin.m_IsVanilla = IsVanillaSkin(aNameWithoutPng); - Skin.m_OrgTexture = pSelf->Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0); + Skin.m_IsVanilla = IsVanillaSkin(pName); + Skin.m_OrgTexture = Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0); int BodySize = 96; // body size if (BodySize > Info.m_Height) @@ -133,22 +140,21 @@ int CSkins::SkinScan(const char *pName, int IsDir, int DirType, void *pUser) d[y*Pitch+x*4+2] = v; } - Skin.m_ColorTexture = pSelf->Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0); + Skin.m_ColorTexture = Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0); free(Info.m_pData); // set skin data - str_copy(Skin.m_aName, aNameWithoutPng, sizeof(Skin.m_aName)); + str_copy(Skin.m_aName, pName, sizeof(Skin.m_aName)); if(g_Config.m_Debug) { str_format(aBuf, sizeof(aBuf), "load skin %s", Skin.m_aName); - pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "game", aBuf); + Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "game", aBuf); } - pSelf->m_aSkins.add(Skin); + m_aSkins.add(Skin); return 0; } - void CSkins::OnInit() { m_EventSkinPrefix[0] = '\0'; @@ -203,7 +209,7 @@ int CSkins::Find(const char *pName) { return -1; } - else if(pSkinPrefix) + else if(pSkinPrefix && pSkinPrefix[0]) { char aBuf[64]; str_format(aBuf, sizeof(aBuf), "%s_%s", pSkinPrefix, pName); @@ -220,8 +226,51 @@ int CSkins::Find(const char *pName) int CSkins::FindImpl(const char *pName) { auto r = ::find_binary(m_aSkins.all(), pName); - if(r.empty()) + if(!r.empty()) + return &r.front() - m_aSkins.base_ptr(); + + if(str_comp(pName, "default") == 0) return -1; - return &r.front() - m_aSkins.base_ptr(); + if(!g_Config.m_ClDownloadSkins) + return -1; + + if(str_find(pName, "/") != 0) + return -1; + + auto d = ::find_binary(m_aDownloadSkins.all(), pName); + if(!d.empty()) + { + if(d.front().m_pTask && d.front().m_pTask->State() == HTTP_DONE) + { + char aPath[MAX_PATH_LENGTH]; + str_format(aPath, sizeof(aPath), "downloadedskins/%s.png", d.front().m_aName); + Storage()->RenameFile(d.front().m_aPath, aPath, IStorage::TYPE_SAVE); + LoadSkin(d.front().m_aName, aPath, IStorage::TYPE_SAVE); + d.front().m_pTask = nullptr; + } + if(d.front().m_pTask && d.front().m_pTask->State() == HTTP_ERROR) + { + Storage()->RemoveFile(d.front().m_aPath, IStorage::TYPE_SAVE); + d.front().m_pTask = nullptr; + } + return -1; + } + + int DefaultIndex = CSkins::Find("default"); + + CDownloadSkin Skin; + str_copy(Skin.m_aName, pName, sizeof(Skin.m_aName)); + Skin.m_IsVanilla = false; + Skin.m_OrgTexture = m_aSkins[DefaultIndex].m_OrgTexture; + Skin.m_ColorTexture = m_aSkins[DefaultIndex].m_ColorTexture; + Skin.m_BloodColor = m_aSkins[DefaultIndex].m_BloodColor; + + char aUrl[256]; + str_format(aUrl, sizeof(aUrl), "%s%s.png", g_Config.m_ClSkinDownloadUrl, pName); + str_format(Skin.m_aPath, sizeof(Skin.m_aPath), "downloadedskins/%s.%d.tmp", pName, pid()); + Skin.m_pTask = std::make_shared(Storage(), aUrl, Skin.m_aPath, IStorage::TYPE_SAVE, CTimeout{0, 0, 0}); + m_pClient->Engine()->AddJob(Skin.m_pTask); + m_aDownloadSkins.add(Skin); + return -1; } diff --git a/src/game/client/components/skins.h b/src/game/client/components/skins.h index c9c70370d..cf9ff7db7 100644 --- a/src/game/client/components/skins.h +++ b/src/game/client/components/skins.h @@ -5,6 +5,7 @@ #include #include #include +#include #include class CSkins : public CComponent @@ -25,6 +26,12 @@ public: bool operator==(const char *pOther) { return !str_comp(m_aName, pOther); } }; + struct CDownloadSkin : public CSkin + { + std::shared_ptr m_pTask; + char m_aPath[MAX_PATH_LENGTH]; + }; + void OnInit(); int Num(); @@ -33,8 +40,10 @@ public: private: sorted_array m_aSkins; + sorted_array m_aDownloadSkins; char m_EventSkinPrefix[100]; + int LoadSkin(const char *pName, const char *pPath, int DirType); int FindImpl(const char *pName); static int SkinScan(const char *pName, int IsDir, int DirType, void *pUser); }; diff --git a/src/game/variables.h b/src/game/variables.h index 4085d7453..d1bf62dd7 100644 --- a/src/game/variables.h +++ b/src/game/variables.h @@ -78,13 +78,15 @@ MACRO_CONFIG_INT(ClShowWelcome, cl_show_welcome, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG MACRO_CONFIG_INT(ClMotdTime, cl_motd_time, 10, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SAVE, "How long to show the server message of the day") // http map download -MACRO_CONFIG_STR(ClMapDownloadUrl, cl_map_download_url, 100, "https://maps2.ddnet.tw", CFGFLAG_CLIENT|CFGFLAG_SAVE, "URL to use to download maps (can start with http:// or https://)") +MACRO_CONFIG_STR(ClMapDownloadUrl, cl_map_download_url, 100, "https://maps2.ddnet.tw", CFGFLAG_CLIENT|CFGFLAG_SAVE, "URL used to download maps (can start with http:// or https://)") MACRO_CONFIG_INT(ClMapDownloadConnectTimeoutMs, cl_map_download_connect_timeout_ms, 2000, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: timeout for the connect phase in milliseconds (0 to disable)") MACRO_CONFIG_INT(ClMapDownloadLowSpeedLimit, cl_map_download_low_speed_limit, 500, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit in bytes per second (0 to disable)") MACRO_CONFIG_INT(ClMapDownloadLowSpeedTime, cl_map_download_low_speed_time, 5, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit time period (0 to disable)") MACRO_CONFIG_STR(ClLanguagefile, cl_languagefile, 255, "", CFGFLAG_CLIENT|CFGFLAG_SAVE, "What language file to use") +MACRO_CONFIG_STR(ClSkinDownloadUrl, cl_skin_download_url, 100, "https://skins.ddnet.tw/skin/", CFGFLAG_CLIENT|CFGFLAG_SAVE, "URL used to download skins") MACRO_CONFIG_INT(ClVanillaSkinsOnly, cl_vanilla_skins_only, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Only show skins available in Vanilla Teeworlds") +MACRO_CONFIG_INT(ClDownloadSkins, cl_download_skins, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Download skins from cl_skin_download_url on-the-fly") MACRO_CONFIG_INT(ClAutoStatboardScreenshot, cl_auto_statboard_screenshot, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Automatically take game over statboard screenshot") MACRO_CONFIG_INT(ClAutoStatboardScreenshotMax, cl_auto_statboard_screenshot_max, 10, 0, 1000, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Maximum number of automatically created statboard screenshots (0 = no limit)") From f42a5a0431b16cfe3ed7f3f8158606e8fd36d0b1 Mon Sep 17 00:00:00 2001 From: def Date: Tue, 15 Sep 2020 12:53:47 +0200 Subject: [PATCH 2/3] Fix clang-format --- src/game/client/components/skins.cpp | 2 +- src/game/client/components/skins.h | 2 +- src/game/variables.h | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/game/client/components/skins.cpp b/src/game/client/components/skins.cpp index af9a8579d..da9ee08de 100644 --- a/src/game/client/components/skins.cpp +++ b/src/game/client/components/skins.cpp @@ -8,8 +8,8 @@ #include #include -#include #include +#include #include "skins.h" diff --git a/src/game/client/components/skins.h b/src/game/client/components/skins.h index cf9ff7db7..9d95b21f7 100644 --- a/src/game/client/components/skins.h +++ b/src/game/client/components/skins.h @@ -2,9 +2,9 @@ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #ifndef GAME_CLIENT_COMPONENTS_SKINS_H #define GAME_CLIENT_COMPONENTS_SKINS_H -#include #include #include +#include #include #include diff --git a/src/game/variables.h b/src/game/variables.h index d1bf62dd7..163909bcb 100644 --- a/src/game/variables.h +++ b/src/game/variables.h @@ -78,17 +78,17 @@ MACRO_CONFIG_INT(ClShowWelcome, cl_show_welcome, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG MACRO_CONFIG_INT(ClMotdTime, cl_motd_time, 10, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SAVE, "How long to show the server message of the day") // http map download -MACRO_CONFIG_STR(ClMapDownloadUrl, cl_map_download_url, 100, "https://maps2.ddnet.tw", CFGFLAG_CLIENT|CFGFLAG_SAVE, "URL used to download maps (can start with http:// or https://)") -MACRO_CONFIG_INT(ClMapDownloadConnectTimeoutMs, cl_map_download_connect_timeout_ms, 2000, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: timeout for the connect phase in milliseconds (0 to disable)") -MACRO_CONFIG_INT(ClMapDownloadLowSpeedLimit, cl_map_download_low_speed_limit, 500, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit in bytes per second (0 to disable)") -MACRO_CONFIG_INT(ClMapDownloadLowSpeedTime, cl_map_download_low_speed_time, 5, 0, 100000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit time period (0 to disable)") +MACRO_CONFIG_STR(ClMapDownloadUrl, cl_map_download_url, 100, "https://maps2.ddnet.tw", CFGFLAG_CLIENT | CFGFLAG_SAVE, "URL used to download maps (can start with http:// or https://)") +MACRO_CONFIG_INT(ClMapDownloadConnectTimeoutMs, cl_map_download_connect_timeout_ms, 2000, 0, 100000, CFGFLAG_CLIENT | CFGFLAG_SAVE, "HTTP map downloads: timeout for the connect phase in milliseconds (0 to disable)") +MACRO_CONFIG_INT(ClMapDownloadLowSpeedLimit, cl_map_download_low_speed_limit, 500, 0, 100000, CFGFLAG_CLIENT | CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit in bytes per second (0 to disable)") +MACRO_CONFIG_INT(ClMapDownloadLowSpeedTime, cl_map_download_low_speed_time, 5, 0, 100000, CFGFLAG_CLIENT | CFGFLAG_SAVE, "HTTP map downloads: Set low speed limit time period (0 to disable)") -MACRO_CONFIG_STR(ClLanguagefile, cl_languagefile, 255, "", CFGFLAG_CLIENT|CFGFLAG_SAVE, "What language file to use") -MACRO_CONFIG_STR(ClSkinDownloadUrl, cl_skin_download_url, 100, "https://skins.ddnet.tw/skin/", CFGFLAG_CLIENT|CFGFLAG_SAVE, "URL used to download skins") -MACRO_CONFIG_INT(ClVanillaSkinsOnly, cl_vanilla_skins_only, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Only show skins available in Vanilla Teeworlds") -MACRO_CONFIG_INT(ClDownloadSkins, cl_download_skins, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Download skins from cl_skin_download_url on-the-fly") -MACRO_CONFIG_INT(ClAutoStatboardScreenshot, cl_auto_statboard_screenshot, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Automatically take game over statboard screenshot") -MACRO_CONFIG_INT(ClAutoStatboardScreenshotMax, cl_auto_statboard_screenshot_max, 10, 0, 1000, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Maximum number of automatically created statboard screenshots (0 = no limit)") +MACRO_CONFIG_STR(ClLanguagefile, cl_languagefile, 255, "", CFGFLAG_CLIENT | CFGFLAG_SAVE, "What language file to use") +MACRO_CONFIG_STR(ClSkinDownloadUrl, cl_skin_download_url, 100, "https://skins.ddnet.tw/skin/", CFGFLAG_CLIENT | CFGFLAG_SAVE, "URL used to download skins") +MACRO_CONFIG_INT(ClVanillaSkinsOnly, cl_vanilla_skins_only, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Only show skins available in Vanilla Teeworlds") +MACRO_CONFIG_INT(ClDownloadSkins, cl_download_skins, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Download skins from cl_skin_download_url on-the-fly") +MACRO_CONFIG_INT(ClAutoStatboardScreenshot, cl_auto_statboard_screenshot, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Automatically take game over statboard screenshot") +MACRO_CONFIG_INT(ClAutoStatboardScreenshotMax, cl_auto_statboard_screenshot_max, 10, 0, 1000, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Maximum number of automatically created statboard screenshots (0 = no limit)") MACRO_CONFIG_INT(ClDefaultZoom, cl_default_zoom, 10, 0, 20, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Default zoom level (10 default, min 0, max 20)") MACRO_CONFIG_INT(ClSmoothZoomTime, cl_smooth_zoom_time, 250, 0, 5000, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Time of smooth zoom animation in ms (0 for off)") From 7b2c71435d530515f21eabcc67376ef9472d7ff2 Mon Sep 17 00:00:00 2001 From: def Date: Tue, 15 Sep 2020 19:05:39 +0200 Subject: [PATCH 3/3] Remove non-free skins by Lappi (fixes #2547) --- CMakeLists.txt | 10 ---------- data/skins/bunny.png | Bin 7067 -> 0 bytes data/skins/caesar.png | Bin 9501 -> 0 bytes data/skins/emo.png | Bin 5650 -> 0 bytes data/skins/hedgehog.png | Bin 7061 -> 0 bytes data/skins/license.txt | 4 ---- data/skins/lightbulb.png | Bin 5360 -> 0 bytes data/skins/napoleon.png | Bin 7355 -> 0 bytes data/skins/nosey.png | Bin 4766 -> 0 bytes data/skins/roman.png | Bin 7172 -> 0 bytes data/skins/savage.png | Bin 5665 -> 0 bytes data/skins/tank.png | Bin 6871 -> 0 bytes 12 files changed, 14 deletions(-) delete mode 100644 data/skins/bunny.png delete mode 100644 data/skins/caesar.png delete mode 100644 data/skins/emo.png delete mode 100644 data/skins/hedgehog.png delete mode 100644 data/skins/lightbulb.png delete mode 100644 data/skins/napoleon.png delete mode 100644 data/skins/nosey.png delete mode 100644 data/skins/roman.png delete mode 100644 data/skins/savage.png delete mode 100644 data/skins/tank.png diff --git a/CMakeLists.txt b/CMakeLists.txt index f8f9b4cf1..ab92386a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1182,8 +1182,6 @@ set(EXPECTED_DATA skins/bluestripe.png skins/bomb.png skins/brownbear.png - skins/bunny.png - skins/caesar.png skins/cammo.png skins/cammostripes.png skins/chinese_by_whis.png @@ -1207,7 +1205,6 @@ set(EXPECTED_DATA skins/demonlimekitty.png skins/dino.png skins/dragon.png - skins/emo.png skins/evil.png skins/evilwolfe.png skins/ghost.png @@ -1218,7 +1215,6 @@ set(EXPECTED_DATA skins/greyfox_2.png skins/hammie-chew.png skins/hammie-whis.png - skins/hedgehog.png skins/jeet.png skins/kintaro_2.png skins/kitty_bluestripe.png @@ -1237,7 +1233,6 @@ set(EXPECTED_DATA skins/kitty_warpaint.png skins/kitty_x_ninja.png skins/license.txt - skins/lightbulb.png skins/limekitty.png skins/mermydon-coala.png skins/mermydon.png @@ -1245,9 +1240,7 @@ set(EXPECTED_DATA skins/musmann.png skins/nanami.png skins/nanas.png - skins/napoleon.png skins/nersif.png - skins/nosey.png skins/oldman.png skins/oldschool.png skins/penguin.png @@ -1255,7 +1248,6 @@ set(EXPECTED_DATA skins/random.png skins/redbopp.png skins/redstripe.png - skins/roman.png skins/saddo.png skins/santa_bluekitty.png skins/santa_bluestripe.png @@ -1273,8 +1265,6 @@ set(EXPECTED_DATA skins/santa_twinbop.png skins/santa_twintri.png skins/santa_warpaint.png - skins/savage.png - skins/tank.png skins/teerasta.png skins/toptri.png skins/twinbop.png diff --git a/data/skins/bunny.png b/data/skins/bunny.png deleted file mode 100644 index e20614fec90e8b7656a251334e6ed89b8ea30f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7067 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 diff --git a/data/skins/caesar.png b/data/skins/caesar.png deleted file mode 100644 index 054a673e53f1a4294c05e0ab9b88ae58826a0c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9501 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 diff --git a/data/skins/license.txt b/data/skins/license.txt index 461ba2fef..9f83e7df5 100644 --- a/data/skins/license.txt +++ b/data/skins/license.txt @@ -31,10 +31,6 @@ kitty_warpaint, kitty_x_ninja: Copyright Ravie CC0 license -lightbulb, tank, emo, bunny, hedgehog, napoleon, roman, caesar, nosey, savage: -Copyright Lappi -CC-BY-NC-SA license - demonlimekitty, nanas, nersif: Copyright Miper CC-BY-SA license diff --git a/data/skins/lightbulb.png b/data/skins/lightbulb.png deleted file mode 100644 index 98e15b7fd06d9f921e7865e3f1c64dad2a70cceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5360 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 diff --git a/data/skins/roman.png b/data/skins/roman.png deleted file mode 100644 index daa59ffde05561a351bcf0e7e56371833c5ca984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7172 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 diff --git a/data/skins/savage.png b/data/skins/savage.png deleted file mode 100644 index 14d29d25c0f724248661f6a5bf2efd79194377e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5665 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 Hu0mjfrRO+A diff --git a/data/skins/tank.png b/data/skins/tank.png deleted file mode 100644 index f2d18859c4ab646e78f811dc18ceb99c61397664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6871 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 RrLF(~002ovPDHLkV1gW!V^#nF