From ea4588f442b885809639d79ff6965b2020958bf7 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 21 Aug 2019 20:52:36 +0200 Subject: [PATCH 01/48] (WIP) achievements support build is also WIP --- build_curl.sh | 45 ++++ curl/CMakeLists.txt | 79 +++++++ dll/steam_client.cpp | 3 +- dll/steam_user_stats.h | 180 +++++++++++++-- generate_game_infos/generate_game_infos.cpp | 242 ++++++++++++++++++++ 5 files changed, 535 insertions(+), 14 deletions(-) create mode 100644 build_curl.sh create mode 100644 curl/CMakeLists.txt create mode 100644 generate_game_infos/generate_game_infos.cpp diff --git a/build_curl.sh b/build_curl.sh new file mode 100644 index 0000000..6d40296 --- /dev/null +++ b/build_curl.sh @@ -0,0 +1,45 @@ +#! /bin/bash + +# Build type (Debug or Release) +BUILD_TYPE="$1" +# where to build protobuf, must be win32 or win64 +OUT_DIR="$2" + +[ "$OUT_DIR" != "win32" -a "$OUT_DIR" != "win64" -a "$OUT_DIR" != "x86" -a "$OUT_DIR" != "x64" ] && echo "The output dir must be 'Win32', 'Win64', 'x86' or 'x64'" && exit 1 +[ "$BUILD_TYPE" != "Debug" -a "$BUILD_TYPE" != "Release" ] && echo "The build type must be 'Debug' or 'Release'" && exit 1 + +# apt install libssl1.0-dev libssl1.0-dev:i386 + +# My variable to decide if we build x86 or x64 in CMakeLists.txt +if [ "$OUT_DIR" == "win32" -o "$OUT_DIR" == "x86" ]; then + custom_arch_var="-DX86=ON" +else + custom_arch_var="-DX64=ON" +fi + +build_type="-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" + +build_http="-DHTTP_ONLY=ON" +build_exe="-DBUILD_CURL_EXE=OFF" +build_shared="-DBUILD_SHARED_LIBS=OFF" +build_testing="-DBUILD_TESTING=OFF" + +args=() +args+=($build_http) +args+=($build_exe) +args+=($build_shared) +args+=($build_testing) +args+=($build_type) +args+=($custom_arch_var) + +# EXTRA_CMAKE_ENV is set by setup_clang_env.sh to build for windows. +# You must run setup_clang_env.sh before calling this script if you build for windows. + +rm -rf "curl/$OUT_DIR" && +mkdir "curl/$OUT_DIR" && +cd "curl/$OUT_DIR" && +echo "cmake -G \"Unix Makefiles\" $EXTRA_CMAKE_ENV \"${args[@]}\" .." && +cmake -G "Unix Makefiles" $EXTRA_CMAKE_ENV "${args[@]}" .. && +make -j${JOBS-2} || exit 1 + +exit 0 diff --git a/curl/CMakeLists.txt b/curl/CMakeLists.txt new file mode 100644 index 0000000..7894dc9 --- /dev/null +++ b/curl/CMakeLists.txt @@ -0,0 +1,79 @@ +#CMAKE_TOOLCHAIN_FILE + +project(goldberg_emulator_protobuf) +cmake_minimum_required(VERSION 3.0) + +if(WIN32) + # Detect arch on Windows + if( ${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(X64 ON) + else() + set(X86 ON) + endif() + + if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) + else() + add_compile_options(-std=c++11) + endif() + + set(win_libs Iphlpapi ws2_32) + if(X64) + set(STEAM_NAME steam_api64) + elseif(X86) + set(STEAM_NAME steam_api) + else() + message(FATAL_ERROR "Arch unknown") + endif() +elseif(APPLE) + message(FATAL_ERROR "No CMake for Apple") +else() + if(X64) + set(CMAKE_C_FLAGS "-m64") + set(CMAKE_CXX_FLAGS "-m64") + elseif(X86) + set(CMAKE_C_FLAGS "-m32") + set(CMAKE_CXX_FLAGS "-m32") + else() + message(FATAL_ERROR "Arch unknown") + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fPIC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fPIC") + +endif() + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(CURL_VERSION "7.65.3") +set(CURL_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(CURL_RELEASE_URL "https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.xz") +set(CURL_SRC curl-src) + +if( NOT EXISTS ${CURL_DIR}/${CURL_SRC} ) + file( + DOWNLOAD ${CURL_RELEASE_URL} ${CURL_DIR}/curl.tar.xz + SHOW_PROGRESS + EXPECTED_HASH MD5=7bd5b2ebfd3f591034eb8b55314d8c02 + ) + + if( NOT EXISTS ${CURL_DIR}/curl.tar.xz ) + message(FATAL_ERROR "Download of curl failed") + endif() + + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar -xf curl.tar.xz + WORKING_DIRECTORY ${CURL_DIR} + ) + + file(REMOVE ${CURL_DIR}/curl.tar.xz) + file(RENAME ${CURL_DIR}/curl-${CURL_VERSION} "${CURL_SRC}") +endif() + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +add_subdirectory(${CURL_DIR}/${CURL_SRC}) diff --git a/dll/steam_client.cpp b/dll/steam_client.cpp index a1a678b..ba33cf5 100644 --- a/dll/steam_client.cpp +++ b/dll/steam_client.cpp @@ -335,6 +335,7 @@ Steam_Client::Steam_Client() } } + std::string achievements_db_file_path = (Local_Storage::get_game_settings_path() + "achievements.json"); std::string items_db_file_path = (Local_Storage::get_game_settings_path() + "items.json"); network = new Networking(settings_server->get_local_steam_id(), appid, port, &custom_broadcasts); @@ -352,7 +353,7 @@ Steam_Client::Steam_Client() steam_utils = new Steam_Utils(settings_client, callback_results_client); steam_matchmaking = new Steam_Matchmaking(settings_client, network, callback_results_client, callbacks_client, run_every_runcb); steam_matchmaking_servers = new Steam_Matchmaking_Servers(settings_client, network); - steam_user_stats = new Steam_User_Stats(settings_client, local_storage, callback_results_client, callbacks_client); + steam_user_stats = new Steam_User_Stats(settings_client, local_storage, callback_results_client, callbacks_client, achievements_db_file_path); steam_apps = new Steam_Apps(settings_client, callback_results_client); steam_networking = new Steam_Networking(settings_client, network, callbacks_client, run_every_runcb); steam_remote_storage = new Steam_Remote_Storage(settings_client, local_storage, callback_results_client); diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index d889579..57bb57a 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -17,13 +17,16 @@ #include "base.h" +#include +#include +#include "../json/json.hpp" + struct Steam_Leaderboard { std::string name; ELeaderboardSortMethod sort_method; ELeaderboardDisplayType display_type; }; - class Steam_User_Stats : public ISteamUserStats003, public ISteamUserStats004, @@ -41,6 +44,9 @@ public ISteamUserStats class SteamCallBacks *callbacks; std::vector leaderboards; + std::string db_file_path; + nlohmann::json achievements; + unsigned int find_leaderboard(std::string name) { unsigned index = 1; @@ -52,13 +58,41 @@ unsigned int find_leaderboard(std::string name) return 0; } -public: -Steam_User_Stats(Settings *settings, Local_Storage *local_storage, class SteamCallResults *callback_results, class SteamCallBacks *callbacks) +void load_achievements() { - this->local_storage = local_storage; - this->settings = settings; - this->callback_results = callback_results; - this->callbacks = callbacks; + std::ifstream achs_file(db_file_path); + + if (achs_file) + { + achs_file.seekg(0, std::ios::end); + size_t size = achs_file.tellg(); + std::string buffer(size, '\0'); + achs_file.seekg(0); + // Read it entirely, if the .json file gets too big, + // I should look into this and split reads into smaller parts. + achs_file.read(&buffer[0], size); + achs_file.close(); + + try + { + achievements = nlohmann::json::parse(buffer); + } + catch (std::exception &e) + { + PRINT_DEBUG("(Achievements): Error while parsing json: %s\n", e.what()); + } + } +} + +public: +Steam_User_Stats(Settings *settings, Local_Storage *local_storage, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, std::string const&achievements_db_file_path): + settings(settings), + local_storage(local_storage), + callback_results(callback_results), + callbacks(callbacks), + db_file_path(achievements_db_file_path) +{ + load_achievements(); } // Ask the server to send down this user's data and achievements for this game @@ -155,19 +189,65 @@ bool GetAchievement( const char *pchName, bool *pbAchieved ) { //TODO: these achievement functions need to load a list of achievements from somewhere, return false so that kf2 doesn't loop endlessly PRINT_DEBUG("GetAchievement %s\n", pchName); - *pbAchieved = false; + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName]( nlohmann::json &item ) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + *pbAchieved = it.value()["earned"]; + return true; + } + } + catch (...) + { + + } + return false; } bool SetAchievement( const char *pchName ) { PRINT_DEBUG("SetAchievement %s\n", pchName); + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + it.value()["earned"] = 1; + return true; + } + } + catch (...) + { + + } + return false; } bool ClearAchievement( const char *pchName ) { PRINT_DEBUG("ClearAchievement %s\n", pchName); + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + it.value()["earned"] = 0; + return true; + } + } + catch (...) + { + } + return false; } @@ -178,7 +258,26 @@ bool ClearAchievement( const char *pchName ) bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) { PRINT_DEBUG("GetAchievementAndUnlockTime\n"); + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + *pbAchieved = it.value()["earned"].get(); + *punUnlockTime = std::time(NULL); + //*punUnlockTime = it.value()["time_earned"].get(); + return true; + } + } + catch (...) + { + + } + *pbAchieved = false; + *punUnlockTime = 0; return true; } @@ -195,6 +294,12 @@ bool StoreStats() PRINT_DEBUG("StoreStats\n"); std::lock_guard lock(global_mutex); + std::ofstream achiev_file(db_file_path, std::ios::trunc | std::ios::out); + if (achiev_file) + { + achiev_file << std::setw(2) << achievements; + } + UserStatsStored_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); data.m_eResult = k_EResultOK; @@ -222,18 +327,56 @@ int GetAchievementIcon( const char *pchName ) const char * GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) { PRINT_DEBUG("GetAchievementDisplayAttribute %s %s\n", pchName, pchKey); - return ""; //TODO if (strcmp (pchKey, "name") == 0) { - return "Achievement Name"; + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + return it.value()["displayName"].get().c_str(); + } + } + catch (...) + { + + } } if (strcmp (pchKey, "desc") == 0) { - return "Achievement Description"; + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + return it.value()["description"].get().c_str(); + } + } + catch (...) + { + + } } if (strcmp (pchKey, "hidden") == 0) { - return "0"; + try + { + auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + if (it != achievements.end()) + { + return (it.value()["hidden"].get() ? "1" : "0"); + } + } + catch (...) + { + + } } return ""; @@ -253,13 +396,21 @@ bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint uint32 GetNumAchievements() { PRINT_DEBUG("GetNumAchievements\n"); - return 0; + return achievements.size(); } // Get achievement name iAchievement in [0,GetNumAchievements) const char * GetAchievementName( uint32 iAchievement ) { PRINT_DEBUG("GetAchievementName\n"); + try + { + return static_cast(achievements[iAchievement]["name"]).c_str(); + } + catch (...) + { + + } return ""; } @@ -276,6 +427,9 @@ SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) PRINT_DEBUG("Steam_User_Stats::RequestUserStats %llu\n", steamIDUser.ConvertToUint64()); std::lock_guard lock(global_mutex); + // Enable this to allow hot reload achievements status + //load_achievements(); + UserStatsReceived_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); data.m_eResult = k_EResultOK; diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp new file mode 100644 index 0000000..509f42c --- /dev/null +++ b/generate_game_infos/generate_game_infos.cpp @@ -0,0 +1,242 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +class CurlGlobal +{ + bool _init; + + CurlGlobal() :_init(false) {} + + ~CurlGlobal() { cleanup(); } + +public: + static CurlGlobal& Inst() + { + static CurlGlobal _this; + return _this; + } + + CURLcode init(long flags = CURL_GLOBAL_DEFAULT) { return curl_global_init(flags); } + void cleanup() + { + if (_init) + { + curl_global_cleanup(); + _init = false; + } + } +}; + +class CurlEasy +{ + CURL* _me; + bool _init; + std::string _buffer; + + static int writer(char* data, size_t size, size_t nmemb, + CurlEasy *_this) + { + if (_this == nullptr) + return 0; + + _this->_buffer.append(data, size * nmemb); + + return size * nmemb; + } + +public: + CurlEasy() :_me(nullptr), _init(false) {} + ~CurlEasy() { cleanup(); } + + bool init() + { + _init = (_me = curl_easy_init()) != nullptr; + if (_init) + { + if (curl_easy_setopt(_me, CURLOPT_WRITEFUNCTION, writer) != CURLE_OK) + { + cleanup(); + return false; + } + + if (curl_easy_setopt(_me, CURLOPT_WRITEDATA, this) != CURLE_OK) + { + cleanup(); + return false; + } + } + return _init; + } + + void cleanup() + { + if (_init) + { + curl_easy_cleanup(_me); + } + } + + CURLcode set_url(const std::string& url) + { + return curl_easy_setopt(_me, CURLOPT_URL, url.c_str()); + } + + CURLcode skip_verifypeer(bool skip = true) + { + return curl_easy_setopt(_me, CURLOPT_SSL_VERIFYPEER, skip ? 0L : 1L); + } + + CURLcode skip_verifhost(bool skip = true) + { + return curl_easy_setopt(_me, CURLOPT_SSL_VERIFYHOST, skip ? 0L : 1L); + } + + CURLcode connect_only(bool connect = true) + { + return curl_easy_setopt(_me, CURLOPT_CONNECT_ONLY, connect ? 1L : 0L); + } + + CURLcode perform() + { + _buffer.clear(); + return curl_easy_perform(_me); + } + + CURLcode recv(void *buffer, size_t buflen, size_t* read_len) + { + return curl_easy_recv(_me, buffer, buflen, read_len); + } + + CURLcode get_html_code(long &code) + { + return curl_easy_getinfo(_me, CURLINFO_RESPONSE_CODE, &code); + } + + std::string const& get_answer() const { return _buffer; } +}; + +// Get all steam appid with their name: http://api.steampowered.com/ISteamApps/GetAppList/v2/ +// Steam storefront webapi: https://wiki.teamfortress.com/wiki/User:RJackson/StorefrontAPI +// http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key=&appid= +/* +{ + "game" : { + "gameName" : "", + "availableGameStats" : { + "achievements" : { + ("" : { + "name" : "achievement_name", + "displayName" : "achievement name on screen", + "hidden" : (0|1), + ["description" : "",] + "icon" : "", + "icongray" : "" + }, + ...) + } + } + } +} +*/ +// Get appid infos: http://store.steampowered.com/api/appdetails/?appids=218620 +/* +"appid" : { + "success" : (true|false), + (success == true "data" : { + ... + "name" : "", + "steam_appid" : , + (OPT "dlc" : [, ]), + "header_image" : "" <-- Use this in the overlay ? + (OPT "achievements" : { + "total" : + }), + "background" : "" <-- Use this as the overlay background ? + (OPT "packages" : [, ]) + }) +} +*/ + +#ifdef max +#undef max +#endif + +int main() +{ + CurlGlobal& cglobal = CurlGlobal::Inst(); + cglobal.init(); + + CurlEasy easy; + if (easy.init()) + { + std::string url; + std::string steam_apikey; + std::string app_id; + + std::cout << "Enter the game appid: "; + std::cin >> app_id; + std::cout << "Enter your webapi key: "; + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cin >> steam_apikey; + + url = "http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; + url += steam_apikey; + url += "&appid="; + url += app_id; + easy.set_url(url); + easy.perform(); + try + { + std::ofstream ach_file("achievements.json", std::ios::trunc | std::ios::out); + nlohmann::json json = nlohmann::json::parse(easy.get_answer()); + nlohmann::json output_json = nlohmann::json::array(); + + bool first = true; + int i = 0; + for (auto& item : json["game"]["availableGameStats"]["achievements"].items()) + { + output_json[i]["name"] = item.value()["name"]; + output_json[i]["displayName"] = item.value()["displayName"]; + output_json[i]["hidden"] = item.value()["hidden"]; + try + { + output_json[i]["description"] = item.value()["description"]; + } + catch (...) + { + output_json[i]["description"] = ""; + } + output_json[i]["icon"] = item.value()["icon"]; + output_json[i]["icongray"] = item.value()["icongray"]; + output_json[i]["time_earned"] = 0; + output_json[i]["earned"] = 0; + ++i; + } + ach_file << std::setw(2) << output_json; + } + catch (std::exception& e) + { + std::cerr << "Failed to get infos: "; + long code; + if (easy.get_html_code(code) == CURLE_OK && code == 403) + { + std::cerr << "Error in webapi key"; + } + else + { + std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your achivements.json"; + } + std::cerr << std::endl; + } + } +} + \ No newline at end of file From b17e3b7be39dcf5cc61186babe7de0d8599735cf Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 21 Aug 2019 21:35:41 +0200 Subject: [PATCH 02/48] Added win static build for curl --- build_curl.sh | 4 ++++ build_env_x64.bat | 0 build_env_x86.bat | 0 build_linux.sh | 0 build_set_protobuf_directories.bat | 0 build_steamos.sh | 0 build_win_debug_experimental.bat | 0 build_win_find_interfaces.bat | 0 build_win_lobby_connect.bat | 0 build_win_release.bat | 0 build_win_release_experimental.bat | 0 curl/CMakeLists.txt | 3 --- 12 files changed, 4 insertions(+), 3 deletions(-) mode change 100644 => 100755 build_curl.sh mode change 100644 => 100755 build_env_x64.bat mode change 100644 => 100755 build_env_x86.bat mode change 100644 => 100755 build_linux.sh mode change 100644 => 100755 build_set_protobuf_directories.bat mode change 100644 => 100755 build_steamos.sh mode change 100644 => 100755 build_win_debug_experimental.bat mode change 100644 => 100755 build_win_find_interfaces.bat mode change 100644 => 100755 build_win_lobby_connect.bat mode change 100644 => 100755 build_win_release.bat mode change 100644 => 100755 build_win_release_experimental.bat diff --git a/build_curl.sh b/build_curl.sh old mode 100644 new mode 100755 index 6d40296..4fb9d47 --- a/build_curl.sh +++ b/build_curl.sh @@ -32,6 +32,10 @@ args+=($build_testing) args+=($build_type) args+=($custom_arch_var) +if [ ! -z "$EXTRA_CMAKE_ENV" ]; then + args+=("-DCURL_STATIC_CRT=ON") +fi + # EXTRA_CMAKE_ENV is set by setup_clang_env.sh to build for windows. # You must run setup_clang_env.sh before calling this script if you build for windows. diff --git a/build_env_x64.bat b/build_env_x64.bat old mode 100644 new mode 100755 diff --git a/build_env_x86.bat b/build_env_x86.bat old mode 100644 new mode 100755 diff --git a/build_linux.sh b/build_linux.sh old mode 100644 new mode 100755 diff --git a/build_set_protobuf_directories.bat b/build_set_protobuf_directories.bat old mode 100644 new mode 100755 diff --git a/build_steamos.sh b/build_steamos.sh old mode 100644 new mode 100755 diff --git a/build_win_debug_experimental.bat b/build_win_debug_experimental.bat old mode 100644 new mode 100755 diff --git a/build_win_find_interfaces.bat b/build_win_find_interfaces.bat old mode 100644 new mode 100755 diff --git a/build_win_lobby_connect.bat b/build_win_lobby_connect.bat old mode 100644 new mode 100755 diff --git a/build_win_release.bat b/build_win_release.bat old mode 100644 new mode 100755 diff --git a/build_win_release_experimental.bat b/build_win_release_experimental.bat old mode 100644 new mode 100755 diff --git a/curl/CMakeLists.txt b/curl/CMakeLists.txt index 7894dc9..cfaca4f 100644 --- a/curl/CMakeLists.txt +++ b/curl/CMakeLists.txt @@ -38,9 +38,6 @@ else() else() message(FATAL_ERROR "Arch unknown") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fPIC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fPIC") - endif() set(CMAKE_CXX_STANDARD 11) From 13acbb3d949715d56082e7740bc5849648737b6d Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 17:33:39 +0200 Subject: [PATCH 03/48] Reworked generate_game_infos. --- generate_game_infos/generate_game_infos.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 509f42c..921ac06 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -206,7 +206,7 @@ int main() { output_json[i]["name"] = item.value()["name"]; output_json[i]["displayName"] = item.value()["displayName"]; - output_json[i]["hidden"] = item.value()["hidden"]; + output_json[i]["hidden"] = std::to_string(item.value()["hidden"].get()); try { output_json[i]["description"] = item.value()["description"]; @@ -217,8 +217,6 @@ int main() } output_json[i]["icon"] = item.value()["icon"]; output_json[i]["icongray"] = item.value()["icongray"]; - output_json[i]["time_earned"] = 0; - output_json[i]["earned"] = 0; ++i; } ach_file << std::setw(2) << output_json; From 46f2199cd209126ccf92f419acb9aa23d816eb3a Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 17:34:06 +0200 Subject: [PATCH 04/48] Added examples --- Readme_release.txt | 9 +- .../232090/achievements.json | 2098 +++++++++++++ .../achievements.EXAMPLE.json | 2622 +++++++++++++++++ 3 files changed, 4727 insertions(+), 2 deletions(-) create mode 100644 files_example/inventory.EXAMPLE/232090/achievements.json create mode 100644 files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json diff --git a/Readme_release.txt b/Readme_release.txt index 0685e60..ae495b8 100644 --- a/Readme_release.txt +++ b/Readme_release.txt @@ -65,11 +65,16 @@ If you want to set custom ips (or domains) which the emulator will send broadcas If the custom ips/domains are specific for one game only you can put the custom_broadcasts.txt in the steam_settings\ folder. An example is provided in steam_settings.EXAMPLE\custom_broadcasts.EXAMPLE.txt -Items or Inventory: -Create a folder named steam_settings right beside steam_api.dll if there isn't one already. In that folder, create a file named items.json which will contain every item you want to have in your game. +Achievements, Items or Inventory: +Create a folder named steam_settings right beside steam_api.dll if there isn't one already. In that folder, create a file named items.json and/or achievements.json which will contain every item/achievement you want to have in your game. An example can be found in steam_settings.EXAMPLE that works with Killing Floor 2. The items.json syntax is simple, you SHOULD validate your .json file before trying to run your game or you won't have any item in your inventory. Just look for "online json validator" on your web brower to valide your file. You can use https://steamdb.info/ to list items and attributes they have and put them into your .json. +Then you have to add item/achievement to you inventory. To do so, go to %appdata%\Goldberg SteamEmu Saves\inventory\ on windows or [$XDG_DATA_HOME|~/.local/share]/Goldberg SteamEmu Saves on linux. +In that folder, create a file items.json and/or achievements.json and fill it like in the example inventory.EXAMPLE. +items.json syntax is like so: { "item_id": , "other_item_id": }. +achievements.json syntax is like so: { "achievement_name": { "earned" : [true|false], "earned_time": }, "second_name": { "earned" : [true|false], "earned_time": } } +"earned_time" can be 0, meaning the achievement was earned before before trace the earn time. (See https://partner.steamgames.com/doc/api/ISteamUserStats#GetAchievementAndUnlockTime) Keep in mind that some item are not valid to have in your inventory. For example, in PayDay2 all items below item_id 50000 will make your game crash. Leaderboards: diff --git a/files_example/inventory.EXAMPLE/232090/achievements.json b/files_example/inventory.EXAMPLE/232090/achievements.json new file mode 100644 index 0000000..7a45fb5 --- /dev/null +++ b/files_example/inventory.EXAMPLE/232090/achievements.json @@ -0,0 +1,2098 @@ +[ + { + "description": "Complete Burning Paris on Survival Normal difficulty", + "displayName": "Tower Tussle", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/602f536d30b0c235518e7a1e44187d441eaf63d6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_0" + }, + { + "description": "Complete Burning Paris on Survival Hard difficulty", + "displayName": "Seine Skirmish", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/636fe6d6fabcabde48e874b7f4743632578b1c5d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_1" + }, + { + "description": "Beat Burning Paris on Suicidal", + "displayName": "Bastille Brawl", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c917888af91dfe611af82089437b2893779c8efc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_2" + }, + { + "description": "Beat Burning Paris on Hell on Earth", + "displayName": "Arc Action", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70b565ce3857b76c0a05369f06c8c049e16f7acb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_3" + }, + { + "description": "Beat Outpost on Normal", + "displayName": "You Can't Fight In Here, This Is The Control Room", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d47d3ba3fd18af18307316c45ef5928a2ef548ea.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_4" + }, + { + "description": "Beat Outpost on Hard", + "displayName": "This Is What Happens When You Meet A Zed In The Alps", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02ee9ce922c7ce7a64829cd532f1ba2643dd4bb1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_5" + }, + { + "description": "Beat Outpost on Suicidal", + "displayName": "The Shield Doors Must Be Closed", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/050dcb99026091b63eddda0cdc4d63fd722c1e1b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_6" + }, + { + "description": "Beat Outpost on Hell on Earth", + "displayName": "Fear Is For The Zeds, My Little Lord", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8431a972a1983e9caf674f6789a5c465805ebbc4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_7" + }, + { + "description": "Beat Biotics Lab on Normal", + "displayName": "Open For Testing", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a8d274c3d77ec81d2aab54af370f724d40f15bc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_8" + }, + { + "description": "Beat Biotics Lab on Hard", + "displayName": "Limited Contact", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cbcc021969245995ce09589ad53ab1a47f0fdff7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_9" + }, + { + "description": "Beat Biotics Lab on Suicidal", + "displayName": "Restricted Access", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/44268ccc9bac63ecbf60f39898d7dc2c17bd53ab.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_10" + }, + { + "description": "Beat Biotics Lab on Hell on Earth", + "displayName": "Controlled Environment", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70cb90730ab2705bb1e306819354651d56c38552.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_11" + }, + { + "description": "Beat Volter Manor on Normal", + "displayName": "Just Visiting", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/61fa8d36c9829af872c0ad5228c60d64069fce17.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_12" + }, + { + "description": "Beat Volter Manor on Hard", + "displayName": "Mind Your Manor", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e5b10441e0474095bbb81d5960f1af27c932084.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_13" + }, + { + "description": "Beat Volter Manor on Suicidal", + "displayName": "Settling In", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1683c9b2122f6ede072934269661f93e17ab984e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_14" + }, + { + "description": "Complete Volter Manor on Survival Hell On Earth difficulty", + "displayName": "Lord of the Manor", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c4b365273492452a071837a4255bd4d2dea73da.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_15" + }, + { + "description": "Collect all the items on Burning Paris", + "displayName": "Paris Plunder", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1438bcf38af2bfc2c847a1f668faf687df0b732.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_16" + }, + { + "description": "Collect all the items on Outpost", + "displayName": "Outpost Offerings", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59ffefa9465aaf04ffdbc9e705cf3164d28a91b0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_17" + }, + { + "description": "Collect all the items on Biotics Lab", + "displayName": "Biotics Bling", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da4820f31888fcefa4a634a584e12a96de211e88.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_18" + }, + { + "description": "Collect all the items on Volter Manor", + "displayName": "Manor Money", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/30c452781f10edb7b6b3abd3a038776eac66252d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_19" + }, + { + "description": "Complete Evacuation Point on Survival Normal difficulty", + "displayName": "The Suite Life", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c80431926b58a51f442831f69d109df8d3f64e1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_20" + }, + { + "description": "Complete Evacuation Point on Survival Hard difficulty", + "displayName": "Unsinkable II", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3b2a9c5c63aad9b5f0a43f93424e0f29c8c6deb9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_21" + }, + { + "description": "Complete Evacuation Point on Survival Suicidal difficulty", + "displayName": "Bow Movement", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4b22d317141e729496ec00a2f0f7bc6a8a3146f2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_22" + }, + { + "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", + "displayName": "Seas The Day", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b64bf6337277640aa8f455aed9d210168a7ce414.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_23" + }, + { + "description": "Complete Catacombs on Survival Normal difficulty", + "displayName": "A Light In The Darkness", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d2908401103ad32380e3cf3525dafc45a1691306.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_24" + }, + { + "description": "Complete Catacombs on Survival Hard difficulty", + "displayName": "This Is No Mine", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1b79ab127fcaba5394686438c187275672fa62e3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_25" + }, + { + "description": "Complete Catacombs on Survival Suicidal difficulty", + "displayName": "This Is A Tomb, Theirs", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72a312fa2a311a0d57ba43d5d0ff5324560bd954.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_26" + }, + { + "description": "Complete Catacombs on Survival Hell On Earth difficulty", + "displayName": "They Shall Not Pass", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4770075a39f42f45b4fa7cf8f4c2e9c377633a0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_27" + }, + { + "description": "Collect all the items on Evacuation Point", + "displayName": "Point Paper", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8946b527da24edc10caea62e796b1b43420f736b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_28" + }, + { + "description": "Collect all the items on Catacombs", + "displayName": "Catacombs Cash", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/daa37be2677f123e123bf39b945e996fb8758c45.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_29" + }, + { + "description": "Reach Level 5 Berserker", + "displayName": "Reach Level 5 Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ec445dee4f5bfcfca9e132ff680068e02c80983a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_30" + }, + { + "description": "Reach Level 10 Berserker", + "displayName": "Reach Level 10 Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b2a3fc6e4112e667d045e7a0e3d1d229afe9273.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_31" + }, + { + "description": "Reach Level 15 Berserker", + "displayName": "Reach Level 15 Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77fcacad378a8b65c6a1a40149a0bb41e571d252.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_32" + }, + { + "description": "Reach Level 20 Berserker", + "displayName": "Reach Level 20 Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/edcb6d683a8cdb6dd29bd6dfa6c4887aedf886ef.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_33" + }, + { + "description": "Reach Level 25 Berserker", + "displayName": "Reach Level 25 Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c0797935113227a8a7d60cdd76dfe1d272bd9c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_34" + }, + { + "description": "Reach Level 5 Medic", + "displayName": "Reach Level 5 Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f81cafc2e08f2373cf4a5a4feb8ebc9d42609f52.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_35" + }, + { + "description": "Reach Level 10 Medic", + "displayName": "Reach Level 10 Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfa49ae2939448e3eae52e6ef5d88a8d3e8cee5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_36" + }, + { + "description": "Reach Level 15 Medic", + "displayName": "Reach Level 15 Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9d05bece5bdc0c4a919629378aa8d0a838b01548.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_37" + }, + { + "description": "Reach Level 20 Medic", + "displayName": "Reach Level 20 Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8dcf9baa3420738cea516dfbb148d822b8cbc5c9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_38" + }, + { + "description": "Reach Level 25 Medic", + "displayName": "Reach Level 25 Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/908b077bf03a98b6731c68d78bfb4071bb112604.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_39" + }, + { + "description": "Reach Level 5 Commando", + "displayName": "Reach Level 5 Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59df9bded3394b3658929b5c0d6c4ef94d544bc3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_40" + }, + { + "description": "Reach Level 10 Commando", + "displayName": "Reach Level 10 Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0052ebf1633c386974865ee696606c9fa003ff10.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_41" + }, + { + "description": "Reach Level 15 Commando", + "displayName": "Reach Level 15 Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a211f3fb884248955eb1608987882372c44be91.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_42" + }, + { + "description": "Reach Level 20 Commando", + "displayName": "Reach Level 20 Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46e7a0273fe5e82f4cbf6a650e8e9b519651ed46.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_43" + }, + { + "description": "Reach Level 25 Commando", + "displayName": "Reach Level 25 Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ea698f23e293f79e28ad83c710820c86c30e8639.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_44" + }, + { + "description": "Reach Level 5 Support", + "displayName": "Reach Level 5 Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8405e32f8bd371eb86b2d2c969efaba94d1b0076.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_45" + }, + { + "description": "Reach Level 10 Support", + "displayName": "Reach Level 10 Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d9f35337082a2acb1893cc3976a0bdfcc670eef2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_46" + }, + { + "description": "Reach Level 15 Support", + "displayName": "Reach Level 15 Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77627b9cf8a5ff535bc4cc0b1afb8dceeaa89dcc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_47" + }, + { + "description": "Reach Level 20 Support", + "displayName": "Reach Level 20 Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87d64c361dbacf7bb024abbfa1cb379b86e91989.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_48" + }, + { + "description": "Reach Level 25 Support", + "displayName": "Reach Level 25 Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a435a108d19908931941b652c758534d0147ce2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_49" + }, + { + "description": "Reach Level 5 Firebug", + "displayName": "Reach Level 5 Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e6db9d05a3d33d94868e43f0a7034ecdb3ad840.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_50" + }, + { + "description": "Reach Level 10 Firebug", + "displayName": "Reach Level 10 Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/23ca75c49075bfd65d1a262b8e42d9c021b311ef.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_51" + }, + { + "description": "Reach Level 15 Firebug", + "displayName": "Reach Level 15 Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1cbb261b23edfea921a280c099d76f88dbd872a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_52" + }, + { + "description": "Reach Level 20 Firebug", + "displayName": "Reach Level 20 Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e133456760dd3f8148b9ec1417371c6ecebe62f5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_53" + }, + { + "description": "Reach Level 25 Firebug", + "displayName": "Reach Level 25 Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2488d37177ef8c82d03ac5bf7eb43fe774518c11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_54" + }, + { + "description": "Reach Level 5 Demolitions", + "displayName": "Reach Level 5 Demolitions", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f8ff68113d42586d47a3f8b8120a16f40794699b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_55" + }, + { + "description": "Reach Level 10 Demolitions", + "displayName": "Reach Level 10 Demolitions", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2664d73ed43ef164935a580a295bbf1e9e4e8de.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_56" + }, + { + "description": "Reach Level 15 Demolitions", + "displayName": "Reach Level 15 Demolitions", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dda8becc826584df747b1db31c1f36d8fe4a827e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_57" + }, + { + "description": "Reach Level 20 Demolitions", + "displayName": "Reach Level 20 Demolitions", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/97e880c18ee6117082b2fbf43e2c7f6b170fa5f8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_58" + }, + { + "description": "Reach Level 25 Demolitions", + "displayName": "Reach Level 25 Demolitions", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ae40a49979e39239251944daaee0eb6a1e72603d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_59" + }, + { + "description": "Reach Level 5 Gunslinger", + "displayName": "Reach Level 5 Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6dc5ed68550025c39e585746f5f9386e38661758.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_60" + }, + { + "description": "Reach Level 10 Gunslinger", + "displayName": "Reach Level 10 Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9a79962091ac4c31ea093da1edb1c3b0f47d129b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_61" + }, + { + "description": "Reach Level 15 Gunslinger", + "displayName": "Reach Level 15 Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7fb6931c29993732579b4cd3d8e9daab9a09f0ca.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_62" + }, + { + "description": "Reach Level 20 Gunslinger", + "displayName": "Reach Level 20 Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/815dec2cee244bec1fd47ddcc4393276c0463ff9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_63" + }, + { + "description": "Reach Level 25 Gunslinger", + "displayName": "Reach Level 25 Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cc7a9b384ed3897cc74fade28cde0e0c2c95b0ce.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_64" + }, + { + "description": "Beat Any One Map as Berserker on Normal Difficulty", + "displayName": "Normal Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36cc13be1928003332588ad18221760939c1dce3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_65" + }, + { + "description": "Beat Any One Map as Berserker on Hard Difficulty", + "displayName": "Hard Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/880c29a1d0131e4ecd8e863040e17bf504da9f2b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_66" + }, + { + "description": "Beat Any One Map as Berserker on Suicidal Difficulty", + "displayName": "Suicidal Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1916652e0bc1aeeaa0d3b13031fa8bb67b4a4737.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_67" + }, + { + "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", + "displayName": "Hellish Berserker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5134cbc5bab84d4fc20ada8bc9b51c6c742fffec.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_68" + }, + { + "description": "Beat Any One Map as Medic on Normal Difficulty", + "displayName": "Normal Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4839101153acbfda639e129955f4ad766cd24ee3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_69" + }, + { + "description": "Beat Any One Map as Medic on Hard Difficulty", + "displayName": "Hard Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4f2fc7260bbd80517e4ddc089ead393fee197a6a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_70" + }, + { + "description": "Beat Any One Map as Medic on Suicidal Difficulty", + "displayName": "Suicidal Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74bfb721ee43daade7c92e83593e2633d1531016.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_71" + }, + { + "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", + "displayName": "Hellish Medic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bbf40f4f99ddd1251494c45cf44436fc3032364e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_72" + }, + { + "description": "Complete any map as a Commando on Survival Normal difficulty", + "displayName": "Normal Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a8c0c6211e1314c175b8e5dd2785c79d97e8480.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_73" + }, + { + "description": "Complete any map as a Commando on Survival Hard difficulty", + "displayName": "Hard Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b44f5d459d8b35a7383718ea39540b8aed9f1d28.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_74" + }, + { + "description": "Complete any map as a Commando on Survival Suicidal difficulty", + "displayName": "Suicidal Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3d5b0e7ae171e6abd460c512bf7afaad20cb9c53.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_75" + }, + { + "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", + "displayName": "Hellish Commando", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e08ae8778751acbcf861ee08f3b9803d3181f34f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_76" + }, + { + "description": "Complete any map as a Support on Survival Normal difficulty", + "displayName": "Normal Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f18256b3f3ddee86f22b477be44e0093f6d1897d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_77" + }, + { + "description": "Complete any map as a Support on Survival Hard difficulty", + "displayName": "Hard Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4ad83923f2f9638896fe49aa80b04f11a80bd6db.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_78" + }, + { + "description": "Complete any map as a Support on Survival Suicidal difficulty", + "displayName": "Suicidal Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb55f2e2431b03b787ca803bd8ebb09ba4d0fbdd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_79" + }, + { + "description": "Complete any map as a Support on Survival Hell On Earth difficulty", + "displayName": "Hellish Support", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c483d17dea8fedf4b013c3b8a1f3a86ed7c53a1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_80" + }, + { + "description": "Complete any map as a Firebug on Survival Normal difficulty", + "displayName": "Normal Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d787f7a96c2396e035bfae8415739dd3ec53ce69.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_81" + }, + { + "description": "Complete any map as a Firebug on Survival Hard difficulty", + "displayName": "Hard Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/924384c8d486ef91bf856c25edd258e29b7243d5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_82" + }, + { + "description": "Complete any map as a Firebug on Survival Suicidal difficulty", + "displayName": "Suicidal Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0372e445fd1ad3208f784c254192a5b07ca00e94.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_83" + }, + { + "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", + "displayName": "Hellish Firebug", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/41e8861feba48471f3677b706c259ab7cc3c6ec1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_84" + }, + { + "description": "Complete any map as a Demolitionist on Survival Normal difficulty", + "displayName": "Normal Demolition", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba1d7d23335daf81fa6358a296219983d5c41d1a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_85" + }, + { + "description": "Complete any map as a Demolitionist on Survival Hard difficulty", + "displayName": "Hard Demolition", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2d72fe0b205be4a7c58f1a2f0560e7390fea1f5d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_86" + }, + { + "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", + "displayName": "Suicidal Demolition", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/68c99c300525c4b0524f9d1df77d54bab2b91b5f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_87" + }, + { + "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", + "displayName": "Hellish Demolition", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f3e2fa5c5bf2fd11d3646cf4046fcd46f6fcea6f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_88" + }, + { + "description": "Complete any map as a Gunslinger on Survival Normal difficulty", + "displayName": "Normal Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fd2324d876a594a4a5e64a8e7e6912d41a334a30.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_89" + }, + { + "description": "Complete any map as a Gunslinger on Survival Hard difficulty", + "displayName": "Hard Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74f2431f94c6ecc6639f6af75f4a02f12b2e164d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_90" + }, + { + "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", + "displayName": "Suicidal Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35cc28c801142cd4e1e8c64c4f8f747e13761420.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_91" + }, + { + "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", + "displayName": "Hellish Gunslinger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77b47b409488fe21a216cef5d279ac6293bb0b5e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_92" + }, + { + "description": "Reach Level 25 in all Perks", + "displayName": "Perked Up", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36350fb27669319b6c3ec26304250c9ff76b8a13.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_93" + }, + { + "description": "Complete Black Forest on Survival Normal difficulty", + "displayName": "Killer Korn", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b69373a99d3d8d3216b09402a9896f5f29009564.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_94" + }, + { + "description": "Complete Black Forest on Survival Hard difficulty", + "displayName": "Lager Me Up", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/657bf135a2bbf040370e9b4f73f8dbb74c5f0022.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_95" + }, + { + "description": "Complete Black Forest on Survival Suicidal difficulty", + "displayName": "I'll Dopple Bock", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da1fb07964ecc32315a797b1c825d8562bb86113.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_96" + }, + { + "description": "Complete Black Forest on Survival Hell On Earth difficulty", + "displayName": "Kein Bier Vor Vier", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5284866c575c132f4d4c838d8c380b5c731e05b6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_97" + }, + { + "description": "Collect all the items on Black Forest", + "displayName": "Black Forest Babies", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b8f2d33dbc9f884b8de60ea4573cf8cdf737d6d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_98" + }, + { + "description": "Beat Farmhouse on Normal Difficulty", + "displayName": "Plow the Field", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46cef619b81b1c389955bc1442c346a1b966431c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_99" + }, + { + "description": "Beat Farmhouse on Hard Difficulty", + "displayName": "Sow the Seed", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e20c6ea4e34b7953f9ea0982ad11835fa11ac9e9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_100" + }, + { + "description": "Beat Farmhouse on Suicidal Difficulty", + "displayName": "Water the Crops", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a2da718294f17bc3fc0e06dac6e64c4942e691c4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_101" + }, + { + "description": "Beat Farmhouse on Hell on Earth Difficulty", + "displayName": "Reap what you Sow", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7beeff9f0fb5fc641f2ad9d986db7cab1cb93486.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_102" + }, + { + "description": "Collect all the items on Farmhouse", + "displayName": "Darkness Dolls", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21abe9ca2790fed3a4f400bb82171de07460309e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_103" + }, + { + "description": "Beat Prison on Normal", + "displayName": "Walked into the wrong room", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/10b030dec54a8de662134975904e4b18546d2f8b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_104" + }, + { + "description": "Beat Prison on Hard", + "displayName": "Mercenaries get paid", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e10da3181de7bd0845b7a77d5f70dc83aae746fa.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_105" + }, + { + "description": "Beat Prison on Suicidal", + "displayName": "Like what, kill him again?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ed1d9b6092c89566a47c9593506f5dec889b9403.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_106" + }, + { + "description": "Beat Prison on Hell on Earth", + "displayName": "I was trained by the best. British Intel.", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca6f43274c132cf9d995591fb4045aa5c57709c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_107" + }, + { + "description": "Collect all the items on Prison", + "displayName": "Perilous Prison", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95c90482f7da7e7759fb68200f71d3b784e1396d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_108" + }, + { + "description": "Complete the Training Floor", + "displayName": "School's Out Forever", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/66f5309ba8030f4f5dc5f1c15e1db4dad14ffbb1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_109" + }, + { + "description": "Reach Level 5 Sharpshooter", + "displayName": "Reach Level 5 Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/023f4f3f8b8b45547a7c0bd9a1ac409cb262fbe8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_110" + }, + { + "description": "Reach Level 10 Sharpshooter", + "displayName": "Reach Level 10 Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ca9c4dea499a0212dd521cbf872715b54aa22018.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_111" + }, + { + "description": "Reach Level 15 Sharpshooter", + "displayName": "Reach Level 15 Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c7a93ae33709f3e087c2d73b580ab71be443515.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_112" + }, + { + "description": "Reach Level 20 Sharpshooter", + "displayName": "Reach Level 20 Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/00d137f6217d596365635659f788f81a12a56cc7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_113" + }, + { + "description": "Reach Level 25 Sharpshooter", + "displayName": "Reach Level 25 Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1010a85f23b67a0ed426f76827dc71a47c898e91.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_114" + }, + { + "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", + "displayName": "Normal Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/50e428ecaeb5ea710a68de937ab6db91871b8e06.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_115" + }, + { + "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", + "displayName": "Hard Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/378eb9e717b7405b636c74a504ef1548d47b1087.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_116" + }, + { + "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", + "displayName": "Suicidal Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/92ecee481d00897d6bd2d0526fd34fad7dd4dac2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_117" + }, + { + "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", + "displayName": "Hellish Sharpshooter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/37762c27fa85c5bfea8793d99760979c383105a1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_118" + }, + { + "description": "Complete Containment Station on Survival Normal difficulty", + "displayName": "Never Got the Hang of Thursdays", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c72b7326246881b9d9e4c2a446f75fa5709455b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_119" + }, + { + "description": "Complete Containment Station on Survival Hard difficulty", + "displayName": "Don't Panic", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7874cadae34f3a5adea32253491d2c9264a119f7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_120" + }, + { + "description": "Complete Containment Station on Survival Suicidal difficulty", + "displayName": "Give Up and Go Mad Now", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/258ebf7dee2742339bbdc3ced7609ddbe4c33517.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_121" + }, + { + "description": "Complete Containment Station on Survival Hell On Earth difficulty", + "displayName": "So Long and Thanks for All the Zeds", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a9313fc5d346da24302330d8784dcf7143b5c143.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_122" + }, + { + "description": "Collect All the Items on Containment Station", + "displayName": "Can't Be Contained", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffbbbe46c760cbed9d23cb5e53bf875384da70ee.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_123" + }, + { + "description": "Complete Hostile Grounds on Survival Normal difficulty", + "displayName": "Mind the Gap", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2de6a1efe33cabc68b9ddc4bbc831a32bc4bc50.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_124" + }, + { + "description": "Complete Hostile Grounds on Survival Hard difficulty", + "displayName": "Can't Make an Omelette Without Killing a Few People", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/69d31dd091f48198d692aa5bdb64e07cf52a92a3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_125" + }, + { + "description": "Complete Hostile Grounds on Survival Suicidal difficulty", + "displayName": "There Is No I in Team, But There Is an I in Pie", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bfcfa4a2fe2399e53034b696436610b0205540c8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_126" + }, + { + "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", + "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e3c20ee2ab91c0172796eac857bde8d7de639188.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_127" + }, + { + "description": "Collect All the Items on Hostile Grounds", + "displayName": "You've Got Red on You", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/020adbeabf8554ba8fe763cbb3c08df037a4965a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_128" + }, + { + "description": "Kill a Siren Before She Screams", + "displayName": "Dead Silence", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/08e4690859d94699a73a80e5589fb0b8c799fa1c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_129" + }, + { + "description": "Kill the Patriarch Before He Has a Chance to Heal", + "displayName": "Quick on the Trigger", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6fdfdd1f09fb91e90a1b25cb83a5421ae81a2cb5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_130" + }, + { + "description": "Kill Your First Fleshpound", + "displayName": "It's Only a Flesh Wound", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/03ff0be17f0e56d8e312aa117844f27f134c47af.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_131" + }, + { + "description": "Kill Your First Scrake", + "displayName": "Hack and Slash", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfc51c010c7198347da1a22e1ce51d47f5ff13c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_132" + }, + { + "description": "Kill Dr. Hans Volter For the First Time", + "displayName": "Die Volter", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6f07eab287060d5516082afa7e3a7772017fe75c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_133" + }, + { + "description": "Win Any Match on Hard Difficulty", + "displayName": "Win Hard", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/be68c7423f778e6a2fc636b4dc2e20942c6f0c68.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_134" + }, + { + "description": "Win Any Match on Suicidal Difficulty", + "displayName": "Win Suicidal", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3f199fbc299b56e873bb1bfb2d1726d88db3bbe6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_135" + }, + { + "description": "Win Any Match on Hell on Earth Difficulty", + "displayName": "Win Hell on Earth", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35c0be17200bacee8c54fbe87f16e8f27a82a181.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_136" + }, + { + "description": "Reach Level 5 on Any Perk", + "displayName": "Mr. Perky 5", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/75ff6bda27bc5f21d0f5aa096305e66b87129871.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_137" + }, + { + "description": "Reach Level 10 on Any Perk", + "displayName": "Mr. Perky 10", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b63768e9a813a14111cc4eeb283a0833db88874.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_138" + }, + { + "description": "Reach Level 15 on Any Perk", + "displayName": "Mr. Perky 15", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/26c3035ca19855e765ad032d1de71fe64ae153e9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_139" + }, + { + "description": "Reach Level 20 on Any Perk", + "displayName": "Mr. Perky 20", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/99a2fb3824c9f1eb2c607e22da9b4109cee0124f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_140" + }, + { + "description": "Reach Level 25 on Any Perk", + "displayName": "Mr. Perky 25", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9aa58d0c8f2f80e8250bb75aa4de09ffba6da5b5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_141" + }, + { + "description": "Win 1 Multiplayer Match", + "displayName": "Win 1", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/93aee896270cac79fb5ae36375c92091b57e9707.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_142" + }, + { + "description": "Win 10 Multiplayer Matches", + "displayName": "Win 10", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5ac2c4dcfc8e708bce22d43c8fa0a28bc5f63177.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_143" + }, + { + "description": "Win 25 Multiplayer Matches", + "displayName": "Win 25", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/361fe6cb30916a4b3785ea0431b7df56bca3e111.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_144" + }, + { + "description": "Win a VS Survival Round Playing as the Zeds", + "displayName": "VS Zed Win", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/992d3a5c5c8d736cd26ef8ce2f371eeea33a8469.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_145" + }, + { + "description": "Win a VS Survival Round Playing as the Humans", + "displayName": "VS Human Win", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af8cdf129ec3eaa218ca706105ed329792893872.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_146" + }, + { + "description": "Weld a Door to 100%", + "displayName": "Hold Out", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5b03919fefaa82dc87765dc29961e4fd3816acb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_147" + }, + { + "description": "Heal a Teammate With the Syringe", + "displayName": "I Got Your Back", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a873278bb202e325e5073ae542ebabf0dd276236.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_148" + }, + { + "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", + "displayName": "Benefactor", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7b07b668e976c865c0a2ad8707149d43f9652ef6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_149" + }, + { + "description": "Beat Infernal Realms on Normal", + "displayName": "Hell is Other People", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/27b51a5f9b9795e0e2e90d0784c31e70d7047f3c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_150" + }, + { + "description": "Complete Infernal Realms on Survival Hard difficulty", + "displayName": "If You Are Going Through Hell, Keep Going", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a062da8ad5b21973ff9913dfeede3b05c81dc19c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_151" + }, + { + "description": "Complete Infernal Realms on Survival Suicidal difficulty", + "displayName": "Hell is Just a Frame of Mind", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ac0d5107bbe97948e7642300b3503e0d91bcee3b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_152" + }, + { + "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", + "displayName": "All Hope abandon, Ye Who Enter Here", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/210ab00c89581caf7ffe220078d9ab9506f0dabd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_153" + }, + { + "description": "Collect all the Items in Infernal Realms", + "displayName": "Infernal Relics", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c81f20349851c9b12ea9fba2116d4458c8bb309.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_154" + }, + { + "description": "Reach Level 5 SWAT", + "displayName": "Reach Level 5 SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6919e017b0389e4e4f80b94a282bd10b88632567.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_155" + }, + { + "description": "Reach Level 10 SWAT", + "displayName": "Reach Level 10 SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba0a2d8bea98c36f402cf72ff59a17a6ea8a5097.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_156" + }, + { + "description": "Reach Level 15 SWAT", + "displayName": "Reach Level 15 SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/07b4a6889ba0f960360b16c6a2c528b2802c8c0d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_157" + }, + { + "description": "Reach Level 20 SWAT", + "displayName": "Reach Level 20 SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0577ad2c3987fa0186aaa017fa5c25c75c281133.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_158" + }, + { + "description": "Reach Level 25 SWAT", + "displayName": "Reach Level 25 SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c7655f2d1f275bc77e73b85a02d921f9e29d3031.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_159" + }, + { + "description": "Complete any map as a SWAT on Survival Normal difficulty", + "displayName": "Normal SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b9a7646537a74042db00c7c46b58463c12331ad.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_160" + }, + { + "description": "Beat Any One Map as SWAT on Hard Difficulty", + "displayName": "Hard SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a43a6bb8e914126587b1419879ff3d95b83ec6f6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_161" + }, + { + "description": "Beat Any One Map as SWAT on Suicidal Difficulty", + "displayName": "Suicidal SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af9bbfa27fa159b8ea469ee79ba525bdbcf07b6e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_162" + }, + { + "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", + "displayName": "Hellish SWAT", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a86755764baed752a896d2c8cd524bd20e1d6c57.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_163" + }, + { + "description": "Reach Level 5 Survivalist", + "displayName": "Reach Level 5 Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5c730159237de25db37bbba7ac8b899ba9b92f28.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_164" + }, + { + "description": "Reach Level 10 Survivalist", + "displayName": "Reach Level 10 Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c87bbe270e7a60494f0d6a46a173f48e8e90f266.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_165" + }, + { + "description": "Reach Level 15 Survivalist", + "displayName": "Reach Level 15 Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0fc03a0b9535d3f31d8cfe3055e905e7cda85939.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_166" + }, + { + "description": "Reach Level 20 Survivalist", + "displayName": "Reach Level 20 Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f9526579c6b4f52621b85c5913ff8773940fed11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_167" + }, + { + "description": "Reach Level 25 Survivalist", + "displayName": "Reach Level 25 Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a472196ec80ad363c21e1bac0206061a8ec6e1e1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_168" + }, + { + "description": "Beat Any One Map as Survivalist on Normal Difficulty", + "displayName": "Normal Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4c78a847b3842fac7ea587a603594d9a39ffc8a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_169" + }, + { + "description": "Complete any map as a Survivalist on Survival Hard difficulty", + "displayName": "Hard Survivalist ", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/17c50c8adff85ea28e3cbd3b7fa31d387efb3eff.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_170" + }, + { + "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", + "displayName": "Suicidal Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/accaa92454ffe35037f67c63c03ebb9544eec484.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_171" + }, + { + "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", + "displayName": "Hellish Survivalist", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a90fc7ad76f58c1278097f3a351001438c62327.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_172" + }, + { + "description": "Complete Zed Landing on Survival Normal difficulty", + "displayName": "Surfs Up", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e1c100915ffb91be6090459fdcda997a31fe62f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_173" + }, + { + "description": "Complete Zed Landing on Survival Hard difficulty", + "displayName": "Gnarly", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1d855a17989f39be054443c9277c90907eff1f8d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_174" + }, + { + "description": "Complete Zed Landing on Survival Suicidal difficulty", + "displayName": "Close-out", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25a425379ed71d99787c091fa7a24e507c2eecac.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_175" + }, + { + "description": "Complete Zed Landing on Survival Hell On Earth difficulty", + "displayName": "Blown Out", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d5f30aa2ff0b4a3e080eab4a61e202a87cf1775.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_176" + }, + { + "description": "Collect all the volley balls on Zed Landing", + "displayName": "ALAN!!!!!!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffad0d1970b1b8813ba164cd4465fc4de9b271eb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_177" + }, + { + "description": "Complete The Descent on Survival Normal difficulty", + "displayName": "How Bout Some Gas?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02f005688d599e8f655a6d41a65751031c1a4392.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_178" + }, + { + "description": "Complete The Descent on Survival Hard difficulty", + "displayName": "But what if we added Gas?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84848cab1b952d23328637f81e45b69aeda38ded.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_179" + }, + { + "description": "Complete The Descent on Survival Suicidal difficulty", + "displayName": "Let's Try Some Gas", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d6d7a2ce4b36b10b27946e972b3b7184f2226069.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_180" + }, + { + "description": "Complete The Descent on Survival Hell On Earth difficulty", + "displayName": "That's enough gas....", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e2ab1da79c801e23fba287c2fccc548bdbf0026.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_181" + }, + { + "description": "Collect all the items on The Descent", + "displayName": "Hans Off the Merchandise", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21ab02dcc7dc02c09b5e65a82fcdfa200a96a0db.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_182" + }, + { + "description": "Complete Nuked on Survival Normal difficulty", + "displayName": "The War Room", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2a96570f609cf5842a31691e5cc8c0a800907786.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_183" + }, + { + "description": "Complete Nuked on Survival Hard difficulty", + "displayName": "The Mineshaft Gap", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c28acbddf4b6bed6d2ad1ec7536b1160e3b056.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_184" + }, + { + "description": "Complete Nuked on Survival Suicidal difficulty", + "displayName": "Peace is Our Profession", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e759bb1400427742feb5d39e715e6c956c11987a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_185" + }, + { + "description": "Complete Nuked on Survival Hell On Earth difficulty", + "displayName": "How I Learned to Love the Bomb", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c42d2d9c5eb25d2c2c4a58dddd8084f470892e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_186" + }, + { + "description": "Collect all the items on Nuked", + "displayName": "Davy Crockett", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c16a98ee7a9a777730733ca1ec1cda2391fb89c7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_187" + }, + { + "description": "Complete Tragic Kingdom on Survival Normal difficulty", + "displayName": "It's a Bloody World After All", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0803a7e5a71920b9aa9c08e71eb381a9eda6e12.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_188" + }, + { + "description": "Complete Tragic Kingdom on Survival Hard difficulty", + "displayName": "The Goriest Place on Earth", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e2f6339b665184291d2987a3a48a5dbfb4b54c0e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_189" + }, + { + "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", + "displayName": "The House the Zed Built", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/85f0612297393d567d8ff712fa324dabb0c269fb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_190" + }, + { + "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", + "displayName": "Where Nightmares Come True", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f68565b02007c17260805be1d5bb3c55271e1cb3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_191" + }, + { + "description": "Collect all the items on The Tragic Kingdom", + "displayName": "The Wonderful World of Merchandising", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/79ad35a7fe93d31661bd54825571708545e43210.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_192" + }, + { + "description": "Beat Nightmare on Normal", + "displayName": "I Got a Rock", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1777445a1bc01a5c39a75c7167df6359edd5f26e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_193" + }, + { + "description": "Beat Nightmare on Hard", + "displayName": "Yuck, Candy Corn", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fb9b4f18d7f58d43295ee571cae5c821a5f12836.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_194" + }, + { + "description": "Beat Nightmare on Suicidal", + "displayName": "Fun Size? What is Fun Size?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53e20884174ea4717588f5a7c324d1a02d207dae.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_195" + }, + { + "description": "Beat Nightmare on Hell on Earth", + "displayName": "Victory! Full Size Candy Bar!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c69b7865a24dcc827d5ea44ac166907b8f08b4ad.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_196" + }, + { + "description": "Collect all the items (skulls) on Nightmare", + "displayName": "Letting the Demons Out", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/874e1f46efd7b59e66485ee1b9b4b5765bcab692.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_197" + }, + { + "description": "Beat Krampus Lair on Normal", + "displayName": "Stocking Full of Coal", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ff769cc651d4be77250428a4b6d4e0a254015b11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_198" + }, + { + "description": "Beat Krampus Lair on Hard", + "displayName": "Bundle of Switches", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84082b5ce17368ef1e6a1d9e78174866674686ba.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_199" + }, + { + "description": "Beat Krampus Lair on Suicidal", + "displayName": "A Whupping", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fe7e707e5ad19ef5e0dd9152a6d1b3ddeb59d883.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_200" + }, + { + "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", + "displayName": "Carried off to the Underworld", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c318550b2c02db9532d6051dd3af1f855cd87f5e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_201" + }, + { + "description": "Collect all the items (Snowglobes) on Krampus Lair", + "displayName": "A World Under Glass", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_202" + }, + { + "description": "Complete DieSector wave 25 on Endless Normal difficulty", + "displayName": "Training Simulation", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/510dc6da957123fce45794b85cc89075b6aa35d0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_203" + }, + { + "description": "Complete DieSector wave 25 on Endless Hard difficulty", + "displayName": "Test Trials", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/925db58c260bb48f62eb56ef9a5e8faf9274c905.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_204" + }, + { + "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", + "displayName": "Code Dead", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/222996c8e587aefda46d41c4c70b9108357ed175.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_205" + }, + { + "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", + "displayName": "Fatal Exception", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cf61a22148cdb35bd943ff14fb83f68c0cd8736e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_206" + }, + { + "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", + "displayName": "It's aD.A.R.able", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53405d791ad24a2a03b0d71c9c6f515e05fe3620.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_207" + }, + { + "description": "Complete Power Core on Survival Normal difficulty", + "displayName": "A Spark to Light the Way", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/877725c3b9e141295e2c52ac6f14af6f68013f04.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_208" + }, + { + "description": "Complete Power Core on Survival Hard difficulty", + "displayName": "Bolting through the Core", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95d39cdab7b75fca64b64c39e4671f3ff09f3871.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_209" + }, + { + "description": "Complete Power Core on Survival Suicidal difficulty", + "displayName": "High Voltage", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5521e83f9cf369d9f807489db0120d97a3e3002.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_210" + }, + { + "description": "Complete Power Core on Survival Hell On Earth difficulty", + "displayName": "I Have the Power!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca61bb09f6a26eebd4f76e5ab2804b2bdbd6540.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_211" + }, + { + "description": "Collect all the items (Batteries) on Power Core", + "displayName": "Surge Breaker", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2942584ef67dfc745bed2c7fcbd8f04bd0c9b11b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_212" + }, + { + "description": "Complete Airship on Survival Normal difficulty", + "displayName": "A Little Turbulence", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e76995587e9bf81b4beecad3b305b06f32ee35c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_213" + }, + { + "description": "Complete Airship on Survival Hard difficulty", + "displayName": "Flying Unfriendly Skies", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3dcc2a19350aef1f5b5079d2fa1510225bb5924f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_214" + }, + { + "description": "Complete Airship on Survival Suicidal difficulty", + "displayName": "Soar, Gore, and More", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d318dee401d56bafc7ebed0eaab6e4dcfb593b00.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_215" + }, + { + "description": "Complete Airship on Survival Hell On Earth difficulty", + "displayName": "Mile High Dead Club", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/350d3e23eb31845a77fcef992c7fe899fd436f80.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_216" + }, + { + "description": "Collect all the items (Steam Cells) on Airship", + "displayName": "Powered by Steam", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b5fdc74747940179c7dc5f3ab964b1ef4175fdc0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_217" + }, + { + "description": "Complete Lockdown on Survival Normal difficulty", + "displayName": "Station Stabilization", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffab338f1cf3295c1efd4a01d0e0bca3def85229.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_218" + }, + { + "description": "Complete Lockdown on Survival Hard difficulty", + "displayName": "Fun Near the Sun", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/39205159c665ba3b80af9365b4f6e58ccac29ef2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_219" + }, + { + "description": "Complete Lockdown on Survival Suicidal difficulty", + "displayName": "Space Race", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7c8cfb7f628de3b9c7a438d17311882900314c75.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_220" + }, + { + "description": "Complete Lockdown on Survival Hell On Earth difficulty", + "displayName": "Houston, We Don't Have a Problem", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/177825463454281e2ef5c05ecc1526ef2474c3d4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_221" + }, + { + "description": "Collect all the items (Batteries) on Lockdown", + "displayName": "Shocking Discovery!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c5b893ccd87f50690b337222fe6139c931b3533c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_222" + }, + { + "description": "Complete Monster Ball on Survival Normal difficulty", + "displayName": "Castle Crashers", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a5f8f0ecc173daa77a844bc1ad6b91ddaf60383d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_223" + }, + { + "description": "Complete Monster Ball on Survival Hard difficulty", + "displayName": "Party Hard!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/49cda67ccd22c0ebf522717bd03fad590b786389.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_224" + }, + { + "description": "Complete Monster Ball on Survival Suicidal difficulty", + "displayName": "Dance on the Gore Floor", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ce29727842be31de090c83871e6f5831efacfb87.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_225" + }, + { + "description": "Complete Monster Ball on Survival Hell on Earth difficulty", + "displayName": "Rest In Pieces", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25005dfa6da839a95b8aa3664ebb13034a228f49.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_226" + }, + { + "description": "Destroy 10 Glowing Skulls in Monster Ball", + "displayName": "Spooky Scary Skeletons", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d3b14b6dcab1ffaa714e2bebdff231a8972e313.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_227" + }, + { + "description": "Unlock the Alchemist Room in Monster Ball", + "displayName": "Death's Door", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/382680a850833e6d1b227c6b92d066ebb892ce0e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_228" + }, + { + "description": "Complete Santa's Workshop on Survival Normal Difficulty", + "displayName": "Cookies and Milk", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c9262e0a59ee9f4ae0b6b7f778e57aa5b84ddbb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", + "name": "Achievement_229" + }, + { + "description": "Complete Santa's Workshop on Survival Hard Difficulty", + "displayName": "Slaying with Santa", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b9ef59caab40af925efab875cec9c3cfcddc8bbd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_230" + }, + { + "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", + "displayName": "A Deadly Carol", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/55cebdba7cae5617c8a8664ff2361d31c98e41ac.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_231" + }, + { + "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", + "displayName": "You're On The Badass List", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/42cdfa0830aaaafbf52b7aa22b14e37094277526.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_232" + }, + { + "description": "Destroy 10 Snow Globes in Santa's Workshop", + "displayName": "Yule Shoot Your Eye Out", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_233" + }, + { + "description": "Complete Shopping Spree on Survival Normal Difficulty", + "displayName": "Cleanup On Aisle 3", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3a4536ce96f3535865a03aea65fd970706339058.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_234" + }, + { + "description": "Complete Shopping Spree on Survival Hard Difficulty", + "displayName": "Shoot One Get Two Free", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/933bc0eaa31bc8e877f08e12cf5543a40032e4d5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_235" + }, + { + "description": "Complete Shopping Spree on Survival Suicidal Difficulty", + "displayName": "Savings to Die For", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c4e0289e34928cce62665fe535b886f38d8a0534.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_236" + }, + { + "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", + "displayName": "Red Friday", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb976a5df4b166702cf5c16ef38026f62e76ba13.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", + "name": "Achievement_237" + }, + { + "description": "Destroy 10 Dosh Necklaces in Shopping Spree", + "displayName": "A Special Deal", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/60d04d244713b2b9475658538261124a0da51adc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_238" + }, + { + "description": "Complete Spillway on Survival Normal Difficulty", + "displayName": "It's All Downstream From Here", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84c45895752213f960988d909fac2317c1468d7e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_239" + }, + { + "description": "Complete Spillway on Survival Hard Difficulty", + "displayName": "Zeds Be Dam", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dca6e9d3e9aff9dd05a56c3a9838e21e37d2e8cf.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_240" + }, + { + "description": "Complete Spillway on Survival Suicidal Difficulty", + "displayName": "Overflow Controlled", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a834f5eca65f679bb9232faa5371501addd2222.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_241" + }, + { + "description": "Complete Spillway on Survival Hell On Earth Difficulty", + "displayName": "Dam You're Good!", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/751f4a1ed126d232c8be5cfa6b5efa05ec103316.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_242" + }, + { + "description": "Destroy 10 Dosh Necklaces in Spillway", + "displayName": "Money Down the Drain", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87cc7f0c7342385b24efb2956f214c7d057f3288.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_243" + }, + { + "description": "Complete Steam Fortress on Objective Normal Difficulty", + "displayName": "Burning Out the Fuse", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c669333a43bc28fdda7a441d54bab8d69cb14b2c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_244" + }, + { + "description": "Complete Steam Fortress on Objective Hard Difficulty", + "displayName": "Touchdown Brings Me Down", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a3723df79a8f83adef085ad31bf5ce7584715cf.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_245" + }, + { + "description": "Complete Steam Fortress on Objective Suicidal Difficulty", + "displayName": "High as a Kite", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7197c8ba18ed6dd63deaa9ac2198e26aa199d07b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_246" + }, + { + "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", + "displayName": "It's Cold as Hell", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54a004733d400ae8f350ce4fb95e8f9601462189.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_247" + }, + { + "description": "Destroy 10 Steam Batteries on Steam Fortress", + "displayName": "All This Science I Don't Understand", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f93605f0b8543fa506641195fa7fd6e21e6bb545.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_248" + }, + { + "description": "Complete Zed Landing on Objective Normal Difficulty", + "displayName": "Droning On", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3798d728855dc6dc65e926288176ab87666dbd86.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_249" + }, + { + "description": "Complete Zed Landing on Objective Hard Difficulty", + "displayName": "Data Deliverier ", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7933cd8f729179eb61274fffa8ac3af69368997c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_250" + }, + { + "description": "Complete Zed Landing on Objective Suicidal Difficulty", + "displayName": "Island Isolation", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c25b0221caf5779641711eae5dbe5e915d7feef0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_251" + }, + { + "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", + "displayName": "Someone Call a Chopper?", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9ccce9f949a52cf79fbc4b53f703fb4bd726d652.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_252" + }, + { + "description": "Complete Outpost on Objective Normal Difficulty", + "displayName": "It's Snow Good. ", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/626744b7626d76146205e4ee0545ff5b82d48536.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_253" + }, + { + "description": "Complete Outpost on Objective Hard Difficulty", + "displayName": "Giving the Cold Shoulder", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0d63ed438b13319e0c81a6d7b3b0fea00e28b84.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_254" + }, + { + "description": "Complete Outpost on Objective Suicidal Difficulty", + "displayName": "Frozen Assets", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72142caac4513322346bb51b738a099219288e9c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_255" + }, + { + "description": "Complete Outpost on Objective Hell On Earth Difficulty", + "displayName": "The Snow Must Go On", + "hidden": "0", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fb3f2cd9de0a8d536b4070a2ac59d747f5e76a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_256" + }, + { + "description": null, + "displayName": "Achievement_257_Name", + "hidden": "1", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_257" + }, + { + "description": null, + "displayName": "Achievement_258_Name", + "hidden": "1", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_258" + }, + { + "description": null, + "displayName": "Achievement_259_Name", + "hidden": "1", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_259" + }, + { + "description": null, + "displayName": "Achievement_260_Name", + "hidden": "1", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_260" + }, + { + "description": null, + "displayName": "Achievement_261_Name", + "hidden": "1", + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_261" + } +] \ No newline at end of file diff --git a/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json b/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json new file mode 100644 index 0000000..8613d40 --- /dev/null +++ b/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json @@ -0,0 +1,2622 @@ +[ + { + "description": "Complete Burning Paris on Survival Normal difficulty", + "displayName": "Tower Tussle", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/602f536d30b0c235518e7a1e44187d441eaf63d6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_0", + "time_earned": 0 + }, + { + "description": "Complete Burning Paris on Survival Hard difficulty", + "displayName": "Seine Skirmish", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/636fe6d6fabcabde48e874b7f4743632578b1c5d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_1", + "time_earned": 0 + }, + { + "description": "Beat Burning Paris on Suicidal", + "displayName": "Bastille Brawl", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c917888af91dfe611af82089437b2893779c8efc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_2", + "time_earned": 0 + }, + { + "description": "Beat Burning Paris on Hell on Earth", + "displayName": "Arc Action", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70b565ce3857b76c0a05369f06c8c049e16f7acb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_3", + "time_earned": 0 + }, + { + "description": "Beat Outpost on Normal", + "displayName": "You Can't Fight In Here, This Is The Control Room", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d47d3ba3fd18af18307316c45ef5928a2ef548ea.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_4", + "time_earned": 0 + }, + { + "description": "Beat Outpost on Hard", + "displayName": "This Is What Happens When You Meet A Zed In The Alps", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02ee9ce922c7ce7a64829cd532f1ba2643dd4bb1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_5", + "time_earned": 0 + }, + { + "description": "Beat Outpost on Suicidal", + "displayName": "The Shield Doors Must Be Closed", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/050dcb99026091b63eddda0cdc4d63fd722c1e1b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_6", + "time_earned": 0 + }, + { + "description": "Beat Outpost on Hell on Earth", + "displayName": "Fear Is For The Zeds, My Little Lord", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8431a972a1983e9caf674f6789a5c465805ebbc4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_7", + "time_earned": 0 + }, + { + "description": "Beat Biotics Lab on Normal", + "displayName": "Open For Testing", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a8d274c3d77ec81d2aab54af370f724d40f15bc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_8", + "time_earned": 0 + }, + { + "description": "Beat Biotics Lab on Hard", + "displayName": "Limited Contact", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cbcc021969245995ce09589ad53ab1a47f0fdff7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_9", + "time_earned": 0 + }, + { + "description": "Beat Biotics Lab on Suicidal", + "displayName": "Restricted Access", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/44268ccc9bac63ecbf60f39898d7dc2c17bd53ab.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_10", + "time_earned": 0 + }, + { + "description": "Beat Biotics Lab on Hell on Earth", + "displayName": "Controlled Environment", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70cb90730ab2705bb1e306819354651d56c38552.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_11", + "time_earned": 0 + }, + { + "description": "Beat Volter Manor on Normal", + "displayName": "Just Visiting", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/61fa8d36c9829af872c0ad5228c60d64069fce17.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_12", + "time_earned": 0 + }, + { + "description": "Beat Volter Manor on Hard", + "displayName": "Mind Your Manor", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e5b10441e0474095bbb81d5960f1af27c932084.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_13", + "time_earned": 0 + }, + { + "description": "Beat Volter Manor on Suicidal", + "displayName": "Settling In", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1683c9b2122f6ede072934269661f93e17ab984e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_14", + "time_earned": 0 + }, + { + "description": "Complete Volter Manor on Survival Hell On Earth difficulty", + "displayName": "Lord of the Manor", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c4b365273492452a071837a4255bd4d2dea73da.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_15", + "time_earned": 0 + }, + { + "description": "Collect all the items on Burning Paris", + "displayName": "Paris Plunder", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1438bcf38af2bfc2c847a1f668faf687df0b732.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_16", + "time_earned": 0 + }, + { + "description": "Collect all the items on Outpost", + "displayName": "Outpost Offerings", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59ffefa9465aaf04ffdbc9e705cf3164d28a91b0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_17", + "time_earned": 0 + }, + { + "description": "Collect all the items on Biotics Lab", + "displayName": "Biotics Bling", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da4820f31888fcefa4a634a584e12a96de211e88.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_18", + "time_earned": 0 + }, + { + "description": "Collect all the items on Volter Manor", + "displayName": "Manor Money", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/30c452781f10edb7b6b3abd3a038776eac66252d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", + "name": "Achievement_19", + "time_earned": 0 + }, + { + "description": "Complete Evacuation Point on Survival Normal difficulty", + "displayName": "The Suite Life", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c80431926b58a51f442831f69d109df8d3f64e1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_20", + "time_earned": 0 + }, + { + "description": "Complete Evacuation Point on Survival Hard difficulty", + "displayName": "Unsinkable II", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3b2a9c5c63aad9b5f0a43f93424e0f29c8c6deb9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_21", + "time_earned": 0 + }, + { + "description": "Complete Evacuation Point on Survival Suicidal difficulty", + "displayName": "Bow Movement", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4b22d317141e729496ec00a2f0f7bc6a8a3146f2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_22", + "time_earned": 0 + }, + { + "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", + "displayName": "Seas The Day", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b64bf6337277640aa8f455aed9d210168a7ce414.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_23", + "time_earned": 0 + }, + { + "description": "Complete Catacombs on Survival Normal difficulty", + "displayName": "A Light In The Darkness", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d2908401103ad32380e3cf3525dafc45a1691306.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_24", + "time_earned": 0 + }, + { + "description": "Complete Catacombs on Survival Hard difficulty", + "displayName": "This Is No Mine", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1b79ab127fcaba5394686438c187275672fa62e3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_25", + "time_earned": 0 + }, + { + "description": "Complete Catacombs on Survival Suicidal difficulty", + "displayName": "This Is A Tomb, Theirs", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72a312fa2a311a0d57ba43d5d0ff5324560bd954.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_26", + "time_earned": 0 + }, + { + "description": "Complete Catacombs on Survival Hell On Earth difficulty", + "displayName": "They Shall Not Pass", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4770075a39f42f45b4fa7cf8f4c2e9c377633a0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_27", + "time_earned": 0 + }, + { + "description": "Collect all the items on Evacuation Point", + "displayName": "Point Paper", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8946b527da24edc10caea62e796b1b43420f736b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_28", + "time_earned": 0 + }, + { + "description": "Collect all the items on Catacombs", + "displayName": "Catacombs Cash", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/daa37be2677f123e123bf39b945e996fb8758c45.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_29", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Berserker", + "displayName": "Reach Level 5 Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ec445dee4f5bfcfca9e132ff680068e02c80983a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_30", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Berserker", + "displayName": "Reach Level 10 Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b2a3fc6e4112e667d045e7a0e3d1d229afe9273.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_31", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Berserker", + "displayName": "Reach Level 15 Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77fcacad378a8b65c6a1a40149a0bb41e571d252.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_32", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Berserker", + "displayName": "Reach Level 20 Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/edcb6d683a8cdb6dd29bd6dfa6c4887aedf886ef.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_33", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Berserker", + "displayName": "Reach Level 25 Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c0797935113227a8a7d60cdd76dfe1d272bd9c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_34", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Medic", + "displayName": "Reach Level 5 Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f81cafc2e08f2373cf4a5a4feb8ebc9d42609f52.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_35", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Medic", + "displayName": "Reach Level 10 Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfa49ae2939448e3eae52e6ef5d88a8d3e8cee5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_36", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Medic", + "displayName": "Reach Level 15 Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9d05bece5bdc0c4a919629378aa8d0a838b01548.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_37", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Medic", + "displayName": "Reach Level 20 Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8dcf9baa3420738cea516dfbb148d822b8cbc5c9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_38", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Medic", + "displayName": "Reach Level 25 Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/908b077bf03a98b6731c68d78bfb4071bb112604.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_39", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Commando", + "displayName": "Reach Level 5 Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59df9bded3394b3658929b5c0d6c4ef94d544bc3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_40", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Commando", + "displayName": "Reach Level 10 Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0052ebf1633c386974865ee696606c9fa003ff10.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_41", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Commando", + "displayName": "Reach Level 15 Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a211f3fb884248955eb1608987882372c44be91.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_42", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Commando", + "displayName": "Reach Level 20 Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46e7a0273fe5e82f4cbf6a650e8e9b519651ed46.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_43", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Commando", + "displayName": "Reach Level 25 Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ea698f23e293f79e28ad83c710820c86c30e8639.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_44", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Support", + "displayName": "Reach Level 5 Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8405e32f8bd371eb86b2d2c969efaba94d1b0076.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_45", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Support", + "displayName": "Reach Level 10 Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d9f35337082a2acb1893cc3976a0bdfcc670eef2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_46", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Support", + "displayName": "Reach Level 15 Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77627b9cf8a5ff535bc4cc0b1afb8dceeaa89dcc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_47", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Support", + "displayName": "Reach Level 20 Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87d64c361dbacf7bb024abbfa1cb379b86e91989.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_48", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Support", + "displayName": "Reach Level 25 Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a435a108d19908931941b652c758534d0147ce2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_49", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Firebug", + "displayName": "Reach Level 5 Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e6db9d05a3d33d94868e43f0a7034ecdb3ad840.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_50", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Firebug", + "displayName": "Reach Level 10 Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/23ca75c49075bfd65d1a262b8e42d9c021b311ef.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_51", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Firebug", + "displayName": "Reach Level 15 Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1cbb261b23edfea921a280c099d76f88dbd872a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_52", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Firebug", + "displayName": "Reach Level 20 Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e133456760dd3f8148b9ec1417371c6ecebe62f5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_53", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Firebug", + "displayName": "Reach Level 25 Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2488d37177ef8c82d03ac5bf7eb43fe774518c11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_54", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Demolitions", + "displayName": "Reach Level 5 Demolitions", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f8ff68113d42586d47a3f8b8120a16f40794699b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_55", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Demolitions", + "displayName": "Reach Level 10 Demolitions", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2664d73ed43ef164935a580a295bbf1e9e4e8de.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_56", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Demolitions", + "displayName": "Reach Level 15 Demolitions", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dda8becc826584df747b1db31c1f36d8fe4a827e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_57", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Demolitions", + "displayName": "Reach Level 20 Demolitions", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/97e880c18ee6117082b2fbf43e2c7f6b170fa5f8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_58", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Demolitions", + "displayName": "Reach Level 25 Demolitions", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ae40a49979e39239251944daaee0eb6a1e72603d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_59", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Gunslinger", + "displayName": "Reach Level 5 Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6dc5ed68550025c39e585746f5f9386e38661758.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_60", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Gunslinger", + "displayName": "Reach Level 10 Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9a79962091ac4c31ea093da1edb1c3b0f47d129b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_61", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Gunslinger", + "displayName": "Reach Level 15 Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7fb6931c29993732579b4cd3d8e9daab9a09f0ca.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_62", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Gunslinger", + "displayName": "Reach Level 20 Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/815dec2cee244bec1fd47ddcc4393276c0463ff9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_63", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Gunslinger", + "displayName": "Reach Level 25 Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cc7a9b384ed3897cc74fade28cde0e0c2c95b0ce.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_64", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Berserker on Normal Difficulty", + "displayName": "Normal Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36cc13be1928003332588ad18221760939c1dce3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_65", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Berserker on Hard Difficulty", + "displayName": "Hard Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/880c29a1d0131e4ecd8e863040e17bf504da9f2b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_66", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Berserker on Suicidal Difficulty", + "displayName": "Suicidal Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1916652e0bc1aeeaa0d3b13031fa8bb67b4a4737.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_67", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", + "displayName": "Hellish Berserker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5134cbc5bab84d4fc20ada8bc9b51c6c742fffec.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_68", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Medic on Normal Difficulty", + "displayName": "Normal Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4839101153acbfda639e129955f4ad766cd24ee3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_69", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Medic on Hard Difficulty", + "displayName": "Hard Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4f2fc7260bbd80517e4ddc089ead393fee197a6a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_70", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Medic on Suicidal Difficulty", + "displayName": "Suicidal Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74bfb721ee43daade7c92e83593e2633d1531016.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_71", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", + "displayName": "Hellish Medic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bbf40f4f99ddd1251494c45cf44436fc3032364e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_72", + "time_earned": 0 + }, + { + "description": "Complete any map as a Commando on Survival Normal difficulty", + "displayName": "Normal Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a8c0c6211e1314c175b8e5dd2785c79d97e8480.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_73", + "time_earned": 0 + }, + { + "description": "Complete any map as a Commando on Survival Hard difficulty", + "displayName": "Hard Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b44f5d459d8b35a7383718ea39540b8aed9f1d28.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_74", + "time_earned": 0 + }, + { + "description": "Complete any map as a Commando on Survival Suicidal difficulty", + "displayName": "Suicidal Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3d5b0e7ae171e6abd460c512bf7afaad20cb9c53.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_75", + "time_earned": 0 + }, + { + "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", + "displayName": "Hellish Commando", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e08ae8778751acbcf861ee08f3b9803d3181f34f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_76", + "time_earned": 0 + }, + { + "description": "Complete any map as a Support on Survival Normal difficulty", + "displayName": "Normal Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f18256b3f3ddee86f22b477be44e0093f6d1897d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_77", + "time_earned": 0 + }, + { + "description": "Complete any map as a Support on Survival Hard difficulty", + "displayName": "Hard Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4ad83923f2f9638896fe49aa80b04f11a80bd6db.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_78", + "time_earned": 0 + }, + { + "description": "Complete any map as a Support on Survival Suicidal difficulty", + "displayName": "Suicidal Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb55f2e2431b03b787ca803bd8ebb09ba4d0fbdd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_79", + "time_earned": 0 + }, + { + "description": "Complete any map as a Support on Survival Hell On Earth difficulty", + "displayName": "Hellish Support", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c483d17dea8fedf4b013c3b8a1f3a86ed7c53a1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_80", + "time_earned": 0 + }, + { + "description": "Complete any map as a Firebug on Survival Normal difficulty", + "displayName": "Normal Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d787f7a96c2396e035bfae8415739dd3ec53ce69.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_81", + "time_earned": 0 + }, + { + "description": "Complete any map as a Firebug on Survival Hard difficulty", + "displayName": "Hard Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/924384c8d486ef91bf856c25edd258e29b7243d5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_82", + "time_earned": 0 + }, + { + "description": "Complete any map as a Firebug on Survival Suicidal difficulty", + "displayName": "Suicidal Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0372e445fd1ad3208f784c254192a5b07ca00e94.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_83", + "time_earned": 0 + }, + { + "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", + "displayName": "Hellish Firebug", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/41e8861feba48471f3677b706c259ab7cc3c6ec1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_84", + "time_earned": 0 + }, + { + "description": "Complete any map as a Demolitionist on Survival Normal difficulty", + "displayName": "Normal Demolition", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba1d7d23335daf81fa6358a296219983d5c41d1a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_85", + "time_earned": 0 + }, + { + "description": "Complete any map as a Demolitionist on Survival Hard difficulty", + "displayName": "Hard Demolition", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2d72fe0b205be4a7c58f1a2f0560e7390fea1f5d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_86", + "time_earned": 0 + }, + { + "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", + "displayName": "Suicidal Demolition", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/68c99c300525c4b0524f9d1df77d54bab2b91b5f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_87", + "time_earned": 0 + }, + { + "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", + "displayName": "Hellish Demolition", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f3e2fa5c5bf2fd11d3646cf4046fcd46f6fcea6f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_88", + "time_earned": 0 + }, + { + "description": "Complete any map as a Gunslinger on Survival Normal difficulty", + "displayName": "Normal Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fd2324d876a594a4a5e64a8e7e6912d41a334a30.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_89", + "time_earned": 0 + }, + { + "description": "Complete any map as a Gunslinger on Survival Hard difficulty", + "displayName": "Hard Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74f2431f94c6ecc6639f6af75f4a02f12b2e164d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_90", + "time_earned": 0 + }, + { + "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", + "displayName": "Suicidal Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35cc28c801142cd4e1e8c64c4f8f747e13761420.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_91", + "time_earned": 0 + }, + { + "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", + "displayName": "Hellish Gunslinger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77b47b409488fe21a216cef5d279ac6293bb0b5e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_92", + "time_earned": 0 + }, + { + "description": "Reach Level 25 in all Perks", + "displayName": "Perked Up", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36350fb27669319b6c3ec26304250c9ff76b8a13.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_93", + "time_earned": 0 + }, + { + "description": "Complete Black Forest on Survival Normal difficulty", + "displayName": "Killer Korn", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b69373a99d3d8d3216b09402a9896f5f29009564.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_94", + "time_earned": 0 + }, + { + "description": "Complete Black Forest on Survival Hard difficulty", + "displayName": "Lager Me Up", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/657bf135a2bbf040370e9b4f73f8dbb74c5f0022.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_95", + "time_earned": 0 + }, + { + "description": "Complete Black Forest on Survival Suicidal difficulty", + "displayName": "I'll Dopple Bock", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da1fb07964ecc32315a797b1c825d8562bb86113.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_96", + "time_earned": 0 + }, + { + "description": "Complete Black Forest on Survival Hell On Earth difficulty", + "displayName": "Kein Bier Vor Vier", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5284866c575c132f4d4c838d8c380b5c731e05b6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_97", + "time_earned": 0 + }, + { + "description": "Collect all the items on Black Forest", + "displayName": "Black Forest Babies", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b8f2d33dbc9f884b8de60ea4573cf8cdf737d6d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_98", + "time_earned": 0 + }, + { + "description": "Beat Farmhouse on Normal Difficulty", + "displayName": "Plow the Field", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46cef619b81b1c389955bc1442c346a1b966431c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_99", + "time_earned": 0 + }, + { + "description": "Beat Farmhouse on Hard Difficulty", + "displayName": "Sow the Seed", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e20c6ea4e34b7953f9ea0982ad11835fa11ac9e9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_100", + "time_earned": 0 + }, + { + "description": "Beat Farmhouse on Suicidal Difficulty", + "displayName": "Water the Crops", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a2da718294f17bc3fc0e06dac6e64c4942e691c4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_101", + "time_earned": 0 + }, + { + "description": "Beat Farmhouse on Hell on Earth Difficulty", + "displayName": "Reap what you Sow", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7beeff9f0fb5fc641f2ad9d986db7cab1cb93486.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_102", + "time_earned": 0 + }, + { + "description": "Collect all the items on Farmhouse", + "displayName": "Darkness Dolls", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21abe9ca2790fed3a4f400bb82171de07460309e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_103", + "time_earned": 0 + }, + { + "description": "Beat Prison on Normal", + "displayName": "Walked into the wrong room", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/10b030dec54a8de662134975904e4b18546d2f8b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_104", + "time_earned": 0 + }, + { + "description": "Beat Prison on Hard", + "displayName": "Mercenaries get paid", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e10da3181de7bd0845b7a77d5f70dc83aae746fa.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_105", + "time_earned": 0 + }, + { + "description": "Beat Prison on Suicidal", + "displayName": "Like what, kill him again?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ed1d9b6092c89566a47c9593506f5dec889b9403.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_106", + "time_earned": 0 + }, + { + "description": "Beat Prison on Hell on Earth", + "displayName": "I was trained by the best. British Intel.", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca6f43274c132cf9d995591fb4045aa5c57709c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_107", + "time_earned": 0 + }, + { + "description": "Collect all the items on Prison", + "displayName": "Perilous Prison", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95c90482f7da7e7759fb68200f71d3b784e1396d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_108", + "time_earned": 0 + }, + { + "description": "Complete the Training Floor", + "displayName": "School's Out Forever", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/66f5309ba8030f4f5dc5f1c15e1db4dad14ffbb1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_109", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Sharpshooter", + "displayName": "Reach Level 5 Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/023f4f3f8b8b45547a7c0bd9a1ac409cb262fbe8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_110", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Sharpshooter", + "displayName": "Reach Level 10 Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ca9c4dea499a0212dd521cbf872715b54aa22018.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_111", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Sharpshooter", + "displayName": "Reach Level 15 Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c7a93ae33709f3e087c2d73b580ab71be443515.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_112", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Sharpshooter", + "displayName": "Reach Level 20 Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/00d137f6217d596365635659f788f81a12a56cc7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_113", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Sharpshooter", + "displayName": "Reach Level 25 Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1010a85f23b67a0ed426f76827dc71a47c898e91.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_114", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", + "displayName": "Normal Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/50e428ecaeb5ea710a68de937ab6db91871b8e06.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_115", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", + "displayName": "Hard Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/378eb9e717b7405b636c74a504ef1548d47b1087.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_116", + "time_earned": 0 + }, + { + "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", + "displayName": "Suicidal Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/92ecee481d00897d6bd2d0526fd34fad7dd4dac2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_117", + "time_earned": 0 + }, + { + "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", + "displayName": "Hellish Sharpshooter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/37762c27fa85c5bfea8793d99760979c383105a1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_118", + "time_earned": 0 + }, + { + "description": "Complete Containment Station on Survival Normal difficulty", + "displayName": "Never Got the Hang of Thursdays", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c72b7326246881b9d9e4c2a446f75fa5709455b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_119", + "time_earned": 0 + }, + { + "description": "Complete Containment Station on Survival Hard difficulty", + "displayName": "Don't Panic", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7874cadae34f3a5adea32253491d2c9264a119f7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_120", + "time_earned": 0 + }, + { + "description": "Complete Containment Station on Survival Suicidal difficulty", + "displayName": "Give Up and Go Mad Now", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/258ebf7dee2742339bbdc3ced7609ddbe4c33517.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_121", + "time_earned": 0 + }, + { + "description": "Complete Containment Station on Survival Hell On Earth difficulty", + "displayName": "So Long and Thanks for All the Zeds", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a9313fc5d346da24302330d8784dcf7143b5c143.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_122", + "time_earned": 0 + }, + { + "description": "Collect All the Items on Containment Station", + "displayName": "Can't Be Contained", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffbbbe46c760cbed9d23cb5e53bf875384da70ee.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_123", + "time_earned": 0 + }, + { + "description": "Complete Hostile Grounds on Survival Normal difficulty", + "displayName": "Mind the Gap", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2de6a1efe33cabc68b9ddc4bbc831a32bc4bc50.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_124", + "time_earned": 0 + }, + { + "description": "Complete Hostile Grounds on Survival Hard difficulty", + "displayName": "Can't Make an Omelette Without Killing a Few People", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/69d31dd091f48198d692aa5bdb64e07cf52a92a3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_125", + "time_earned": 0 + }, + { + "description": "Complete Hostile Grounds on Survival Suicidal difficulty", + "displayName": "There Is No I in Team, But There Is an I in Pie", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bfcfa4a2fe2399e53034b696436610b0205540c8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_126", + "time_earned": 0 + }, + { + "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", + "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e3c20ee2ab91c0172796eac857bde8d7de639188.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_127", + "time_earned": 0 + }, + { + "description": "Collect All the Items on Hostile Grounds", + "displayName": "You've Got Red on You", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/020adbeabf8554ba8fe763cbb3c08df037a4965a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_128", + "time_earned": 0 + }, + { + "description": "Kill a Siren Before She Screams", + "displayName": "Dead Silence", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/08e4690859d94699a73a80e5589fb0b8c799fa1c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_129", + "time_earned": 0 + }, + { + "description": "Kill the Patriarch Before He Has a Chance to Heal", + "displayName": "Quick on the Trigger", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6fdfdd1f09fb91e90a1b25cb83a5421ae81a2cb5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_130", + "time_earned": 0 + }, + { + "description": "Kill Your First Fleshpound", + "displayName": "It's Only a Flesh Wound", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/03ff0be17f0e56d8e312aa117844f27f134c47af.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_131", + "time_earned": 0 + }, + { + "description": "Kill Your First Scrake", + "displayName": "Hack and Slash", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfc51c010c7198347da1a22e1ce51d47f5ff13c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_132", + "time_earned": 0 + }, + { + "description": "Kill Dr. Hans Volter For the First Time", + "displayName": "Die Volter", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6f07eab287060d5516082afa7e3a7772017fe75c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_133", + "time_earned": 0 + }, + { + "description": "Win Any Match on Hard Difficulty", + "displayName": "Win Hard", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/be68c7423f778e6a2fc636b4dc2e20942c6f0c68.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_134", + "time_earned": 0 + }, + { + "description": "Win Any Match on Suicidal Difficulty", + "displayName": "Win Suicidal", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3f199fbc299b56e873bb1bfb2d1726d88db3bbe6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_135", + "time_earned": 0 + }, + { + "description": "Win Any Match on Hell on Earth Difficulty", + "displayName": "Win Hell on Earth", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35c0be17200bacee8c54fbe87f16e8f27a82a181.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_136", + "time_earned": 0 + }, + { + "description": "Reach Level 5 on Any Perk", + "displayName": "Mr. Perky 5", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/75ff6bda27bc5f21d0f5aa096305e66b87129871.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_137", + "time_earned": 0 + }, + { + "description": "Reach Level 10 on Any Perk", + "displayName": "Mr. Perky 10", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b63768e9a813a14111cc4eeb283a0833db88874.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_138", + "time_earned": 0 + }, + { + "description": "Reach Level 15 on Any Perk", + "displayName": "Mr. Perky 15", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/26c3035ca19855e765ad032d1de71fe64ae153e9.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_139", + "time_earned": 0 + }, + { + "description": "Reach Level 20 on Any Perk", + "displayName": "Mr. Perky 20", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/99a2fb3824c9f1eb2c607e22da9b4109cee0124f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_140", + "time_earned": 0 + }, + { + "description": "Reach Level 25 on Any Perk", + "displayName": "Mr. Perky 25", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9aa58d0c8f2f80e8250bb75aa4de09ffba6da5b5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_141", + "time_earned": 0 + }, + { + "description": "Win 1 Multiplayer Match", + "displayName": "Win 1", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/93aee896270cac79fb5ae36375c92091b57e9707.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_142", + "time_earned": 0 + }, + { + "description": "Win 10 Multiplayer Matches", + "displayName": "Win 10", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5ac2c4dcfc8e708bce22d43c8fa0a28bc5f63177.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_143", + "time_earned": 0 + }, + { + "description": "Win 25 Multiplayer Matches", + "displayName": "Win 25", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/361fe6cb30916a4b3785ea0431b7df56bca3e111.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_144", + "time_earned": 0 + }, + { + "description": "Win a VS Survival Round Playing as the Zeds", + "displayName": "VS Zed Win", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/992d3a5c5c8d736cd26ef8ce2f371eeea33a8469.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_145", + "time_earned": 0 + }, + { + "description": "Win a VS Survival Round Playing as the Humans", + "displayName": "VS Human Win", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af8cdf129ec3eaa218ca706105ed329792893872.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_146", + "time_earned": 0 + }, + { + "description": "Weld a Door to 100%", + "displayName": "Hold Out", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5b03919fefaa82dc87765dc29961e4fd3816acb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_147", + "time_earned": 0 + }, + { + "description": "Heal a Teammate With the Syringe", + "displayName": "I Got Your Back", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a873278bb202e325e5073ae542ebabf0dd276236.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_148", + "time_earned": 0 + }, + { + "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", + "displayName": "Benefactor", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7b07b668e976c865c0a2ad8707149d43f9652ef6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_149", + "time_earned": 0 + }, + { + "description": "Beat Infernal Realms on Normal", + "displayName": "Hell is Other People", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/27b51a5f9b9795e0e2e90d0784c31e70d7047f3c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_150", + "time_earned": 0 + }, + { + "description": "Complete Infernal Realms on Survival Hard difficulty", + "displayName": "If You Are Going Through Hell, Keep Going", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a062da8ad5b21973ff9913dfeede3b05c81dc19c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_151", + "time_earned": 0 + }, + { + "description": "Complete Infernal Realms on Survival Suicidal difficulty", + "displayName": "Hell is Just a Frame of Mind", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ac0d5107bbe97948e7642300b3503e0d91bcee3b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_152", + "time_earned": 0 + }, + { + "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", + "displayName": "All Hope abandon, Ye Who Enter Here", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/210ab00c89581caf7ffe220078d9ab9506f0dabd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_153", + "time_earned": 0 + }, + { + "description": "Collect all the Items in Infernal Realms", + "displayName": "Infernal Relics", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c81f20349851c9b12ea9fba2116d4458c8bb309.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_154", + "time_earned": 0 + }, + { + "description": "Reach Level 5 SWAT", + "displayName": "Reach Level 5 SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6919e017b0389e4e4f80b94a282bd10b88632567.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_155", + "time_earned": 0 + }, + { + "description": "Reach Level 10 SWAT", + "displayName": "Reach Level 10 SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba0a2d8bea98c36f402cf72ff59a17a6ea8a5097.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_156", + "time_earned": 0 + }, + { + "description": "Reach Level 15 SWAT", + "displayName": "Reach Level 15 SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/07b4a6889ba0f960360b16c6a2c528b2802c8c0d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_157", + "time_earned": 0 + }, + { + "description": "Reach Level 20 SWAT", + "displayName": "Reach Level 20 SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0577ad2c3987fa0186aaa017fa5c25c75c281133.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_158", + "time_earned": 0 + }, + { + "description": "Reach Level 25 SWAT", + "displayName": "Reach Level 25 SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c7655f2d1f275bc77e73b85a02d921f9e29d3031.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_159", + "time_earned": 0 + }, + { + "description": "Complete any map as a SWAT on Survival Normal difficulty", + "displayName": "Normal SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b9a7646537a74042db00c7c46b58463c12331ad.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_160", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as SWAT on Hard Difficulty", + "displayName": "Hard SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a43a6bb8e914126587b1419879ff3d95b83ec6f6.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_161", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as SWAT on Suicidal Difficulty", + "displayName": "Suicidal SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af9bbfa27fa159b8ea469ee79ba525bdbcf07b6e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_162", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", + "displayName": "Hellish SWAT", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a86755764baed752a896d2c8cd524bd20e1d6c57.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_163", + "time_earned": 0 + }, + { + "description": "Reach Level 5 Survivalist", + "displayName": "Reach Level 5 Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5c730159237de25db37bbba7ac8b899ba9b92f28.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_164", + "time_earned": 0 + }, + { + "description": "Reach Level 10 Survivalist", + "displayName": "Reach Level 10 Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c87bbe270e7a60494f0d6a46a173f48e8e90f266.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_165", + "time_earned": 0 + }, + { + "description": "Reach Level 15 Survivalist", + "displayName": "Reach Level 15 Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0fc03a0b9535d3f31d8cfe3055e905e7cda85939.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_166", + "time_earned": 0 + }, + { + "description": "Reach Level 20 Survivalist", + "displayName": "Reach Level 20 Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f9526579c6b4f52621b85c5913ff8773940fed11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_167", + "time_earned": 0 + }, + { + "description": "Reach Level 25 Survivalist", + "displayName": "Reach Level 25 Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a472196ec80ad363c21e1bac0206061a8ec6e1e1.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_168", + "time_earned": 0 + }, + { + "description": "Beat Any One Map as Survivalist on Normal Difficulty", + "displayName": "Normal Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4c78a847b3842fac7ea587a603594d9a39ffc8a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_169", + "time_earned": 0 + }, + { + "description": "Complete any map as a Survivalist on Survival Hard difficulty", + "displayName": "Hard Survivalist ", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/17c50c8adff85ea28e3cbd3b7fa31d387efb3eff.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_170", + "time_earned": 0 + }, + { + "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", + "displayName": "Suicidal Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/accaa92454ffe35037f67c63c03ebb9544eec484.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_171", + "time_earned": 0 + }, + { + "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", + "displayName": "Hellish Survivalist", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a90fc7ad76f58c1278097f3a351001438c62327.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_172", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Survival Normal difficulty", + "displayName": "Surfs Up", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e1c100915ffb91be6090459fdcda997a31fe62f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_173", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Survival Hard difficulty", + "displayName": "Gnarly", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1d855a17989f39be054443c9277c90907eff1f8d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_174", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Survival Suicidal difficulty", + "displayName": "Close-out", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25a425379ed71d99787c091fa7a24e507c2eecac.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_175", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Survival Hell On Earth difficulty", + "displayName": "Blown Out", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d5f30aa2ff0b4a3e080eab4a61e202a87cf1775.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_176", + "time_earned": 0 + }, + { + "description": "Collect all the volley balls on Zed Landing", + "displayName": "ALAN!!!!!!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffad0d1970b1b8813ba164cd4465fc4de9b271eb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_177", + "time_earned": 0 + }, + { + "description": "Complete The Descent on Survival Normal difficulty", + "displayName": "How Bout Some Gas?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02f005688d599e8f655a6d41a65751031c1a4392.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_178", + "time_earned": 0 + }, + { + "description": "Complete The Descent on Survival Hard difficulty", + "displayName": "But what if we added Gas?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84848cab1b952d23328637f81e45b69aeda38ded.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_179", + "time_earned": 0 + }, + { + "description": "Complete The Descent on Survival Suicidal difficulty", + "displayName": "Let's Try Some Gas", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d6d7a2ce4b36b10b27946e972b3b7184f2226069.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_180", + "time_earned": 0 + }, + { + "description": "Complete The Descent on Survival Hell On Earth difficulty", + "displayName": "That's enough gas....", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e2ab1da79c801e23fba287c2fccc548bdbf0026.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_181", + "time_earned": 0 + }, + { + "description": "Collect all the items on The Descent", + "displayName": "Hans Off the Merchandise", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21ab02dcc7dc02c09b5e65a82fcdfa200a96a0db.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_182", + "time_earned": 0 + }, + { + "description": "Complete Nuked on Survival Normal difficulty", + "displayName": "The War Room", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2a96570f609cf5842a31691e5cc8c0a800907786.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_183", + "time_earned": 0 + }, + { + "description": "Complete Nuked on Survival Hard difficulty", + "displayName": "The Mineshaft Gap", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c28acbddf4b6bed6d2ad1ec7536b1160e3b056.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_184", + "time_earned": 0 + }, + { + "description": "Complete Nuked on Survival Suicidal difficulty", + "displayName": "Peace is Our Profession", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e759bb1400427742feb5d39e715e6c956c11987a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_185", + "time_earned": 0 + }, + { + "description": "Complete Nuked on Survival Hell On Earth difficulty", + "displayName": "How I Learned to Love the Bomb", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c42d2d9c5eb25d2c2c4a58dddd8084f470892e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_186", + "time_earned": 0 + }, + { + "description": "Collect all the items on Nuked", + "displayName": "Davy Crockett", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c16a98ee7a9a777730733ca1ec1cda2391fb89c7.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_187", + "time_earned": 0 + }, + { + "description": "Complete Tragic Kingdom on Survival Normal difficulty", + "displayName": "It's a Bloody World After All", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0803a7e5a71920b9aa9c08e71eb381a9eda6e12.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_188", + "time_earned": 0 + }, + { + "description": "Complete Tragic Kingdom on Survival Hard difficulty", + "displayName": "The Goriest Place on Earth", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e2f6339b665184291d2987a3a48a5dbfb4b54c0e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_189", + "time_earned": 0 + }, + { + "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", + "displayName": "The House the Zed Built", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/85f0612297393d567d8ff712fa324dabb0c269fb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_190", + "time_earned": 0 + }, + { + "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", + "displayName": "Where Nightmares Come True", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f68565b02007c17260805be1d5bb3c55271e1cb3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_191", + "time_earned": 0 + }, + { + "description": "Collect all the items on The Tragic Kingdom", + "displayName": "The Wonderful World of Merchandising", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/79ad35a7fe93d31661bd54825571708545e43210.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_192", + "time_earned": 0 + }, + { + "description": "Beat Nightmare on Normal", + "displayName": "I Got a Rock", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1777445a1bc01a5c39a75c7167df6359edd5f26e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_193", + "time_earned": 0 + }, + { + "description": "Beat Nightmare on Hard", + "displayName": "Yuck, Candy Corn", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fb9b4f18d7f58d43295ee571cae5c821a5f12836.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_194", + "time_earned": 0 + }, + { + "description": "Beat Nightmare on Suicidal", + "displayName": "Fun Size? What is Fun Size?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53e20884174ea4717588f5a7c324d1a02d207dae.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_195", + "time_earned": 0 + }, + { + "description": "Beat Nightmare on Hell on Earth", + "displayName": "Victory! Full Size Candy Bar!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c69b7865a24dcc827d5ea44ac166907b8f08b4ad.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_196", + "time_earned": 0 + }, + { + "description": "Collect all the items (skulls) on Nightmare", + "displayName": "Letting the Demons Out", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/874e1f46efd7b59e66485ee1b9b4b5765bcab692.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_197", + "time_earned": 0 + }, + { + "description": "Beat Krampus Lair on Normal", + "displayName": "Stocking Full of Coal", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ff769cc651d4be77250428a4b6d4e0a254015b11.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_198", + "time_earned": 0 + }, + { + "description": "Beat Krampus Lair on Hard", + "displayName": "Bundle of Switches", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84082b5ce17368ef1e6a1d9e78174866674686ba.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_199", + "time_earned": 0 + }, + { + "description": "Beat Krampus Lair on Suicidal", + "displayName": "A Whupping", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fe7e707e5ad19ef5e0dd9152a6d1b3ddeb59d883.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_200", + "time_earned": 0 + }, + { + "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", + "displayName": "Carried off to the Underworld", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c318550b2c02db9532d6051dd3af1f855cd87f5e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_201", + "time_earned": 0 + }, + { + "description": "Collect all the items (Snowglobes) on Krampus Lair", + "displayName": "A World Under Glass", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_202", + "time_earned": 0 + }, + { + "description": "Complete DieSector wave 25 on Endless Normal difficulty", + "displayName": "Training Simulation", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/510dc6da957123fce45794b85cc89075b6aa35d0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_203", + "time_earned": 0 + }, + { + "description": "Complete DieSector wave 25 on Endless Hard difficulty", + "displayName": "Test Trials", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/925db58c260bb48f62eb56ef9a5e8faf9274c905.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_204", + "time_earned": 0 + }, + { + "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", + "displayName": "Code Dead", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/222996c8e587aefda46d41c4c70b9108357ed175.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_205", + "time_earned": 0 + }, + { + "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", + "displayName": "Fatal Exception", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cf61a22148cdb35bd943ff14fb83f68c0cd8736e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_206", + "time_earned": 0 + }, + { + "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", + "displayName": "It's aD.A.R.able", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53405d791ad24a2a03b0d71c9c6f515e05fe3620.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_207", + "time_earned": 0 + }, + { + "description": "Complete Power Core on Survival Normal difficulty", + "displayName": "A Spark to Light the Way", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/877725c3b9e141295e2c52ac6f14af6f68013f04.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_208", + "time_earned": 0 + }, + { + "description": "Complete Power Core on Survival Hard difficulty", + "displayName": "Bolting through the Core", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95d39cdab7b75fca64b64c39e4671f3ff09f3871.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_209", + "time_earned": 0 + }, + { + "description": "Complete Power Core on Survival Suicidal difficulty", + "displayName": "High Voltage", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5521e83f9cf369d9f807489db0120d97a3e3002.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_210", + "time_earned": 0 + }, + { + "description": "Complete Power Core on Survival Hell On Earth difficulty", + "displayName": "I Have the Power!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca61bb09f6a26eebd4f76e5ab2804b2bdbd6540.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_211", + "time_earned": 0 + }, + { + "description": "Collect all the items (Batteries) on Power Core", + "displayName": "Surge Breaker", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2942584ef67dfc745bed2c7fcbd8f04bd0c9b11b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_212", + "time_earned": 0 + }, + { + "description": "Complete Airship on Survival Normal difficulty", + "displayName": "A Little Turbulence", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e76995587e9bf81b4beecad3b305b06f32ee35c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_213", + "time_earned": 0 + }, + { + "description": "Complete Airship on Survival Hard difficulty", + "displayName": "Flying Unfriendly Skies", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3dcc2a19350aef1f5b5079d2fa1510225bb5924f.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_214", + "time_earned": 0 + }, + { + "description": "Complete Airship on Survival Suicidal difficulty", + "displayName": "Soar, Gore, and More", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d318dee401d56bafc7ebed0eaab6e4dcfb593b00.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_215", + "time_earned": 0 + }, + { + "description": "Complete Airship on Survival Hell On Earth difficulty", + "displayName": "Mile High Dead Club", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/350d3e23eb31845a77fcef992c7fe899fd436f80.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_216", + "time_earned": 0 + }, + { + "description": "Collect all the items (Steam Cells) on Airship", + "displayName": "Powered by Steam", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b5fdc74747940179c7dc5f3ab964b1ef4175fdc0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_217", + "time_earned": 0 + }, + { + "description": "Complete Lockdown on Survival Normal difficulty", + "displayName": "Station Stabilization", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffab338f1cf3295c1efd4a01d0e0bca3def85229.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_218", + "time_earned": 0 + }, + { + "description": "Complete Lockdown on Survival Hard difficulty", + "displayName": "Fun Near the Sun", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/39205159c665ba3b80af9365b4f6e58ccac29ef2.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_219", + "time_earned": 0 + }, + { + "description": "Complete Lockdown on Survival Suicidal difficulty", + "displayName": "Space Race", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7c8cfb7f628de3b9c7a438d17311882900314c75.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_220", + "time_earned": 0 + }, + { + "description": "Complete Lockdown on Survival Hell On Earth difficulty", + "displayName": "Houston, We Don't Have a Problem", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/177825463454281e2ef5c05ecc1526ef2474c3d4.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_221", + "time_earned": 0 + }, + { + "description": "Collect all the items (Batteries) on Lockdown", + "displayName": "Shocking Discovery!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c5b893ccd87f50690b337222fe6139c931b3533c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_222", + "time_earned": 0 + }, + { + "description": "Complete Monster Ball on Survival Normal difficulty", + "displayName": "Castle Crashers", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a5f8f0ecc173daa77a844bc1ad6b91ddaf60383d.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_223", + "time_earned": 0 + }, + { + "description": "Complete Monster Ball on Survival Hard difficulty", + "displayName": "Party Hard!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/49cda67ccd22c0ebf522717bd03fad590b786389.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_224", + "time_earned": 0 + }, + { + "description": "Complete Monster Ball on Survival Suicidal difficulty", + "displayName": "Dance on the Gore Floor", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ce29727842be31de090c83871e6f5831efacfb87.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_225", + "time_earned": 0 + }, + { + "description": "Complete Monster Ball on Survival Hell on Earth difficulty", + "displayName": "Rest In Pieces", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25005dfa6da839a95b8aa3664ebb13034a228f49.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_226", + "time_earned": 0 + }, + { + "description": "Destroy 10 Glowing Skulls in Monster Ball", + "displayName": "Spooky Scary Skeletons", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d3b14b6dcab1ffaa714e2bebdff231a8972e313.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_227", + "time_earned": 0 + }, + { + "description": "Unlock the Alchemist Room in Monster Ball", + "displayName": "Death's Door", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/382680a850833e6d1b227c6b92d066ebb892ce0e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_228", + "time_earned": 0 + }, + { + "description": "Complete Santa's Workshop on Survival Normal Difficulty", + "displayName": "Cookies and Milk", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c9262e0a59ee9f4ae0b6b7f778e57aa5b84ddbb.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", + "name": "Achievement_229", + "time_earned": 0 + }, + { + "description": "Complete Santa's Workshop on Survival Hard Difficulty", + "displayName": "Slaying with Santa", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b9ef59caab40af925efab875cec9c3cfcddc8bbd.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_230", + "time_earned": 0 + }, + { + "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", + "displayName": "A Deadly Carol", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/55cebdba7cae5617c8a8664ff2361d31c98e41ac.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_231", + "time_earned": 0 + }, + { + "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", + "displayName": "You're On The Badass List", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/42cdfa0830aaaafbf52b7aa22b14e37094277526.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_232", + "time_earned": 0 + }, + { + "description": "Destroy 10 Snow Globes in Santa's Workshop", + "displayName": "Yule Shoot Your Eye Out", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_233", + "time_earned": 0 + }, + { + "description": "Complete Shopping Spree on Survival Normal Difficulty", + "displayName": "Cleanup On Aisle 3", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3a4536ce96f3535865a03aea65fd970706339058.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_234", + "time_earned": 0 + }, + { + "description": "Complete Shopping Spree on Survival Hard Difficulty", + "displayName": "Shoot One Get Two Free", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/933bc0eaa31bc8e877f08e12cf5543a40032e4d5.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_235", + "time_earned": 0 + }, + { + "description": "Complete Shopping Spree on Survival Suicidal Difficulty", + "displayName": "Savings to Die For", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c4e0289e34928cce62665fe535b886f38d8a0534.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_236", + "time_earned": 0 + }, + { + "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", + "displayName": "Red Friday", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb976a5df4b166702cf5c16ef38026f62e76ba13.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", + "name": "Achievement_237", + "time_earned": 0 + }, + { + "description": "Destroy 10 Dosh Necklaces in Shopping Spree", + "displayName": "A Special Deal", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/60d04d244713b2b9475658538261124a0da51adc.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", + "name": "Achievement_238", + "time_earned": 0 + }, + { + "description": "Complete Spillway on Survival Normal Difficulty", + "displayName": "It's All Downstream From Here", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84c45895752213f960988d909fac2317c1468d7e.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_239", + "time_earned": 0 + }, + { + "description": "Complete Spillway on Survival Hard Difficulty", + "displayName": "Zeds Be Dam", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dca6e9d3e9aff9dd05a56c3a9838e21e37d2e8cf.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_240", + "time_earned": 0 + }, + { + "description": "Complete Spillway on Survival Suicidal Difficulty", + "displayName": "Overflow Controlled", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a834f5eca65f679bb9232faa5371501addd2222.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_241", + "time_earned": 0 + }, + { + "description": "Complete Spillway on Survival Hell On Earth Difficulty", + "displayName": "Dam You're Good!", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/751f4a1ed126d232c8be5cfa6b5efa05ec103316.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_242", + "time_earned": 0 + }, + { + "description": "Destroy 10 Dosh Necklaces in Spillway", + "displayName": "Money Down the Drain", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87cc7f0c7342385b24efb2956f214c7d057f3288.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_243", + "time_earned": 0 + }, + { + "description": "Complete Steam Fortress on Objective Normal Difficulty", + "displayName": "Burning Out the Fuse", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c669333a43bc28fdda7a441d54bab8d69cb14b2c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_244", + "time_earned": 0 + }, + { + "description": "Complete Steam Fortress on Objective Hard Difficulty", + "displayName": "Touchdown Brings Me Down", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a3723df79a8f83adef085ad31bf5ce7584715cf.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_245", + "time_earned": 0 + }, + { + "description": "Complete Steam Fortress on Objective Suicidal Difficulty", + "displayName": "High as a Kite", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7197c8ba18ed6dd63deaa9ac2198e26aa199d07b.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_246", + "time_earned": 0 + }, + { + "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", + "displayName": "It's Cold as Hell", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54a004733d400ae8f350ce4fb95e8f9601462189.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_247", + "time_earned": 0 + }, + { + "description": "Destroy 10 Steam Batteries on Steam Fortress", + "displayName": "All This Science I Don't Understand", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f93605f0b8543fa506641195fa7fd6e21e6bb545.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", + "name": "Achievement_248", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Objective Normal Difficulty", + "displayName": "Droning On", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3798d728855dc6dc65e926288176ab87666dbd86.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_249", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Objective Hard Difficulty", + "displayName": "Data Deliverier ", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7933cd8f729179eb61274fffa8ac3af69368997c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_250", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Objective Suicidal Difficulty", + "displayName": "Island Isolation", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c25b0221caf5779641711eae5dbe5e915d7feef0.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_251", + "time_earned": 0 + }, + { + "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", + "displayName": "Someone Call a Chopper?", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9ccce9f949a52cf79fbc4b53f703fb4bd726d652.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_252", + "time_earned": 0 + }, + { + "description": "Complete Outpost on Objective Normal Difficulty", + "displayName": "It's Snow Good. ", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/626744b7626d76146205e4ee0545ff5b82d48536.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_253", + "time_earned": 0 + }, + { + "description": "Complete Outpost on Objective Hard Difficulty", + "displayName": "Giving the Cold Shoulder", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0d63ed438b13319e0c81a6d7b3b0fea00e28b84.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_254", + "time_earned": 0 + }, + { + "description": "Complete Outpost on Objective Suicidal Difficulty", + "displayName": "Frozen Assets", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72142caac4513322346bb51b738a099219288e9c.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_255", + "time_earned": 0 + }, + { + "description": "Complete Outpost on Objective Hell On Earth Difficulty", + "displayName": "The Snow Must Go On", + "earned": 0, + "hidden": 0, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fb3f2cd9de0a8d536b4070a2ac59d747f5e76a.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_256", + "time_earned": 0 + }, + { + "description": null, + "displayName": "Achievement_257_Name", + "earned": 0, + "hidden": 1, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_257", + "time_earned": 0 + }, + { + "description": null, + "displayName": "Achievement_258_Name", + "earned": 0, + "hidden": 1, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_258", + "time_earned": 0 + }, + { + "description": null, + "displayName": "Achievement_259_Name", + "earned": 0, + "hidden": 1, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_259", + "time_earned": 0 + }, + { + "description": null, + "displayName": "Achievement_260_Name", + "earned": 0, + "hidden": 1, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_260", + "time_earned": 0 + }, + { + "description": null, + "displayName": "Achievement_261_Name", + "earned": 0, + "hidden": 1, + "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", + "name": "Achievement_261", + "time_earned": 0 + } +] \ No newline at end of file From 21e08ed220bcbc3700b06d651e56efaca3c27ed9 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 17:42:39 +0200 Subject: [PATCH 05/48] Achievements support & inventory customization. Added achievements support. Achievements are saved like real steam, see your inventory directory.(like items, uses a .json, tool can be used to dump achievements from steam public api). You will need a public apikey. (See https://steamcommunity.com/dev) Reworked item support to split inventory items to defined items. --- dll/item_db_loader.cpp | 62 ---------- dll/item_db_loader.h | 24 ---- dll/local_storage.cpp | 75 ++++++++++- dll/local_storage.h | 21 ++-- dll/steam_client.cpp | 11 +- dll/steam_inventory.h | 191 ++++++++++++++++++---------- dll/steam_remote_storage.h | 34 ++--- dll/steam_user.h | 2 +- dll/steam_user_stats.h | 247 +++++++++++++++++++------------------ 9 files changed, 365 insertions(+), 302 deletions(-) delete mode 100644 dll/item_db_loader.cpp delete mode 100644 dll/item_db_loader.h diff --git a/dll/item_db_loader.cpp b/dll/item_db_loader.cpp deleted file mode 100644 index ee59105..0000000 --- a/dll/item_db_loader.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2019 Nemirtingas (Maxime P) - This file is part of the Goldberg Emulator - - The Goldberg Emulator is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - The Goldberg Emulator is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the Goldberg Emulator; if not, see - . */ -#include "item_db_loader.h" - -#include -#include "../json/json.hpp" - -void read_items_db(std::string items_db, std::map> *items, std::atomic_bool *is_loadedb) -{ - std::ifstream items_file(items_db); - // If there is a file and we opened it - if( items_file ) - { - items_file.seekg(0, std::ios::end); - size_t size = items_file.tellg(); - std::string buffer(size, '\0'); - items_file.seekg(0); - // Read it entirely, if the .json file gets too big, - // I should look into this and split reads into smaller parts. - items_file.read(&buffer[0], size); - items_file.close(); - - try - { - std::map> tmp; - nlohmann::json json = nlohmann::json::parse(buffer); - - for (auto& i : json.items()) - { - SteamItemDef_t key = std::stoi((*i).key()); - nlohmann::json& value = (*i).value(); - for (auto& j : value.items()) - { - tmp[key][(*j).key()] = (*j).value(); - } - } - - items->swap(tmp); - } - catch (std::exception& e) - { - PRINT_DEBUG("Error while parsing json: %s\n", e.what()); - } - } - - PRINT_DEBUG("Loaded json. Loaded %u items.\n", items->size()); - *is_loadedb = true; -} \ No newline at end of file diff --git a/dll/item_db_loader.h b/dll/item_db_loader.h deleted file mode 100644 index 89c0912..0000000 --- a/dll/item_db_loader.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2019 Nemirtingas (Maxime P) - This file is part of the Goldberg Emulator - - The Goldberg Emulator is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - The Goldberg Emulator is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the Goldberg Emulator;*/ -#ifndef __ITEM_DB_LOADER_INCLUDED__ -#define __ITEM_DB_LOADER_INCLUDED__ - -#include "base.h" // For SteamItemDef_t - -#include -void read_items_db(std::string items_db, std::map> *items, std::atomic_bool *is_loaded); - -#endif//__ITEM_DB_LOADER_INCLUDED__ \ No newline at end of file diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index d5d6d46..5b1ab8c 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -20,6 +20,7 @@ #include #include #include +#include struct File_Data { std::string name; @@ -52,6 +53,11 @@ std::string Local_Storage::get_global_settings_path() return ""; } +std::string Local_Storage::get_global_inventory_path() +{ + return ""; +} + Local_Storage::Local_Storage(std::string save_directory) { @@ -127,6 +133,16 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } +bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) +{ + return true +} + +bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) +{ + return true; +} + std::vector Local_Storage::get_filenames_path(std::string path) { return std::vector(); @@ -378,7 +394,7 @@ std::string Local_Storage::get_program_path() std::string Local_Storage::get_game_settings_path() { - return get_program_path().append(GAME_SETTINGS_FOLDER).append(PATH_SEPARATOR); + return get_program_path().append(game_settings_folder).append(PATH_SEPARATOR); } #if defined(STEAM_WIN32) @@ -508,7 +524,12 @@ std::string Local_Storage::get_path(std::string folder) std::string Local_Storage::get_global_settings_path() { - return save_directory + SETTINGS_STORAGE_FOLDER + PATH_SEPARATOR; + return save_directory + settings_storage_folder + PATH_SEPARATOR; +} + +std::string Local_Storage::get_global_inventory_path() +{ + return save_directory + inventory_storage_folder + PATH_SEPARATOR; } std::vector Local_Storage::get_filenames_path(std::string path) @@ -680,4 +701,54 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } +bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) +{ + std::string inv_path = std::move(get_global_inventory_path() + appid + file); + std::ifstream inventory_file(inv_path); + // If there is a file and we opened it + if (inventory_file) + { + inventory_file.seekg(0, std::ios::end); + size_t size = inventory_file.tellg(); + std::string buffer(size, '\0'); + inventory_file.seekg(0); + // Read it entirely, if the .json file gets too big, + // I should look into this and split reads into smaller parts. + inventory_file.read(&buffer[0], size); + inventory_file.close(); + + try { + json = std::move(nlohmann::json::parse(buffer)); + PRINT_DEBUG("Loaded inventory \"%s\". Loaded %u items.\n", inv_path.c_str(), json.size()); + return true; + } catch (std::exception& e) { + PRINT_DEBUG("Error while parsing \"%s\" inventory json: %s\n", inv_path.c_str(), e.what()); + } + } + else + { + PRINT_DEBUG("Couldn't open file \"%s\" to read inventory\n", inv_path.c_str()); + } + + return false; +} + +bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) +{ + std::string inv_path = std::move(get_global_inventory_path() + appid); + + create_directory(inv_path); + + std::ofstream inventory_file(inv_path + file, std::ios::trunc | std::ios::out); + if (inventory_file) + { + inventory_file << std::setw(2) << json; + return true; + } + + PRINT_DEBUG("Couldn't open file \"%s\" to write inventory\n", inv_path.c_str()); + + return false; +} + #endif diff --git a/dll/local_storage.h b/dll/local_storage.h index fb22db7..ef618a5 100644 --- a/dll/local_storage.h +++ b/dll/local_storage.h @@ -21,18 +21,21 @@ #ifndef LOCAL_STORAGE_INCLUDE #define LOCAL_STORAGE_INCLUDE -#define SETTINGS_STORAGE_FOLDER "settings" -#define REMOTE_STORAGE_FOLDER "remote" -#define STATS_STORAGE_FOLDER "stats" -#define USER_DATA_FOLDER "local" - -#define GAME_SETTINGS_FOLDER "steam_settings" - #include +#include "../json/json.hpp" #define MAX_FILENAME_LENGTH 300 class Local_Storage { +public: + static constexpr auto inventory_storage_folder = "inventory"; + static constexpr auto settings_storage_folder = "settings"; + static constexpr auto remote_storage_folder = "remote"; + static constexpr auto stats_storage_folder = "stats"; + static constexpr auto user_data_storage = "local"; + static constexpr auto game_settings_folder = "steam_settings"; + +private: std::string save_directory; std::string appid; public: @@ -56,9 +59,13 @@ public: bool file_delete(std::string folder, std::string file); uint64_t file_timestamp(std::string folder, std::string file); std::string get_global_settings_path(); + std::string get_global_inventory_path(); std::string get_path(std::string folder); bool update_save_filenames(std::string folder); + + bool load_inventory_file(nlohmann::json &json, std::string const&file); + bool write_inventory_file(nlohmann::json const& json, std::string const&file); }; #endif diff --git a/dll/steam_client.cpp b/dll/steam_client.cpp index ba33cf5..8ae55e7 100644 --- a/dll/steam_client.cpp +++ b/dll/steam_client.cpp @@ -162,7 +162,7 @@ Steam_Client::Steam_Client() uint64 steam_id = 0; bool generate_new = false; //try to load steam id from game specific settings folder first - if (local_storage->get_data(SETTINGS_STORAGE_FOLDER, "user_steam_id.txt", array_steam_id, sizeof(array_steam_id) - 1) > 0) { + if (local_storage->get_data(Local_Storage::settings_storage_folder, "user_steam_id.txt", array_steam_id, sizeof(array_steam_id) - 1) > 0) { user_id = CSteamID((uint64)std::atoll(array_steam_id)); if (!user_id.IsValid()) { generate_new = true; @@ -335,9 +335,6 @@ Steam_Client::Steam_Client() } } - std::string achievements_db_file_path = (Local_Storage::get_game_settings_path() + "achievements.json"); - std::string items_db_file_path = (Local_Storage::get_game_settings_path() + "items.json"); - network = new Networking(settings_server->get_local_steam_id(), appid, port, &custom_broadcasts); callback_results_client = new SteamCallResults(); @@ -353,7 +350,7 @@ Steam_Client::Steam_Client() steam_utils = new Steam_Utils(settings_client, callback_results_client); steam_matchmaking = new Steam_Matchmaking(settings_client, network, callback_results_client, callbacks_client, run_every_runcb); steam_matchmaking_servers = new Steam_Matchmaking_Servers(settings_client, network); - steam_user_stats = new Steam_User_Stats(settings_client, local_storage, callback_results_client, callbacks_client, achievements_db_file_path); + steam_user_stats = new Steam_User_Stats(settings_client, local_storage, callback_results_client, callbacks_client); steam_apps = new Steam_Apps(settings_client, callback_results_client); steam_networking = new Steam_Networking(settings_client, network, callbacks_client, run_every_runcb); steam_remote_storage = new Steam_Remote_Storage(settings_client, local_storage, callback_results_client); @@ -365,7 +362,7 @@ Steam_Client::Steam_Client() steam_music = new Steam_Music(callbacks_client); steam_musicremote = new Steam_MusicRemote(); steam_HTMLsurface = new Steam_HTMLsurface(settings_client, network, callback_results_client, callbacks_client); - steam_inventory = new Steam_Inventory(settings_client, callback_results_client, callbacks_client, run_every_runcb, items_db_file_path); + steam_inventory = new Steam_Inventory(settings_client, callback_results_client, callbacks_client, run_every_runcb, local_storage); steam_video = new Steam_Video(); steam_parental = new Steam_Parental(); steam_networking_sockets = new Steam_Networking_Sockets(settings_client, network, callback_results_client, callbacks_client, run_every_runcb); @@ -383,7 +380,7 @@ Steam_Client::Steam_Client() steam_gameserverstats = new Steam_GameServerStats(settings_server, network, callback_results_server, callbacks_server); steam_gameserver_networking = new Steam_Networking(settings_server, network, callbacks_server, run_every_runcb); steam_gameserver_http = new Steam_HTTP(settings_server, network, callback_results_server, callbacks_server); - steam_gameserver_inventory = new Steam_Inventory(settings_server, callback_results_server, callbacks_server, run_every_runcb, items_db_file_path); + steam_gameserver_inventory = new Steam_Inventory(settings_server, callback_results_server, callbacks_server, run_every_runcb, local_storage); steam_gameserver_ugc = new Steam_UGC(settings_server, callback_results_server, callbacks_server); steam_gameserver_apps = new Steam_Apps(settings_server, callback_results_server); steam_gameserver_networking_sockets = new Steam_Networking_Sockets(settings_server, network, callback_results_server, callbacks_server, run_every_runcb); diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index 2eec7fb..8518230 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -15,8 +15,8 @@ License along with the Goldberg Emulator; if not, see . */ -#include "item_db_loader.h" -#include +#include "base.h" // For SteamItemDef_t +#include "../json/json.hpp" struct Steam_Inventory_Requests { double timeout = 0.1; @@ -42,22 +42,24 @@ class Steam_Inventory : public ISteamInventory002, public ISteamInventory { +public: + static constexpr auto items_user_file = "items.json"; + +private: class Settings *settings; class SteamCallResults *callback_results; class SteamCallBacks *callbacks; class RunEveryRunCB *run_every_runcb; + class Local_Storage* local_storage; std::vector inventory_requests; - std::map> items; - // Like typedefs - using item_iterator = std::map>::iterator; - using attr_iterator = std::map::iterator; + nlohmann::json defined_items; + nlohmann::json user_items; - std::atomic_bool items_loaded; - std::string items_db_file; - std::once_flag load_items_flag; + bool inventory_loaded; bool call_definition_update; + bool call_inventory_update; bool definition_update_called; bool full_update_called; @@ -89,6 +91,40 @@ struct Steam_Inventory_Requests *get_inventory_result(SteamInventoryResult_t res return &(*request); } +void read_items_db() +{ + std::string items_db_path = Local_Storage::get_game_settings_path() + items_user_file; + PRINT_DEBUG("Items file path: %s\n", items_db_path.c_str()); + std::ifstream inventory_file(items_db_path); + // If there is a file and we opened it + if (inventory_file) + { + inventory_file.seekg(0, std::ios::end); + size_t size = inventory_file.tellg(); + std::string buffer(size, '\0'); + inventory_file.seekg(0); + // Read it entirely, if the .json file gets too big, + // I should look into this and split reads into smaller parts. + inventory_file.read(&buffer[0], size); + inventory_file.close(); + + try + { + defined_items = std::move(nlohmann::json::parse(buffer)); + PRINT_DEBUG("Loaded inventory. Loaded %u items.\n", defined_items.size()); + } + catch (std::exception& e) + { + PRINT_DEBUG("Error while parsing inventory json: %s\n", e.what()); + } + } +} + +void read_inventory_db() +{ + local_storage->load_inventory_file(user_items, items_user_file); +} + public: static void run_every_runcb_cb(void *object) @@ -99,21 +135,21 @@ static void run_every_runcb_cb(void *object) obj->RunCallbacks(); } -Steam_Inventory(class Settings *settings, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb, std::string items_db_file_path) +Steam_Inventory(class Settings *settings, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb, class Local_Storage *local_storage): + settings(settings), + callback_results(callback_results), + callbacks(callbacks), + run_every_runcb(run_every_runcb), + local_storage(local_storage), + defined_items(nlohmann::json::object()), + user_items(nlohmann::json::object()), + inventory_loaded(false), + call_definition_update(false), + call_inventory_update(false), + definition_update_called(false), + full_update_called(false) { - items_db_file = items_db_file_path; - PRINT_DEBUG("Items file path: %s\n", items_db_file.c_str()); - items_loaded = false; - - this->settings = settings; - this->callbacks = callbacks; - this->callback_results = callback_results; - this->run_every_runcb = run_every_runcb; this->run_every_runcb->add(&Steam_Inventory::run_every_runcb_cb, this); - - call_definition_update = false; - definition_update_called = false; - full_update_called = false; } ~Steam_Inventory() @@ -160,6 +196,7 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, struct Steam_Inventory_Requests *request = get_inventory_result(resultHandle); if (!request) return false; if (!request->result_done()) return false; + if (!inventory_loaded) return false; if (pOutItemsArray != nullptr) { @@ -167,21 +204,35 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, if (request->full_query) { // We end if we reached the end of items or the end of buffer - for( auto i = items.begin(); i != items.end() && max_items; ++i, --max_items ) + for( auto i = user_items.begin(); i != user_items.end() && max_items; ++i, --max_items ) { - pOutItemsArray->m_iDefinition = i->first; - pOutItemsArray->m_itemId = i->first; - pOutItemsArray->m_unQuantity = 1; + pOutItemsArray->m_iDefinition = std::stoi(i.key()); + pOutItemsArray->m_itemId = pOutItemsArray->m_iDefinition; + try + { + pOutItemsArray->m_unQuantity = i.value().get(); + } + catch (...) + { + pOutItemsArray->m_unQuantity = 0; + } pOutItemsArray->m_unFlags = k_ESteamItemNoTrade; ++pOutItemsArray; } - *punOutItemsArraySize = std::min(*punOutItemsArraySize, static_cast(items.size())); + *punOutItemsArraySize = std::min(*punOutItemsArraySize, static_cast(user_items.size())); } else { for (auto &itemid : request->instance_ids) { if (!max_items) break; pOutItemsArray->m_iDefinition = itemid; pOutItemsArray->m_itemId = itemid; - pOutItemsArray->m_unQuantity = 1; + try + { + pOutItemsArray->m_unQuantity = user_items[itemid].get(); + } + catch (...) + { + pOutItemsArray->m_unQuantity = 0; + } pOutItemsArray->m_unFlags = k_ESteamItemNoTrade; ++pOutItemsArray; --max_items; @@ -190,7 +241,7 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, } else if (punOutItemsArraySize != nullptr) { - *punOutItemsArraySize = items.size(); + *punOutItemsArraySize = user_items.size(); } PRINT_DEBUG("GetResultItems good\n"); @@ -278,7 +329,7 @@ bool GetAllItems( SteamInventoryResult_t *pResultHandle ) std::lock_guard lock(global_mutex); struct Steam_Inventory_Requests* request = new_inventory_result(); - if (!definition_update_called) call_definition_update = true; + call_inventory_update = true; if (pResultHandle != nullptr) *pResultHandle = request->inventory_result; @@ -302,6 +353,7 @@ bool GetItemsByID( SteamInventoryResult_t *pResultHandle, STEAM_ARRAY_COUNT( unC std::lock_guard lock(global_mutex); if (pResultHandle) { struct Steam_Inventory_Requests *request = new_inventory_result(false, pInstanceIDs, unCountInstanceIDs); + //call_inventory_update = true; *pResultHandle = request->inventory_result; return true; } @@ -559,15 +611,15 @@ bool GetItemDefinitionIDs( if (pItemDefIDs == nullptr) { - *punItemDefIDsArraySize = items.size(); + *punItemDefIDsArraySize = defined_items.size(); return true; } - if (*punItemDefIDsArraySize < items.size()) + if (*punItemDefIDsArraySize < defined_items.size()) return false; - for (auto& i : items) - *pItemDefIDs++ = i.first; + for (auto i = defined_items.begin(); i != defined_items.end(); ++i) + *pItemDefIDs++ = std::stoi(i.key()); return true; } @@ -588,25 +640,38 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope PRINT_DEBUG("GetItemDefinitionProperty %i %s\n", iDefinition, pchPropertyName); std::lock_guard lock(global_mutex); - item_iterator item; - if ((item = items.find(iDefinition)) != items.end()) + auto item = defined_items.find(std::to_string(iDefinition)); + if (item != defined_items.end()) { - attr_iterator attr; if (pchPropertyName != nullptr) { // Should I check for punValueBufferSizeOut == nullptr ? // Try to get the property - if ((attr = item->second.find(pchPropertyName)) != items[iDefinition].end()) + auto attr = item.value().find(pchPropertyName); + if (attr != item.value().end()) { - std::string const& val = attr->second; + std::string val; + try + { + val = attr.value().get(); + } + catch (...) + { + pchPropertyName = ""; + *punValueBufferSizeOut = 0; + PRINT_DEBUG("Error, item: %d, attr: %s is not a string!", iDefinition, pchPropertyName); + return true; + } if (pchValueBuffer != nullptr) { // copy what we can strncpy(pchValueBuffer, val.c_str(), *punValueBufferSizeOut); } - - // Set punValueBufferSizeOut to the property size - *punValueBufferSizeOut = std::min(static_cast(val.length() + 1), *punValueBufferSizeOut); + else + { + // Set punValueBufferSizeOut to the property size + *punValueBufferSizeOut = val.length() + 1; + } if (pchValueBuffer != nullptr) { @@ -628,8 +693,8 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope { // Should I check for punValueBufferSizeOut == nullptr ? *punValueBufferSizeOut = 0; - for (auto& i : item->second) - *punValueBufferSizeOut += i.first.length() + 1; // Size of key + comma, and the last is not a comma but null char + for (auto i = item.value().begin(); i != item.value().end(); ++i) + *punValueBufferSizeOut += i.key().length() + 1; // Size of key + comma, and the last is not a comma but null char } else { @@ -637,16 +702,16 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope uint32_t len = *punValueBufferSizeOut-1; *punValueBufferSizeOut = 0; memset(pchValueBuffer, 0, len); - for( auto i = item->second.begin(); i != item->second.end() && len > 0; ++i ) + for( auto i = item.value().begin(); i != item.value().end() && len > 0; ++i ) { - strncat(pchValueBuffer, i->first.c_str(), len); + strncat(pchValueBuffer, i.key().c_str(), len); // Count how many chars we copied // Either the string length or the buffer size if its too small - uint32 x = std::min(len, static_cast(i->first.length())); + uint32 x = std::min(len, static_cast(i.key().length())); *punValueBufferSizeOut += x; len -= x; - if (len && std::distance(i, item->second.end()) != 1) // If this is not the last item, add a comma + if (len && std::distance(i, item.value().end()) != 1) // If this is not the last item, add a comma strncat(pchValueBuffer, ",", len--); // Always add 1, its a comma or the null terminator @@ -781,24 +846,26 @@ bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventory void RunCallbacks() { - if (call_definition_update || inventory_requests.size()) { - std::call_once(load_items_flag, [&]() { - std::thread items_load_thread(read_items_db, items_db_file, &items, &items_loaded); - items_load_thread.detach(); - }); + if (call_definition_update) { + read_items_db(); + definition_update_called = true; + + SteamInventoryDefinitionUpdate_t data = {}; + callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); + call_definition_update = false; } - if (items_loaded) { - if (call_definition_update) { - SteamInventoryDefinitionUpdate_t data = {}; - callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); - call_definition_update = false; - definition_update_called = true; - } + if (call_inventory_update) { + read_inventory_db(); + inventory_loaded = true; + call_inventory_update = false; + } + + if (definition_update_called && inventory_loaded) + { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); - - for (auto & r : inventory_requests) { + for (auto& r : inventory_requests) { if (!r.done && std::chrono::duration_cast>(now - r.time_created).count() > r.timeout) { if (r.full_query) { if (!full_update_called) { diff --git a/dll/steam_remote_storage.h b/dll/steam_remote_storage.h index d0c7646..5a95d2a 100644 --- a/dll/steam_remote_storage.h +++ b/dll/steam_remote_storage.h @@ -69,7 +69,7 @@ Steam_Remote_Storage(class Settings *settings, Local_Storage *local_storage, cla this->local_storage = local_storage; this->callback_results = callback_results; steam_cloud_enabled = true; - local_storage->update_save_filenames(REMOTE_STORAGE_FOLDER); + local_storage->update_save_filenames(Local_Storage::remote_storage_folder); } // NOTE @@ -84,7 +84,7 @@ bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) { PRINT_DEBUG("Steam_Remote_Storage::FileWrite %s %u\n", pchFile, cubData); std::lock_guard lock(global_mutex); - int data_stored = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData); + int data_stored = local_storage->store_data(Local_Storage::remote_storage_folder, pchFile, (char* )pvData, cubData); PRINT_DEBUG("Steam_Remote_Storage::Stored %i, %u\n", data_stored, data_stored == cubData); return data_stored == cubData; } @@ -93,7 +93,7 @@ int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) { PRINT_DEBUG("Steam_Remote_Storage::FileRead %s %i\n", pchFile, cubDataToRead); std::lock_guard lock(global_mutex); - int read_data = local_storage->get_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubDataToRead); + int read_data = local_storage->get_data(Local_Storage::remote_storage_folder, pchFile, (char* )pvData, cubDataToRead); if (read_data < 0) read_data = 0; PRINT_DEBUG("Read %i\n", read_data); return read_data; @@ -104,7 +104,7 @@ SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 c { PRINT_DEBUG("Steam_Remote_Storage::FileWriteAsync\n"); std::lock_guard lock(global_mutex); - bool success = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData) == cubData; + bool success = local_storage->store_data(Local_Storage::remote_storage_folder, pchFile, (char* )pvData, cubData) == cubData; RemoteStorageFileWriteAsyncComplete_t data; data.m_eResult = k_EResultOK; @@ -118,7 +118,7 @@ SteamAPICall_t FileReadAsync( const char *pchFile, uint32 nOffset, uint32 cubToR PRINT_DEBUG("Steam_Remote_Storage::FileReadAsync\n"); std::lock_guard lock(global_mutex); - unsigned int size = local_storage->file_size(REMOTE_STORAGE_FOLDER, pchFile); + unsigned int size = local_storage->file_size(Local_Storage::remote_storage_folder, pchFile); RemoteStorageFileReadAsyncComplete_t data; if (size <= nOffset) { @@ -153,7 +153,7 @@ bool FileReadAsyncComplete( SteamAPICall_t hReadCall, void *pvBuffer, uint32 cub return false; char *temp = new char[a_read->size]; - int read_data = local_storage->get_data(REMOTE_STORAGE_FOLDER, a_read->file_name, (char* )temp, a_read->size); + int read_data = local_storage->get_data(Local_Storage::remote_storage_folder, a_read->file_name, (char* )temp, a_read->size); if (read_data < a_read->to_read + a_read->offset) { delete[] temp; return false; @@ -175,7 +175,7 @@ bool FileForget( const char *pchFile ) bool FileDelete( const char *pchFile ) { PRINT_DEBUG("Steam_Remote_Storage::FileDelete\n"); - return local_storage->file_delete(REMOTE_STORAGE_FOLDER, pchFile); + return local_storage->file_delete(Local_Storage::remote_storage_folder, pchFile); } STEAM_CALL_RESULT( RemoteStorageFileShareResult_t ) @@ -184,7 +184,7 @@ SteamAPICall_t FileShare( const char *pchFile ) PRINT_DEBUG("Steam_Remote_Storage::FileShare\n"); std::lock_guard lock(global_mutex); RemoteStorageFileShareResult_t data = {}; - if (local_storage->file_exists(REMOTE_STORAGE_FOLDER, pchFile)) { + if (local_storage->file_exists(Local_Storage::remote_storage_folder, pchFile)) { data.m_eResult = k_EResultOK; data.m_hFile = generate_steam_api_call_id(); strncpy(data.m_rgchFilename, pchFile, sizeof(data.m_rgchFilename) - 1); @@ -237,7 +237,7 @@ bool FileWriteStreamClose( UGCFileWriteStreamHandle_t writeHandle ) if (stream_writes.end() == request) return false; - local_storage->store_data(REMOTE_STORAGE_FOLDER, request->file_name, request->file_data.data(), request->file_data.size()); + local_storage->store_data(Local_Storage::remote_storage_folder, request->file_name, request->file_data.data(), request->file_data.size()); stream_writes.erase(request); return true; } @@ -258,25 +258,25 @@ bool FileWriteStreamCancel( UGCFileWriteStreamHandle_t writeHandle ) bool FileExists( const char *pchFile ) { PRINT_DEBUG("Steam_Remote_Storage::FileExists %s\n", pchFile); - return local_storage->file_exists(REMOTE_STORAGE_FOLDER, pchFile); + return local_storage->file_exists(Local_Storage::remote_storage_folder, pchFile); } bool FilePersisted( const char *pchFile ) { PRINT_DEBUG("Steam_Remote_Storage::FilePersisted\n"); - return local_storage->file_exists(REMOTE_STORAGE_FOLDER, pchFile); + return local_storage->file_exists(Local_Storage::remote_storage_folder, pchFile); } int32 GetFileSize( const char *pchFile ) { PRINT_DEBUG("Steam_Remote_Storage::GetFileSize %s\n", pchFile); - return local_storage->file_size(REMOTE_STORAGE_FOLDER, pchFile); + return local_storage->file_size(Local_Storage::remote_storage_folder, pchFile); } int64 GetFileTimestamp( const char *pchFile ) { PRINT_DEBUG("Steam_Remote_Storage::GetFileTimestamp\n"); - return local_storage->file_timestamp(REMOTE_STORAGE_FOLDER, pchFile); + return local_storage->file_timestamp(Local_Storage::remote_storage_folder, pchFile); } ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) @@ -290,7 +290,7 @@ ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) int32 GetFileCount() { PRINT_DEBUG("Steam_Remote_Storage::GetFileCount\n"); - int32 num = local_storage->count_files(REMOTE_STORAGE_FOLDER); + int32 num = local_storage->count_files(Local_Storage::remote_storage_folder); PRINT_DEBUG("Steam_Remote_Storage::File count: %i\n", num); return num; } @@ -299,7 +299,7 @@ const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) { PRINT_DEBUG("Steam_Remote_Storage::GetFileNameAndSize %i\n", iFile); static char output_filename[MAX_FILENAME_LENGTH]; - if (local_storage->iterate_file(REMOTE_STORAGE_FOLDER, iFile, output_filename, pnFileSizeInBytes)) { + if (local_storage->iterate_file(Local_Storage::remote_storage_folder, iFile, output_filename, pnFileSizeInBytes)) { PRINT_DEBUG("Steam_Remote_Storage::Name: |%s|, size: %i\n", output_filename, pnFileSizeInBytes ? *pnFileSizeInBytes : 0); return output_filename; } else { @@ -372,7 +372,7 @@ SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 unPriority ) data.m_eResult = k_EResultOK; data.m_hFile = hContent; data.m_nAppID = settings->get_local_game_id().AppID(); - data.m_nSizeInBytes = local_storage->file_size(REMOTE_STORAGE_FOLDER, shared_files[hContent]); + data.m_nSizeInBytes = local_storage->file_size(Local_Storage::remote_storage_folder, shared_files[hContent]); shared_files[hContent].copy(data.m_pchFileName, sizeof(data.m_pchFileName) - 1); data.m_ulSteamIDOwner = settings->get_local_steam_id().ConvertToUint64(); downloaded_files[hContent].file = shared_files[hContent]; @@ -426,7 +426,7 @@ int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 c } Downloaded_File f = downloaded_files[hContent]; - int read_data = local_storage->get_data(REMOTE_STORAGE_FOLDER, f.file, (char* )pvData, cubDataToRead, cOffset); + int read_data = local_storage->get_data(Local_Storage::remote_storage_folder, f.file, (char* )pvData, cubDataToRead, cOffset); if (eAction == k_EUGCRead_Close || (eAction == k_EUGCRead_ContinueReadingUntilFinished && (read_data < cubDataToRead || (cOffset + cubDataToRead) >= f.total_size))) { downloaded_files.erase(hContent); diff --git a/dll/steam_user.h b/dll/steam_user.h index a49c65c..8e2d35c 100644 --- a/dll/steam_user.h +++ b/dll/steam_user.h @@ -149,7 +149,7 @@ bool GetUserDataFolder( char *pchBuffer, int cubBuffer ) PRINT_DEBUG("GetUserDataFolder\n"); if (!cubBuffer) return false; - std::string user_data = local_storage->get_path(USER_DATA_FOLDER); + std::string user_data = local_storage->get_path(Local_Storage::user_data_storage); strncpy(pchBuffer, user_data.c_str(), cubBuffer - 1); pchBuffer[cubBuffer - 1] = 0; return true; diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index 57bb57a..4b578bb 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -38,14 +38,19 @@ public ISteamUserStats009, public ISteamUserStats010, public ISteamUserStats { +public: + static constexpr auto achievements_user_file = "achievements.json"; + +private: + Local_Storage *local_storage; Settings *settings; SteamCallResults *callback_results; class SteamCallBacks *callbacks; std::vector leaderboards; - std::string db_file_path; - nlohmann::json achievements; + nlohmann::json defined_achievements; + nlohmann::json user_achievements; unsigned int find_leaderboard(std::string name) { @@ -58,9 +63,10 @@ unsigned int find_leaderboard(std::string name) return 0; } -void load_achievements() +void load_achievements_db() { - std::ifstream achs_file(db_file_path); + std::string file_path = Local_Storage::get_game_settings_path() + achievements_user_file; + std::ifstream achs_file(file_path); if (achs_file) { @@ -73,26 +79,34 @@ void load_achievements() achs_file.read(&buffer[0], size); achs_file.close(); - try - { - achievements = nlohmann::json::parse(buffer); - } - catch (std::exception &e) - { - PRINT_DEBUG("(Achievements): Error while parsing json: %s\n", e.what()); + try { + defined_achievements = std::move(nlohmann::json::parse(buffer)); + } catch (std::exception &e) { + PRINT_DEBUG("Error while parsing json: \"%s\" : %s\n", file_path.c_str(), e.what()); } } + else + { + PRINT_DEBUG("Couldn't open file \"%s\" to read achievements definition\n", file_path.c_str()); + } +} + +void load_achievements() +{ + local_storage->load_inventory_file(user_achievements, achievements_user_file); } public: -Steam_User_Stats(Settings *settings, Local_Storage *local_storage, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, std::string const&achievements_db_file_path): +Steam_User_Stats(Settings *settings, Local_Storage *local_storage, class SteamCallResults *callback_results, class SteamCallBacks *callbacks): settings(settings), local_storage(local_storage), callback_results(callback_results), callbacks(callbacks), - db_file_path(achievements_db_file_path) + defined_achievements(nlohmann::json::object()), + user_achievements(nlohmann::json::object()) { - load_achievements(); + load_achievements_db(); // achievements db + load_achievements(); // achievements per user } // Ask the server to send down this user's data and achievements for this game @@ -118,7 +132,7 @@ bool GetStat( const char *pchName, int32 *pData ) if (!pchName || !pData) return false; std::lock_guard lock(global_mutex); - int read_data = local_storage->get_data(STATS_STORAGE_FOLDER, pchName, (char* )pData, sizeof(*pData)); + int read_data = local_storage->get_data(Local_Storage::stats_storage_folder, pchName, (char* )pData, sizeof(*pData)); if (read_data == sizeof(int32)) return true; @@ -131,7 +145,7 @@ bool GetStat( const char *pchName, float *pData ) if (!pchName || !pData) return false; std::lock_guard lock(global_mutex); - int read_data = local_storage->get_data(STATS_STORAGE_FOLDER, pchName, (char* )pData, sizeof(*pData)); + int read_data = local_storage->get_data(Local_Storage::stats_storage_folder, pchName, (char* )pData, sizeof(*pData)); if (read_data == sizeof(int32)) return true; @@ -146,7 +160,7 @@ bool SetStat( const char *pchName, int32 nData ) if (!pchName) return false; std::lock_guard lock(global_mutex); - return local_storage->store_data(STATS_STORAGE_FOLDER, pchName, (char* )&nData, sizeof(nData)) == sizeof(nData); + return local_storage->store_data(Local_Storage::stats_storage_folder, pchName, (char* )&nData, sizeof(nData)) == sizeof(nData); } bool SetStat( const char *pchName, float fData ) @@ -155,7 +169,7 @@ bool SetStat( const char *pchName, float fData ) if (!pchName) return false; std::lock_guard lock(global_mutex); - return local_storage->store_data(STATS_STORAGE_FOLDER, pchName, (char* )&fData, sizeof(fData)) == sizeof(fData); + return local_storage->store_data(Local_Storage::stats_storage_folder, pchName, (char* )&fData, sizeof(fData)) == sizeof(fData); } bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) @@ -164,7 +178,7 @@ bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dS std::lock_guard lock(global_mutex); char data[sizeof(float) + sizeof(float) + sizeof(double)]; - int read_data = local_storage->get_data(STATS_STORAGE_FOLDER, pchName, (char* )data, sizeof(*data)); + int read_data = local_storage->get_data(Local_Storage::stats_storage_folder, pchName, (char* )data, sizeof(*data)); float oldcount = 0; double oldsessionlength = 0; if (read_data == sizeof(data)) { @@ -180,30 +194,28 @@ bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dS memcpy(data + sizeof(float), &oldcount, sizeof(oldcount)); memcpy(data + sizeof(float) * 2, &oldsessionlength, sizeof(oldsessionlength)); - return local_storage->store_data(STATS_STORAGE_FOLDER, pchName, data, sizeof(data)) == sizeof(data); + return local_storage->store_data(Local_Storage::stats_storage_folder, pchName, data, sizeof(data)) == sizeof(data); } // Achievement flag accessors bool GetAchievement( const char *pchName, bool *pbAchieved ) { - //TODO: these achievement functions need to load a list of achievements from somewhere, return false so that kf2 doesn't loop endlessly PRINT_DEBUG("GetAchievement %s\n", pchName); - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName]( nlohmann::json &item ) { - return static_cast(item["name"]) == pchName; + if (pchName == nullptr) return false; + + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName]( nlohmann::json &item ) { + return item["name"].get() == pchName; }); - if (it != achievements.end()) - { - *pbAchieved = it.value()["earned"]; + auto ach = user_achievements.find(pchName); + if (it != defined_achievements.end() && ach != user_achievements.end()) { + if(pbAchieved != nullptr) *pbAchieved = (*ach)["earned"]; return true; } - } - catch (...) - { + } catch (...) {} - } + if (pbAchieved != nullptr)* pbAchieved = false; return false; } @@ -211,21 +223,18 @@ bool GetAchievement( const char *pchName, bool *pbAchieved ) bool SetAchievement( const char *pchName ) { PRINT_DEBUG("SetAchievement %s\n", pchName); - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { - return static_cast(item["name"]) == pchName; + if (pchName == nullptr) return false; + + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { + return item["name"].get() == pchName; }); - if (it != achievements.end()) - { - it.value()["earned"] = 1; + if (it != defined_achievements.end()) { + user_achievements[pchName]["earned"] = true; + user_achievements[pchName]["earned_time"] = static_cast(std::time(nullptr)); return true; } - } - catch (...) - { - - } + } catch (...) {} return false; } @@ -233,20 +242,18 @@ bool SetAchievement( const char *pchName ) bool ClearAchievement( const char *pchName ) { PRINT_DEBUG("ClearAchievement %s\n", pchName); - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + if (pchName == nullptr) return false; + + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; - }); - if (it != achievements.end()) - { - it.value()["earned"] = 0; + }); + if (it != defined_achievements.end()) { + user_achievements[pchName]["earned"] = false; + user_achievements[pchName]["earned_time"] = static_cast(0); return true; } - } - catch (...) - { - } + } catch (...) {} return false; } @@ -258,26 +265,22 @@ bool ClearAchievement( const char *pchName ) bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) { PRINT_DEBUG("GetAchievementAndUnlockTime\n"); - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + if (pchName == nullptr) return false; + + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; - }); - if (it != achievements.end()) - { - *pbAchieved = it.value()["earned"].get(); - *punUnlockTime = std::time(NULL); - //*punUnlockTime = it.value()["time_earned"].get(); + }); + auto ach = user_achievements.find(pchName); + if (it != defined_achievements.end() && ach != user_achievements.end()) { + if(pbAchieved != nullptr) *pbAchieved = (*ach)["earned"]; + if(punUnlockTime != nullptr) *punUnlockTime = (*ach)["earned_time"]; return true; } - } - catch (...) - { + } catch (...) {} - } - - *pbAchieved = false; - *punUnlockTime = 0; + if(pbAchieved != nullptr) *pbAchieved = false; + if(punUnlockTime != nullptr) *punUnlockTime = 0; return true; } @@ -294,11 +297,7 @@ bool StoreStats() PRINT_DEBUG("StoreStats\n"); std::lock_guard lock(global_mutex); - std::ofstream achiev_file(db_file_path, std::ios::trunc | std::ios::out); - if (achiev_file) - { - achiev_file << std::setw(2) << achievements; - } + local_storage->write_inventory_file(user_achievements, achievements_user_file); UserStatsStored_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); @@ -317,6 +316,8 @@ bool StoreStats() int GetAchievementIcon( const char *pchName ) { PRINT_DEBUG("GetAchievementIcon\n"); + if (pchName == nullptr) return 0; + return 0; } @@ -327,56 +328,40 @@ int GetAchievementIcon( const char *pchName ) const char * GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) { PRINT_DEBUG("GetAchievementDisplayAttribute %s %s\n", pchName, pchKey); + if (pchName == nullptr) return ""; + if (pchKey == nullptr) return ""; if (strcmp (pchKey, "name") == 0) { - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; - }); - if (it != achievements.end()) - { + }); + if (it != defined_achievements.end()) { return it.value()["displayName"].get().c_str(); } - } - catch (...) - { - - } + } catch (...) {} } if (strcmp (pchKey, "desc") == 0) { - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; - }); - if (it != achievements.end()) - { + }); + if (it != defined_achievements.end()) { return it.value()["description"].get().c_str(); } - } - catch (...) - { - - } + } catch (...) {} } if (strcmp (pchKey, "hidden") == 0) { - try - { - auto it = std::find_if(achievements.begin(), achievements.end(), [pchName](nlohmann::json& item) { + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; - }); - if (it != achievements.end()) - { - return (it.value()["hidden"].get() ? "1" : "0"); + }); + if (it != defined_achievements.end()) { + return it.value()["description"].get().c_str(); } - } - catch (...) - { - - } + } catch (...) {} } return ""; @@ -388,6 +373,8 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) { PRINT_DEBUG("IndicateAchievementProgress\n"); + if (pchName == nullptr) return false; + } @@ -396,21 +383,16 @@ bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint uint32 GetNumAchievements() { PRINT_DEBUG("GetNumAchievements\n"); - return achievements.size(); + return defined_achievements.size(); } // Get achievement name iAchievement in [0,GetNumAchievements) const char * GetAchievementName( uint32 iAchievement ) { PRINT_DEBUG("GetAchievementName\n"); - try - { - return static_cast(achievements[iAchievement]["name"]).c_str(); - } - catch (...) - { - - } + try { + return defined_achievements[iAchievement]["name"].get().c_str(); + } catch (...) {} return ""; } @@ -428,7 +410,10 @@ SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) std::lock_guard lock(global_mutex); // Enable this to allow hot reload achievements status - //load_achievements(); + //if (steamIDUser == settings->get_local_steam_id()) { + // load_achievements(); + //} + UserStatsReceived_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); @@ -442,6 +427,8 @@ SteamAPICall_t RequestUserStats( CSteamID steamIDUser ) bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) { PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64()); + if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); if (steamIDUser == settings->get_local_steam_id()) { @@ -456,6 +443,8 @@ bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) { PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64()); + if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); if (steamIDUser == settings->get_local_steam_id()) { @@ -470,6 +459,12 @@ bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) { PRINT_DEBUG("GetUserAchievement %s\n", pchName); + if (pchName == nullptr) return false; + + if (steamIDUser == settings->get_local_steam_id()) { + return GetAchievement(pchName, pbAchieved); + } + return false; } @@ -477,6 +472,11 @@ bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchi bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) { PRINT_DEBUG("GetUserAchievementAndUnlockTime %s\n", pchName); + if (pchName == nullptr) return false; + + if (steamIDUser == settings->get_local_steam_id()) { + return GetAchievementAndUnlockTime(pchName, pbAchieved, punUnlockTime); + } return false; } @@ -486,6 +486,13 @@ bool ResetAllStats( bool bAchievementsToo ) { PRINT_DEBUG("ResetAllStats\n"); //TODO + if (bAchievementsToo) { + std::for_each(user_achievements.begin(), user_achievements.end(), [](nlohmann::json& v) { + v["earned"] = false; + v["earned_time"] = 0; + }); + } + return true; } From abb26d402fbb8ce349bf4ec0d2bfb53758c0f06d Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 18:10:56 +0200 Subject: [PATCH 06/48] Fix --- dll/local_storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index 5b1ab8c..08f4465 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -135,7 +135,7 @@ bool Local_Storage::update_save_filenames(std::string folder) bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) { - return true + return true; } bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) From 751e78057983992f42c58fc8841b64ddc9110065 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 22:21:27 +0000 Subject: [PATCH 07/48] Delete build_curl.sh --- build_curl.sh | 49 ------------------------------------------------- 1 file changed, 49 deletions(-) delete mode 100755 build_curl.sh diff --git a/build_curl.sh b/build_curl.sh deleted file mode 100755 index 4fb9d47..0000000 --- a/build_curl.sh +++ /dev/null @@ -1,49 +0,0 @@ -#! /bin/bash - -# Build type (Debug or Release) -BUILD_TYPE="$1" -# where to build protobuf, must be win32 or win64 -OUT_DIR="$2" - -[ "$OUT_DIR" != "win32" -a "$OUT_DIR" != "win64" -a "$OUT_DIR" != "x86" -a "$OUT_DIR" != "x64" ] && echo "The output dir must be 'Win32', 'Win64', 'x86' or 'x64'" && exit 1 -[ "$BUILD_TYPE" != "Debug" -a "$BUILD_TYPE" != "Release" ] && echo "The build type must be 'Debug' or 'Release'" && exit 1 - -# apt install libssl1.0-dev libssl1.0-dev:i386 - -# My variable to decide if we build x86 or x64 in CMakeLists.txt -if [ "$OUT_DIR" == "win32" -o "$OUT_DIR" == "x86" ]; then - custom_arch_var="-DX86=ON" -else - custom_arch_var="-DX64=ON" -fi - -build_type="-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" - -build_http="-DHTTP_ONLY=ON" -build_exe="-DBUILD_CURL_EXE=OFF" -build_shared="-DBUILD_SHARED_LIBS=OFF" -build_testing="-DBUILD_TESTING=OFF" - -args=() -args+=($build_http) -args+=($build_exe) -args+=($build_shared) -args+=($build_testing) -args+=($build_type) -args+=($custom_arch_var) - -if [ ! -z "$EXTRA_CMAKE_ENV" ]; then - args+=("-DCURL_STATIC_CRT=ON") -fi - -# EXTRA_CMAKE_ENV is set by setup_clang_env.sh to build for windows. -# You must run setup_clang_env.sh before calling this script if you build for windows. - -rm -rf "curl/$OUT_DIR" && -mkdir "curl/$OUT_DIR" && -cd "curl/$OUT_DIR" && -echo "cmake -G \"Unix Makefiles\" $EXTRA_CMAKE_ENV \"${args[@]}\" .." && -cmake -G "Unix Makefiles" $EXTRA_CMAKE_ENV "${args[@]}" .. && -make -j${JOBS-2} || exit 1 - -exit 0 From 9c04ce6a81fd73a0aa96b869647bf827ab22af1a Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sat, 24 Aug 2019 22:22:01 +0000 Subject: [PATCH 08/48] Delete CMakeLists.txt --- curl/CMakeLists.txt | 76 --------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 curl/CMakeLists.txt diff --git a/curl/CMakeLists.txt b/curl/CMakeLists.txt deleted file mode 100644 index cfaca4f..0000000 --- a/curl/CMakeLists.txt +++ /dev/null @@ -1,76 +0,0 @@ -#CMAKE_TOOLCHAIN_FILE - -project(goldberg_emulator_protobuf) -cmake_minimum_required(VERSION 3.0) - -if(WIN32) - # Detect arch on Windows - if( ${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(X64 ON) - else() - set(X86 ON) - endif() - - if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) - set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) - else() - add_compile_options(-std=c++11) - endif() - - set(win_libs Iphlpapi ws2_32) - if(X64) - set(STEAM_NAME steam_api64) - elseif(X86) - set(STEAM_NAME steam_api) - else() - message(FATAL_ERROR "Arch unknown") - endif() -elseif(APPLE) - message(FATAL_ERROR "No CMake for Apple") -else() - if(X64) - set(CMAKE_C_FLAGS "-m64") - set(CMAKE_CXX_FLAGS "-m64") - elseif(X86) - set(CMAKE_C_FLAGS "-m32") - set(CMAKE_CXX_FLAGS "-m32") - else() - message(FATAL_ERROR "Arch unknown") - endif() -endif() - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CURL_VERSION "7.65.3") -set(CURL_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(CURL_RELEASE_URL "https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.xz") -set(CURL_SRC curl-src) - -if( NOT EXISTS ${CURL_DIR}/${CURL_SRC} ) - file( - DOWNLOAD ${CURL_RELEASE_URL} ${CURL_DIR}/curl.tar.xz - SHOW_PROGRESS - EXPECTED_HASH MD5=7bd5b2ebfd3f591034eb8b55314d8c02 - ) - - if( NOT EXISTS ${CURL_DIR}/curl.tar.xz ) - message(FATAL_ERROR "Download of curl failed") - endif() - - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar -xf curl.tar.xz - WORKING_DIRECTORY ${CURL_DIR} - ) - - file(REMOVE ${CURL_DIR}/curl.tar.xz) - file(RENAME ${CURL_DIR}/curl-${CURL_VERSION} "${CURL_SRC}") -endif() - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -add_subdirectory(${CURL_DIR}/${CURL_SRC}) From f1118030e8e87156086d8d776255fbc87a1cd691 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 25 Aug 2019 00:29:05 +0200 Subject: [PATCH 09/48] Added the forgotten size update if copied less chars. --- dll/steam_inventory.h | 1 + 1 file changed, 1 insertion(+) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index 8518230..bdde870 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -666,6 +666,7 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope { // copy what we can strncpy(pchValueBuffer, val.c_str(), *punValueBufferSizeOut); + *punValueBufferSizeOut = std::min(static_cast(val.length() + 1), *punValueBufferSizeOut); } else { From 1d525c77c1976ec47135f975de7aa5bef8fca8d1 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 25 Aug 2019 09:35:34 +0200 Subject: [PATCH 10/48] Updated examples Should not push a commit when you're tired. --- .../232090/achievements.EXAMPLE.json | 18 + .../232090/achievements.json | 2098 ----------------- .../232090/items.EXAMPLE.json | 4 + .../achievements.EXAMPLE.json | 1572 ++++-------- 4 files changed, 546 insertions(+), 3146 deletions(-) create mode 100644 files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json delete mode 100644 files_example/inventory.EXAMPLE/232090/achievements.json create mode 100644 files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json diff --git a/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json b/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json new file mode 100644 index 0000000..7cf5155 --- /dev/null +++ b/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json @@ -0,0 +1,18 @@ +{ + "Achievement_0": { + "earned": true, + "earned_time": 1566718428 + }, + "Achievement_1": { + "earned": true, + "earned_time": 1566718431 + }, + "Achievement_10": { + "earned": true, + "earned_time": 1566718431 + }, + "Achievement_100": { + "earned": true, + "earned_time": 1566718432 + } +} \ No newline at end of file diff --git a/files_example/inventory.EXAMPLE/232090/achievements.json b/files_example/inventory.EXAMPLE/232090/achievements.json deleted file mode 100644 index 7a45fb5..0000000 --- a/files_example/inventory.EXAMPLE/232090/achievements.json +++ /dev/null @@ -1,2098 +0,0 @@ -[ - { - "description": "Complete Burning Paris on Survival Normal difficulty", - "displayName": "Tower Tussle", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/602f536d30b0c235518e7a1e44187d441eaf63d6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_0" - }, - { - "description": "Complete Burning Paris on Survival Hard difficulty", - "displayName": "Seine Skirmish", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/636fe6d6fabcabde48e874b7f4743632578b1c5d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_1" - }, - { - "description": "Beat Burning Paris on Suicidal", - "displayName": "Bastille Brawl", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c917888af91dfe611af82089437b2893779c8efc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_2" - }, - { - "description": "Beat Burning Paris on Hell on Earth", - "displayName": "Arc Action", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70b565ce3857b76c0a05369f06c8c049e16f7acb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_3" - }, - { - "description": "Beat Outpost on Normal", - "displayName": "You Can't Fight In Here, This Is The Control Room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d47d3ba3fd18af18307316c45ef5928a2ef548ea.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_4" - }, - { - "description": "Beat Outpost on Hard", - "displayName": "This Is What Happens When You Meet A Zed In The Alps", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02ee9ce922c7ce7a64829cd532f1ba2643dd4bb1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_5" - }, - { - "description": "Beat Outpost on Suicidal", - "displayName": "The Shield Doors Must Be Closed", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/050dcb99026091b63eddda0cdc4d63fd722c1e1b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_6" - }, - { - "description": "Beat Outpost on Hell on Earth", - "displayName": "Fear Is For The Zeds, My Little Lord", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8431a972a1983e9caf674f6789a5c465805ebbc4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_7" - }, - { - "description": "Beat Biotics Lab on Normal", - "displayName": "Open For Testing", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a8d274c3d77ec81d2aab54af370f724d40f15bc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_8" - }, - { - "description": "Beat Biotics Lab on Hard", - "displayName": "Limited Contact", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cbcc021969245995ce09589ad53ab1a47f0fdff7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_9" - }, - { - "description": "Beat Biotics Lab on Suicidal", - "displayName": "Restricted Access", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/44268ccc9bac63ecbf60f39898d7dc2c17bd53ab.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_10" - }, - { - "description": "Beat Biotics Lab on Hell on Earth", - "displayName": "Controlled Environment", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70cb90730ab2705bb1e306819354651d56c38552.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_11" - }, - { - "description": "Beat Volter Manor on Normal", - "displayName": "Just Visiting", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/61fa8d36c9829af872c0ad5228c60d64069fce17.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_12" - }, - { - "description": "Beat Volter Manor on Hard", - "displayName": "Mind Your Manor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e5b10441e0474095bbb81d5960f1af27c932084.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_13" - }, - { - "description": "Beat Volter Manor on Suicidal", - "displayName": "Settling In", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1683c9b2122f6ede072934269661f93e17ab984e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_14" - }, - { - "description": "Complete Volter Manor on Survival Hell On Earth difficulty", - "displayName": "Lord of the Manor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c4b365273492452a071837a4255bd4d2dea73da.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_15" - }, - { - "description": "Collect all the items on Burning Paris", - "displayName": "Paris Plunder", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1438bcf38af2bfc2c847a1f668faf687df0b732.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_16" - }, - { - "description": "Collect all the items on Outpost", - "displayName": "Outpost Offerings", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59ffefa9465aaf04ffdbc9e705cf3164d28a91b0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_17" - }, - { - "description": "Collect all the items on Biotics Lab", - "displayName": "Biotics Bling", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da4820f31888fcefa4a634a584e12a96de211e88.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_18" - }, - { - "description": "Collect all the items on Volter Manor", - "displayName": "Manor Money", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/30c452781f10edb7b6b3abd3a038776eac66252d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_19" - }, - { - "description": "Complete Evacuation Point on Survival Normal difficulty", - "displayName": "The Suite Life", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c80431926b58a51f442831f69d109df8d3f64e1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_20" - }, - { - "description": "Complete Evacuation Point on Survival Hard difficulty", - "displayName": "Unsinkable II", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3b2a9c5c63aad9b5f0a43f93424e0f29c8c6deb9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_21" - }, - { - "description": "Complete Evacuation Point on Survival Suicidal difficulty", - "displayName": "Bow Movement", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4b22d317141e729496ec00a2f0f7bc6a8a3146f2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_22" - }, - { - "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", - "displayName": "Seas The Day", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b64bf6337277640aa8f455aed9d210168a7ce414.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_23" - }, - { - "description": "Complete Catacombs on Survival Normal difficulty", - "displayName": "A Light In The Darkness", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d2908401103ad32380e3cf3525dafc45a1691306.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_24" - }, - { - "description": "Complete Catacombs on Survival Hard difficulty", - "displayName": "This Is No Mine", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1b79ab127fcaba5394686438c187275672fa62e3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_25" - }, - { - "description": "Complete Catacombs on Survival Suicidal difficulty", - "displayName": "This Is A Tomb, Theirs", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72a312fa2a311a0d57ba43d5d0ff5324560bd954.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_26" - }, - { - "description": "Complete Catacombs on Survival Hell On Earth difficulty", - "displayName": "They Shall Not Pass", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4770075a39f42f45b4fa7cf8f4c2e9c377633a0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_27" - }, - { - "description": "Collect all the items on Evacuation Point", - "displayName": "Point Paper", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8946b527da24edc10caea62e796b1b43420f736b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_28" - }, - { - "description": "Collect all the items on Catacombs", - "displayName": "Catacombs Cash", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/daa37be2677f123e123bf39b945e996fb8758c45.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_29" - }, - { - "description": "Reach Level 5 Berserker", - "displayName": "Reach Level 5 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ec445dee4f5bfcfca9e132ff680068e02c80983a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_30" - }, - { - "description": "Reach Level 10 Berserker", - "displayName": "Reach Level 10 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b2a3fc6e4112e667d045e7a0e3d1d229afe9273.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_31" - }, - { - "description": "Reach Level 15 Berserker", - "displayName": "Reach Level 15 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77fcacad378a8b65c6a1a40149a0bb41e571d252.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_32" - }, - { - "description": "Reach Level 20 Berserker", - "displayName": "Reach Level 20 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/edcb6d683a8cdb6dd29bd6dfa6c4887aedf886ef.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_33" - }, - { - "description": "Reach Level 25 Berserker", - "displayName": "Reach Level 25 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c0797935113227a8a7d60cdd76dfe1d272bd9c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_34" - }, - { - "description": "Reach Level 5 Medic", - "displayName": "Reach Level 5 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f81cafc2e08f2373cf4a5a4feb8ebc9d42609f52.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_35" - }, - { - "description": "Reach Level 10 Medic", - "displayName": "Reach Level 10 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfa49ae2939448e3eae52e6ef5d88a8d3e8cee5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_36" - }, - { - "description": "Reach Level 15 Medic", - "displayName": "Reach Level 15 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9d05bece5bdc0c4a919629378aa8d0a838b01548.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_37" - }, - { - "description": "Reach Level 20 Medic", - "displayName": "Reach Level 20 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8dcf9baa3420738cea516dfbb148d822b8cbc5c9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_38" - }, - { - "description": "Reach Level 25 Medic", - "displayName": "Reach Level 25 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/908b077bf03a98b6731c68d78bfb4071bb112604.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_39" - }, - { - "description": "Reach Level 5 Commando", - "displayName": "Reach Level 5 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59df9bded3394b3658929b5c0d6c4ef94d544bc3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_40" - }, - { - "description": "Reach Level 10 Commando", - "displayName": "Reach Level 10 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0052ebf1633c386974865ee696606c9fa003ff10.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_41" - }, - { - "description": "Reach Level 15 Commando", - "displayName": "Reach Level 15 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a211f3fb884248955eb1608987882372c44be91.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_42" - }, - { - "description": "Reach Level 20 Commando", - "displayName": "Reach Level 20 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46e7a0273fe5e82f4cbf6a650e8e9b519651ed46.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_43" - }, - { - "description": "Reach Level 25 Commando", - "displayName": "Reach Level 25 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ea698f23e293f79e28ad83c710820c86c30e8639.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_44" - }, - { - "description": "Reach Level 5 Support", - "displayName": "Reach Level 5 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8405e32f8bd371eb86b2d2c969efaba94d1b0076.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_45" - }, - { - "description": "Reach Level 10 Support", - "displayName": "Reach Level 10 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d9f35337082a2acb1893cc3976a0bdfcc670eef2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_46" - }, - { - "description": "Reach Level 15 Support", - "displayName": "Reach Level 15 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77627b9cf8a5ff535bc4cc0b1afb8dceeaa89dcc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_47" - }, - { - "description": "Reach Level 20 Support", - "displayName": "Reach Level 20 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87d64c361dbacf7bb024abbfa1cb379b86e91989.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_48" - }, - { - "description": "Reach Level 25 Support", - "displayName": "Reach Level 25 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a435a108d19908931941b652c758534d0147ce2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_49" - }, - { - "description": "Reach Level 5 Firebug", - "displayName": "Reach Level 5 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e6db9d05a3d33d94868e43f0a7034ecdb3ad840.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_50" - }, - { - "description": "Reach Level 10 Firebug", - "displayName": "Reach Level 10 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/23ca75c49075bfd65d1a262b8e42d9c021b311ef.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_51" - }, - { - "description": "Reach Level 15 Firebug", - "displayName": "Reach Level 15 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1cbb261b23edfea921a280c099d76f88dbd872a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_52" - }, - { - "description": "Reach Level 20 Firebug", - "displayName": "Reach Level 20 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e133456760dd3f8148b9ec1417371c6ecebe62f5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_53" - }, - { - "description": "Reach Level 25 Firebug", - "displayName": "Reach Level 25 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2488d37177ef8c82d03ac5bf7eb43fe774518c11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_54" - }, - { - "description": "Reach Level 5 Demolitions", - "displayName": "Reach Level 5 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f8ff68113d42586d47a3f8b8120a16f40794699b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_55" - }, - { - "description": "Reach Level 10 Demolitions", - "displayName": "Reach Level 10 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2664d73ed43ef164935a580a295bbf1e9e4e8de.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_56" - }, - { - "description": "Reach Level 15 Demolitions", - "displayName": "Reach Level 15 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dda8becc826584df747b1db31c1f36d8fe4a827e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_57" - }, - { - "description": "Reach Level 20 Demolitions", - "displayName": "Reach Level 20 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/97e880c18ee6117082b2fbf43e2c7f6b170fa5f8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_58" - }, - { - "description": "Reach Level 25 Demolitions", - "displayName": "Reach Level 25 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ae40a49979e39239251944daaee0eb6a1e72603d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_59" - }, - { - "description": "Reach Level 5 Gunslinger", - "displayName": "Reach Level 5 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6dc5ed68550025c39e585746f5f9386e38661758.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_60" - }, - { - "description": "Reach Level 10 Gunslinger", - "displayName": "Reach Level 10 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9a79962091ac4c31ea093da1edb1c3b0f47d129b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_61" - }, - { - "description": "Reach Level 15 Gunslinger", - "displayName": "Reach Level 15 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7fb6931c29993732579b4cd3d8e9daab9a09f0ca.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_62" - }, - { - "description": "Reach Level 20 Gunslinger", - "displayName": "Reach Level 20 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/815dec2cee244bec1fd47ddcc4393276c0463ff9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_63" - }, - { - "description": "Reach Level 25 Gunslinger", - "displayName": "Reach Level 25 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cc7a9b384ed3897cc74fade28cde0e0c2c95b0ce.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_64" - }, - { - "description": "Beat Any One Map as Berserker on Normal Difficulty", - "displayName": "Normal Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36cc13be1928003332588ad18221760939c1dce3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_65" - }, - { - "description": "Beat Any One Map as Berserker on Hard Difficulty", - "displayName": "Hard Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/880c29a1d0131e4ecd8e863040e17bf504da9f2b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_66" - }, - { - "description": "Beat Any One Map as Berserker on Suicidal Difficulty", - "displayName": "Suicidal Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1916652e0bc1aeeaa0d3b13031fa8bb67b4a4737.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_67" - }, - { - "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", - "displayName": "Hellish Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5134cbc5bab84d4fc20ada8bc9b51c6c742fffec.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_68" - }, - { - "description": "Beat Any One Map as Medic on Normal Difficulty", - "displayName": "Normal Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4839101153acbfda639e129955f4ad766cd24ee3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_69" - }, - { - "description": "Beat Any One Map as Medic on Hard Difficulty", - "displayName": "Hard Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4f2fc7260bbd80517e4ddc089ead393fee197a6a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_70" - }, - { - "description": "Beat Any One Map as Medic on Suicidal Difficulty", - "displayName": "Suicidal Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74bfb721ee43daade7c92e83593e2633d1531016.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_71" - }, - { - "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", - "displayName": "Hellish Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bbf40f4f99ddd1251494c45cf44436fc3032364e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_72" - }, - { - "description": "Complete any map as a Commando on Survival Normal difficulty", - "displayName": "Normal Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a8c0c6211e1314c175b8e5dd2785c79d97e8480.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_73" - }, - { - "description": "Complete any map as a Commando on Survival Hard difficulty", - "displayName": "Hard Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b44f5d459d8b35a7383718ea39540b8aed9f1d28.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_74" - }, - { - "description": "Complete any map as a Commando on Survival Suicidal difficulty", - "displayName": "Suicidal Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3d5b0e7ae171e6abd460c512bf7afaad20cb9c53.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_75" - }, - { - "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", - "displayName": "Hellish Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e08ae8778751acbcf861ee08f3b9803d3181f34f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_76" - }, - { - "description": "Complete any map as a Support on Survival Normal difficulty", - "displayName": "Normal Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f18256b3f3ddee86f22b477be44e0093f6d1897d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_77" - }, - { - "description": "Complete any map as a Support on Survival Hard difficulty", - "displayName": "Hard Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4ad83923f2f9638896fe49aa80b04f11a80bd6db.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_78" - }, - { - "description": "Complete any map as a Support on Survival Suicidal difficulty", - "displayName": "Suicidal Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb55f2e2431b03b787ca803bd8ebb09ba4d0fbdd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_79" - }, - { - "description": "Complete any map as a Support on Survival Hell On Earth difficulty", - "displayName": "Hellish Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c483d17dea8fedf4b013c3b8a1f3a86ed7c53a1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_80" - }, - { - "description": "Complete any map as a Firebug on Survival Normal difficulty", - "displayName": "Normal Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d787f7a96c2396e035bfae8415739dd3ec53ce69.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_81" - }, - { - "description": "Complete any map as a Firebug on Survival Hard difficulty", - "displayName": "Hard Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/924384c8d486ef91bf856c25edd258e29b7243d5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_82" - }, - { - "description": "Complete any map as a Firebug on Survival Suicidal difficulty", - "displayName": "Suicidal Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0372e445fd1ad3208f784c254192a5b07ca00e94.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_83" - }, - { - "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", - "displayName": "Hellish Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/41e8861feba48471f3677b706c259ab7cc3c6ec1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_84" - }, - { - "description": "Complete any map as a Demolitionist on Survival Normal difficulty", - "displayName": "Normal Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba1d7d23335daf81fa6358a296219983d5c41d1a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_85" - }, - { - "description": "Complete any map as a Demolitionist on Survival Hard difficulty", - "displayName": "Hard Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2d72fe0b205be4a7c58f1a2f0560e7390fea1f5d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_86" - }, - { - "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", - "displayName": "Suicidal Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/68c99c300525c4b0524f9d1df77d54bab2b91b5f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_87" - }, - { - "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", - "displayName": "Hellish Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f3e2fa5c5bf2fd11d3646cf4046fcd46f6fcea6f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_88" - }, - { - "description": "Complete any map as a Gunslinger on Survival Normal difficulty", - "displayName": "Normal Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fd2324d876a594a4a5e64a8e7e6912d41a334a30.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_89" - }, - { - "description": "Complete any map as a Gunslinger on Survival Hard difficulty", - "displayName": "Hard Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74f2431f94c6ecc6639f6af75f4a02f12b2e164d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_90" - }, - { - "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", - "displayName": "Suicidal Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35cc28c801142cd4e1e8c64c4f8f747e13761420.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_91" - }, - { - "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", - "displayName": "Hellish Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77b47b409488fe21a216cef5d279ac6293bb0b5e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_92" - }, - { - "description": "Reach Level 25 in all Perks", - "displayName": "Perked Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36350fb27669319b6c3ec26304250c9ff76b8a13.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_93" - }, - { - "description": "Complete Black Forest on Survival Normal difficulty", - "displayName": "Killer Korn", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b69373a99d3d8d3216b09402a9896f5f29009564.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_94" - }, - { - "description": "Complete Black Forest on Survival Hard difficulty", - "displayName": "Lager Me Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/657bf135a2bbf040370e9b4f73f8dbb74c5f0022.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_95" - }, - { - "description": "Complete Black Forest on Survival Suicidal difficulty", - "displayName": "I'll Dopple Bock", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da1fb07964ecc32315a797b1c825d8562bb86113.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_96" - }, - { - "description": "Complete Black Forest on Survival Hell On Earth difficulty", - "displayName": "Kein Bier Vor Vier", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5284866c575c132f4d4c838d8c380b5c731e05b6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_97" - }, - { - "description": "Collect all the items on Black Forest", - "displayName": "Black Forest Babies", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b8f2d33dbc9f884b8de60ea4573cf8cdf737d6d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_98" - }, - { - "description": "Beat Farmhouse on Normal Difficulty", - "displayName": "Plow the Field", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46cef619b81b1c389955bc1442c346a1b966431c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_99" - }, - { - "description": "Beat Farmhouse on Hard Difficulty", - "displayName": "Sow the Seed", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e20c6ea4e34b7953f9ea0982ad11835fa11ac9e9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_100" - }, - { - "description": "Beat Farmhouse on Suicidal Difficulty", - "displayName": "Water the Crops", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a2da718294f17bc3fc0e06dac6e64c4942e691c4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_101" - }, - { - "description": "Beat Farmhouse on Hell on Earth Difficulty", - "displayName": "Reap what you Sow", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7beeff9f0fb5fc641f2ad9d986db7cab1cb93486.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_102" - }, - { - "description": "Collect all the items on Farmhouse", - "displayName": "Darkness Dolls", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21abe9ca2790fed3a4f400bb82171de07460309e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_103" - }, - { - "description": "Beat Prison on Normal", - "displayName": "Walked into the wrong room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/10b030dec54a8de662134975904e4b18546d2f8b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_104" - }, - { - "description": "Beat Prison on Hard", - "displayName": "Mercenaries get paid", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e10da3181de7bd0845b7a77d5f70dc83aae746fa.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_105" - }, - { - "description": "Beat Prison on Suicidal", - "displayName": "Like what, kill him again?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ed1d9b6092c89566a47c9593506f5dec889b9403.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_106" - }, - { - "description": "Beat Prison on Hell on Earth", - "displayName": "I was trained by the best. British Intel.", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca6f43274c132cf9d995591fb4045aa5c57709c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_107" - }, - { - "description": "Collect all the items on Prison", - "displayName": "Perilous Prison", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95c90482f7da7e7759fb68200f71d3b784e1396d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_108" - }, - { - "description": "Complete the Training Floor", - "displayName": "School's Out Forever", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/66f5309ba8030f4f5dc5f1c15e1db4dad14ffbb1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_109" - }, - { - "description": "Reach Level 5 Sharpshooter", - "displayName": "Reach Level 5 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/023f4f3f8b8b45547a7c0bd9a1ac409cb262fbe8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_110" - }, - { - "description": "Reach Level 10 Sharpshooter", - "displayName": "Reach Level 10 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ca9c4dea499a0212dd521cbf872715b54aa22018.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_111" - }, - { - "description": "Reach Level 15 Sharpshooter", - "displayName": "Reach Level 15 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c7a93ae33709f3e087c2d73b580ab71be443515.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_112" - }, - { - "description": "Reach Level 20 Sharpshooter", - "displayName": "Reach Level 20 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/00d137f6217d596365635659f788f81a12a56cc7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_113" - }, - { - "description": "Reach Level 25 Sharpshooter", - "displayName": "Reach Level 25 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1010a85f23b67a0ed426f76827dc71a47c898e91.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_114" - }, - { - "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", - "displayName": "Normal Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/50e428ecaeb5ea710a68de937ab6db91871b8e06.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_115" - }, - { - "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", - "displayName": "Hard Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/378eb9e717b7405b636c74a504ef1548d47b1087.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_116" - }, - { - "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", - "displayName": "Suicidal Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/92ecee481d00897d6bd2d0526fd34fad7dd4dac2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_117" - }, - { - "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", - "displayName": "Hellish Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/37762c27fa85c5bfea8793d99760979c383105a1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_118" - }, - { - "description": "Complete Containment Station on Survival Normal difficulty", - "displayName": "Never Got the Hang of Thursdays", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c72b7326246881b9d9e4c2a446f75fa5709455b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_119" - }, - { - "description": "Complete Containment Station on Survival Hard difficulty", - "displayName": "Don't Panic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7874cadae34f3a5adea32253491d2c9264a119f7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_120" - }, - { - "description": "Complete Containment Station on Survival Suicidal difficulty", - "displayName": "Give Up and Go Mad Now", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/258ebf7dee2742339bbdc3ced7609ddbe4c33517.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_121" - }, - { - "description": "Complete Containment Station on Survival Hell On Earth difficulty", - "displayName": "So Long and Thanks for All the Zeds", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a9313fc5d346da24302330d8784dcf7143b5c143.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_122" - }, - { - "description": "Collect All the Items on Containment Station", - "displayName": "Can't Be Contained", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffbbbe46c760cbed9d23cb5e53bf875384da70ee.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_123" - }, - { - "description": "Complete Hostile Grounds on Survival Normal difficulty", - "displayName": "Mind the Gap", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2de6a1efe33cabc68b9ddc4bbc831a32bc4bc50.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_124" - }, - { - "description": "Complete Hostile Grounds on Survival Hard difficulty", - "displayName": "Can't Make an Omelette Without Killing a Few People", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/69d31dd091f48198d692aa5bdb64e07cf52a92a3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_125" - }, - { - "description": "Complete Hostile Grounds on Survival Suicidal difficulty", - "displayName": "There Is No I in Team, But There Is an I in Pie", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bfcfa4a2fe2399e53034b696436610b0205540c8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_126" - }, - { - "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", - "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e3c20ee2ab91c0172796eac857bde8d7de639188.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_127" - }, - { - "description": "Collect All the Items on Hostile Grounds", - "displayName": "You've Got Red on You", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/020adbeabf8554ba8fe763cbb3c08df037a4965a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_128" - }, - { - "description": "Kill a Siren Before She Screams", - "displayName": "Dead Silence", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/08e4690859d94699a73a80e5589fb0b8c799fa1c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_129" - }, - { - "description": "Kill the Patriarch Before He Has a Chance to Heal", - "displayName": "Quick on the Trigger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6fdfdd1f09fb91e90a1b25cb83a5421ae81a2cb5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_130" - }, - { - "description": "Kill Your First Fleshpound", - "displayName": "It's Only a Flesh Wound", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/03ff0be17f0e56d8e312aa117844f27f134c47af.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_131" - }, - { - "description": "Kill Your First Scrake", - "displayName": "Hack and Slash", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfc51c010c7198347da1a22e1ce51d47f5ff13c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_132" - }, - { - "description": "Kill Dr. Hans Volter For the First Time", - "displayName": "Die Volter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6f07eab287060d5516082afa7e3a7772017fe75c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_133" - }, - { - "description": "Win Any Match on Hard Difficulty", - "displayName": "Win Hard", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/be68c7423f778e6a2fc636b4dc2e20942c6f0c68.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_134" - }, - { - "description": "Win Any Match on Suicidal Difficulty", - "displayName": "Win Suicidal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3f199fbc299b56e873bb1bfb2d1726d88db3bbe6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_135" - }, - { - "description": "Win Any Match on Hell on Earth Difficulty", - "displayName": "Win Hell on Earth", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35c0be17200bacee8c54fbe87f16e8f27a82a181.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_136" - }, - { - "description": "Reach Level 5 on Any Perk", - "displayName": "Mr. Perky 5", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/75ff6bda27bc5f21d0f5aa096305e66b87129871.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_137" - }, - { - "description": "Reach Level 10 on Any Perk", - "displayName": "Mr. Perky 10", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b63768e9a813a14111cc4eeb283a0833db88874.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_138" - }, - { - "description": "Reach Level 15 on Any Perk", - "displayName": "Mr. Perky 15", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/26c3035ca19855e765ad032d1de71fe64ae153e9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_139" - }, - { - "description": "Reach Level 20 on Any Perk", - "displayName": "Mr. Perky 20", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/99a2fb3824c9f1eb2c607e22da9b4109cee0124f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_140" - }, - { - "description": "Reach Level 25 on Any Perk", - "displayName": "Mr. Perky 25", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9aa58d0c8f2f80e8250bb75aa4de09ffba6da5b5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_141" - }, - { - "description": "Win 1 Multiplayer Match", - "displayName": "Win 1", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/93aee896270cac79fb5ae36375c92091b57e9707.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_142" - }, - { - "description": "Win 10 Multiplayer Matches", - "displayName": "Win 10", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5ac2c4dcfc8e708bce22d43c8fa0a28bc5f63177.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_143" - }, - { - "description": "Win 25 Multiplayer Matches", - "displayName": "Win 25", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/361fe6cb30916a4b3785ea0431b7df56bca3e111.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_144" - }, - { - "description": "Win a VS Survival Round Playing as the Zeds", - "displayName": "VS Zed Win", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/992d3a5c5c8d736cd26ef8ce2f371eeea33a8469.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_145" - }, - { - "description": "Win a VS Survival Round Playing as the Humans", - "displayName": "VS Human Win", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af8cdf129ec3eaa218ca706105ed329792893872.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_146" - }, - { - "description": "Weld a Door to 100%", - "displayName": "Hold Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5b03919fefaa82dc87765dc29961e4fd3816acb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_147" - }, - { - "description": "Heal a Teammate With the Syringe", - "displayName": "I Got Your Back", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a873278bb202e325e5073ae542ebabf0dd276236.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_148" - }, - { - "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", - "displayName": "Benefactor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7b07b668e976c865c0a2ad8707149d43f9652ef6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_149" - }, - { - "description": "Beat Infernal Realms on Normal", - "displayName": "Hell is Other People", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/27b51a5f9b9795e0e2e90d0784c31e70d7047f3c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_150" - }, - { - "description": "Complete Infernal Realms on Survival Hard difficulty", - "displayName": "If You Are Going Through Hell, Keep Going", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a062da8ad5b21973ff9913dfeede3b05c81dc19c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_151" - }, - { - "description": "Complete Infernal Realms on Survival Suicidal difficulty", - "displayName": "Hell is Just a Frame of Mind", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ac0d5107bbe97948e7642300b3503e0d91bcee3b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_152" - }, - { - "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", - "displayName": "All Hope abandon, Ye Who Enter Here", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/210ab00c89581caf7ffe220078d9ab9506f0dabd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_153" - }, - { - "description": "Collect all the Items in Infernal Realms", - "displayName": "Infernal Relics", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c81f20349851c9b12ea9fba2116d4458c8bb309.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_154" - }, - { - "description": "Reach Level 5 SWAT", - "displayName": "Reach Level 5 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6919e017b0389e4e4f80b94a282bd10b88632567.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_155" - }, - { - "description": "Reach Level 10 SWAT", - "displayName": "Reach Level 10 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba0a2d8bea98c36f402cf72ff59a17a6ea8a5097.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_156" - }, - { - "description": "Reach Level 15 SWAT", - "displayName": "Reach Level 15 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/07b4a6889ba0f960360b16c6a2c528b2802c8c0d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_157" - }, - { - "description": "Reach Level 20 SWAT", - "displayName": "Reach Level 20 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0577ad2c3987fa0186aaa017fa5c25c75c281133.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_158" - }, - { - "description": "Reach Level 25 SWAT", - "displayName": "Reach Level 25 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c7655f2d1f275bc77e73b85a02d921f9e29d3031.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_159" - }, - { - "description": "Complete any map as a SWAT on Survival Normal difficulty", - "displayName": "Normal SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b9a7646537a74042db00c7c46b58463c12331ad.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_160" - }, - { - "description": "Beat Any One Map as SWAT on Hard Difficulty", - "displayName": "Hard SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a43a6bb8e914126587b1419879ff3d95b83ec6f6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_161" - }, - { - "description": "Beat Any One Map as SWAT on Suicidal Difficulty", - "displayName": "Suicidal SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af9bbfa27fa159b8ea469ee79ba525bdbcf07b6e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_162" - }, - { - "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", - "displayName": "Hellish SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a86755764baed752a896d2c8cd524bd20e1d6c57.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_163" - }, - { - "description": "Reach Level 5 Survivalist", - "displayName": "Reach Level 5 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5c730159237de25db37bbba7ac8b899ba9b92f28.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_164" - }, - { - "description": "Reach Level 10 Survivalist", - "displayName": "Reach Level 10 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c87bbe270e7a60494f0d6a46a173f48e8e90f266.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_165" - }, - { - "description": "Reach Level 15 Survivalist", - "displayName": "Reach Level 15 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0fc03a0b9535d3f31d8cfe3055e905e7cda85939.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_166" - }, - { - "description": "Reach Level 20 Survivalist", - "displayName": "Reach Level 20 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f9526579c6b4f52621b85c5913ff8773940fed11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_167" - }, - { - "description": "Reach Level 25 Survivalist", - "displayName": "Reach Level 25 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a472196ec80ad363c21e1bac0206061a8ec6e1e1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_168" - }, - { - "description": "Beat Any One Map as Survivalist on Normal Difficulty", - "displayName": "Normal Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4c78a847b3842fac7ea587a603594d9a39ffc8a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_169" - }, - { - "description": "Complete any map as a Survivalist on Survival Hard difficulty", - "displayName": "Hard Survivalist ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/17c50c8adff85ea28e3cbd3b7fa31d387efb3eff.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_170" - }, - { - "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", - "displayName": "Suicidal Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/accaa92454ffe35037f67c63c03ebb9544eec484.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_171" - }, - { - "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", - "displayName": "Hellish Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a90fc7ad76f58c1278097f3a351001438c62327.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_172" - }, - { - "description": "Complete Zed Landing on Survival Normal difficulty", - "displayName": "Surfs Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e1c100915ffb91be6090459fdcda997a31fe62f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_173" - }, - { - "description": "Complete Zed Landing on Survival Hard difficulty", - "displayName": "Gnarly", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1d855a17989f39be054443c9277c90907eff1f8d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_174" - }, - { - "description": "Complete Zed Landing on Survival Suicidal difficulty", - "displayName": "Close-out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25a425379ed71d99787c091fa7a24e507c2eecac.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_175" - }, - { - "description": "Complete Zed Landing on Survival Hell On Earth difficulty", - "displayName": "Blown Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d5f30aa2ff0b4a3e080eab4a61e202a87cf1775.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_176" - }, - { - "description": "Collect all the volley balls on Zed Landing", - "displayName": "ALAN!!!!!!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffad0d1970b1b8813ba164cd4465fc4de9b271eb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_177" - }, - { - "description": "Complete The Descent on Survival Normal difficulty", - "displayName": "How Bout Some Gas?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02f005688d599e8f655a6d41a65751031c1a4392.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_178" - }, - { - "description": "Complete The Descent on Survival Hard difficulty", - "displayName": "But what if we added Gas?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84848cab1b952d23328637f81e45b69aeda38ded.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_179" - }, - { - "description": "Complete The Descent on Survival Suicidal difficulty", - "displayName": "Let's Try Some Gas", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d6d7a2ce4b36b10b27946e972b3b7184f2226069.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_180" - }, - { - "description": "Complete The Descent on Survival Hell On Earth difficulty", - "displayName": "That's enough gas....", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e2ab1da79c801e23fba287c2fccc548bdbf0026.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_181" - }, - { - "description": "Collect all the items on The Descent", - "displayName": "Hans Off the Merchandise", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21ab02dcc7dc02c09b5e65a82fcdfa200a96a0db.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_182" - }, - { - "description": "Complete Nuked on Survival Normal difficulty", - "displayName": "The War Room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2a96570f609cf5842a31691e5cc8c0a800907786.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_183" - }, - { - "description": "Complete Nuked on Survival Hard difficulty", - "displayName": "The Mineshaft Gap", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c28acbddf4b6bed6d2ad1ec7536b1160e3b056.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_184" - }, - { - "description": "Complete Nuked on Survival Suicidal difficulty", - "displayName": "Peace is Our Profession", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e759bb1400427742feb5d39e715e6c956c11987a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_185" - }, - { - "description": "Complete Nuked on Survival Hell On Earth difficulty", - "displayName": "How I Learned to Love the Bomb", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c42d2d9c5eb25d2c2c4a58dddd8084f470892e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_186" - }, - { - "description": "Collect all the items on Nuked", - "displayName": "Davy Crockett", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c16a98ee7a9a777730733ca1ec1cda2391fb89c7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_187" - }, - { - "description": "Complete Tragic Kingdom on Survival Normal difficulty", - "displayName": "It's a Bloody World After All", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0803a7e5a71920b9aa9c08e71eb381a9eda6e12.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_188" - }, - { - "description": "Complete Tragic Kingdom on Survival Hard difficulty", - "displayName": "The Goriest Place on Earth", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e2f6339b665184291d2987a3a48a5dbfb4b54c0e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_189" - }, - { - "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", - "displayName": "The House the Zed Built", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/85f0612297393d567d8ff712fa324dabb0c269fb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_190" - }, - { - "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", - "displayName": "Where Nightmares Come True", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f68565b02007c17260805be1d5bb3c55271e1cb3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_191" - }, - { - "description": "Collect all the items on The Tragic Kingdom", - "displayName": "The Wonderful World of Merchandising", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/79ad35a7fe93d31661bd54825571708545e43210.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_192" - }, - { - "description": "Beat Nightmare on Normal", - "displayName": "I Got a Rock", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1777445a1bc01a5c39a75c7167df6359edd5f26e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_193" - }, - { - "description": "Beat Nightmare on Hard", - "displayName": "Yuck, Candy Corn", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fb9b4f18d7f58d43295ee571cae5c821a5f12836.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_194" - }, - { - "description": "Beat Nightmare on Suicidal", - "displayName": "Fun Size? What is Fun Size?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53e20884174ea4717588f5a7c324d1a02d207dae.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_195" - }, - { - "description": "Beat Nightmare on Hell on Earth", - "displayName": "Victory! Full Size Candy Bar!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c69b7865a24dcc827d5ea44ac166907b8f08b4ad.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_196" - }, - { - "description": "Collect all the items (skulls) on Nightmare", - "displayName": "Letting the Demons Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/874e1f46efd7b59e66485ee1b9b4b5765bcab692.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_197" - }, - { - "description": "Beat Krampus Lair on Normal", - "displayName": "Stocking Full of Coal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ff769cc651d4be77250428a4b6d4e0a254015b11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_198" - }, - { - "description": "Beat Krampus Lair on Hard", - "displayName": "Bundle of Switches", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84082b5ce17368ef1e6a1d9e78174866674686ba.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_199" - }, - { - "description": "Beat Krampus Lair on Suicidal", - "displayName": "A Whupping", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fe7e707e5ad19ef5e0dd9152a6d1b3ddeb59d883.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_200" - }, - { - "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", - "displayName": "Carried off to the Underworld", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c318550b2c02db9532d6051dd3af1f855cd87f5e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_201" - }, - { - "description": "Collect all the items (Snowglobes) on Krampus Lair", - "displayName": "A World Under Glass", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_202" - }, - { - "description": "Complete DieSector wave 25 on Endless Normal difficulty", - "displayName": "Training Simulation", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/510dc6da957123fce45794b85cc89075b6aa35d0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_203" - }, - { - "description": "Complete DieSector wave 25 on Endless Hard difficulty", - "displayName": "Test Trials", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/925db58c260bb48f62eb56ef9a5e8faf9274c905.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_204" - }, - { - "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", - "displayName": "Code Dead", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/222996c8e587aefda46d41c4c70b9108357ed175.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_205" - }, - { - "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", - "displayName": "Fatal Exception", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cf61a22148cdb35bd943ff14fb83f68c0cd8736e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_206" - }, - { - "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", - "displayName": "It's aD.A.R.able", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53405d791ad24a2a03b0d71c9c6f515e05fe3620.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_207" - }, - { - "description": "Complete Power Core on Survival Normal difficulty", - "displayName": "A Spark to Light the Way", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/877725c3b9e141295e2c52ac6f14af6f68013f04.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_208" - }, - { - "description": "Complete Power Core on Survival Hard difficulty", - "displayName": "Bolting through the Core", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95d39cdab7b75fca64b64c39e4671f3ff09f3871.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_209" - }, - { - "description": "Complete Power Core on Survival Suicidal difficulty", - "displayName": "High Voltage", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5521e83f9cf369d9f807489db0120d97a3e3002.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_210" - }, - { - "description": "Complete Power Core on Survival Hell On Earth difficulty", - "displayName": "I Have the Power!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca61bb09f6a26eebd4f76e5ab2804b2bdbd6540.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_211" - }, - { - "description": "Collect all the items (Batteries) on Power Core", - "displayName": "Surge Breaker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2942584ef67dfc745bed2c7fcbd8f04bd0c9b11b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_212" - }, - { - "description": "Complete Airship on Survival Normal difficulty", - "displayName": "A Little Turbulence", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e76995587e9bf81b4beecad3b305b06f32ee35c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_213" - }, - { - "description": "Complete Airship on Survival Hard difficulty", - "displayName": "Flying Unfriendly Skies", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3dcc2a19350aef1f5b5079d2fa1510225bb5924f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_214" - }, - { - "description": "Complete Airship on Survival Suicidal difficulty", - "displayName": "Soar, Gore, and More", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d318dee401d56bafc7ebed0eaab6e4dcfb593b00.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_215" - }, - { - "description": "Complete Airship on Survival Hell On Earth difficulty", - "displayName": "Mile High Dead Club", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/350d3e23eb31845a77fcef992c7fe899fd436f80.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_216" - }, - { - "description": "Collect all the items (Steam Cells) on Airship", - "displayName": "Powered by Steam", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b5fdc74747940179c7dc5f3ab964b1ef4175fdc0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_217" - }, - { - "description": "Complete Lockdown on Survival Normal difficulty", - "displayName": "Station Stabilization", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffab338f1cf3295c1efd4a01d0e0bca3def85229.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_218" - }, - { - "description": "Complete Lockdown on Survival Hard difficulty", - "displayName": "Fun Near the Sun", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/39205159c665ba3b80af9365b4f6e58ccac29ef2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_219" - }, - { - "description": "Complete Lockdown on Survival Suicidal difficulty", - "displayName": "Space Race", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7c8cfb7f628de3b9c7a438d17311882900314c75.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_220" - }, - { - "description": "Complete Lockdown on Survival Hell On Earth difficulty", - "displayName": "Houston, We Don't Have a Problem", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/177825463454281e2ef5c05ecc1526ef2474c3d4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_221" - }, - { - "description": "Collect all the items (Batteries) on Lockdown", - "displayName": "Shocking Discovery!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c5b893ccd87f50690b337222fe6139c931b3533c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_222" - }, - { - "description": "Complete Monster Ball on Survival Normal difficulty", - "displayName": "Castle Crashers", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a5f8f0ecc173daa77a844bc1ad6b91ddaf60383d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_223" - }, - { - "description": "Complete Monster Ball on Survival Hard difficulty", - "displayName": "Party Hard!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/49cda67ccd22c0ebf522717bd03fad590b786389.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_224" - }, - { - "description": "Complete Monster Ball on Survival Suicidal difficulty", - "displayName": "Dance on the Gore Floor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ce29727842be31de090c83871e6f5831efacfb87.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_225" - }, - { - "description": "Complete Monster Ball on Survival Hell on Earth difficulty", - "displayName": "Rest In Pieces", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25005dfa6da839a95b8aa3664ebb13034a228f49.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_226" - }, - { - "description": "Destroy 10 Glowing Skulls in Monster Ball", - "displayName": "Spooky Scary Skeletons", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d3b14b6dcab1ffaa714e2bebdff231a8972e313.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_227" - }, - { - "description": "Unlock the Alchemist Room in Monster Ball", - "displayName": "Death's Door", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/382680a850833e6d1b227c6b92d066ebb892ce0e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_228" - }, - { - "description": "Complete Santa's Workshop on Survival Normal Difficulty", - "displayName": "Cookies and Milk", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c9262e0a59ee9f4ae0b6b7f778e57aa5b84ddbb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_229" - }, - { - "description": "Complete Santa's Workshop on Survival Hard Difficulty", - "displayName": "Slaying with Santa", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b9ef59caab40af925efab875cec9c3cfcddc8bbd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_230" - }, - { - "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", - "displayName": "A Deadly Carol", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/55cebdba7cae5617c8a8664ff2361d31c98e41ac.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_231" - }, - { - "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", - "displayName": "You're On The Badass List", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/42cdfa0830aaaafbf52b7aa22b14e37094277526.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_232" - }, - { - "description": "Destroy 10 Snow Globes in Santa's Workshop", - "displayName": "Yule Shoot Your Eye Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_233" - }, - { - "description": "Complete Shopping Spree on Survival Normal Difficulty", - "displayName": "Cleanup On Aisle 3", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3a4536ce96f3535865a03aea65fd970706339058.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_234" - }, - { - "description": "Complete Shopping Spree on Survival Hard Difficulty", - "displayName": "Shoot One Get Two Free", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/933bc0eaa31bc8e877f08e12cf5543a40032e4d5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_235" - }, - { - "description": "Complete Shopping Spree on Survival Suicidal Difficulty", - "displayName": "Savings to Die For", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c4e0289e34928cce62665fe535b886f38d8a0534.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_236" - }, - { - "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", - "displayName": "Red Friday", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb976a5df4b166702cf5c16ef38026f62e76ba13.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_237" - }, - { - "description": "Destroy 10 Dosh Necklaces in Shopping Spree", - "displayName": "A Special Deal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/60d04d244713b2b9475658538261124a0da51adc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_238" - }, - { - "description": "Complete Spillway on Survival Normal Difficulty", - "displayName": "It's All Downstream From Here", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84c45895752213f960988d909fac2317c1468d7e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_239" - }, - { - "description": "Complete Spillway on Survival Hard Difficulty", - "displayName": "Zeds Be Dam", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dca6e9d3e9aff9dd05a56c3a9838e21e37d2e8cf.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_240" - }, - { - "description": "Complete Spillway on Survival Suicidal Difficulty", - "displayName": "Overflow Controlled", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a834f5eca65f679bb9232faa5371501addd2222.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_241" - }, - { - "description": "Complete Spillway on Survival Hell On Earth Difficulty", - "displayName": "Dam You're Good!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/751f4a1ed126d232c8be5cfa6b5efa05ec103316.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_242" - }, - { - "description": "Destroy 10 Dosh Necklaces in Spillway", - "displayName": "Money Down the Drain", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87cc7f0c7342385b24efb2956f214c7d057f3288.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_243" - }, - { - "description": "Complete Steam Fortress on Objective Normal Difficulty", - "displayName": "Burning Out the Fuse", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c669333a43bc28fdda7a441d54bab8d69cb14b2c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_244" - }, - { - "description": "Complete Steam Fortress on Objective Hard Difficulty", - "displayName": "Touchdown Brings Me Down", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a3723df79a8f83adef085ad31bf5ce7584715cf.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_245" - }, - { - "description": "Complete Steam Fortress on Objective Suicidal Difficulty", - "displayName": "High as a Kite", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7197c8ba18ed6dd63deaa9ac2198e26aa199d07b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_246" - }, - { - "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", - "displayName": "It's Cold as Hell", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54a004733d400ae8f350ce4fb95e8f9601462189.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_247" - }, - { - "description": "Destroy 10 Steam Batteries on Steam Fortress", - "displayName": "All This Science I Don't Understand", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f93605f0b8543fa506641195fa7fd6e21e6bb545.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_248" - }, - { - "description": "Complete Zed Landing on Objective Normal Difficulty", - "displayName": "Droning On", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3798d728855dc6dc65e926288176ab87666dbd86.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_249" - }, - { - "description": "Complete Zed Landing on Objective Hard Difficulty", - "displayName": "Data Deliverier ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7933cd8f729179eb61274fffa8ac3af69368997c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_250" - }, - { - "description": "Complete Zed Landing on Objective Suicidal Difficulty", - "displayName": "Island Isolation", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c25b0221caf5779641711eae5dbe5e915d7feef0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_251" - }, - { - "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", - "displayName": "Someone Call a Chopper?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9ccce9f949a52cf79fbc4b53f703fb4bd726d652.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_252" - }, - { - "description": "Complete Outpost on Objective Normal Difficulty", - "displayName": "It's Snow Good. ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/626744b7626d76146205e4ee0545ff5b82d48536.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_253" - }, - { - "description": "Complete Outpost on Objective Hard Difficulty", - "displayName": "Giving the Cold Shoulder", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0d63ed438b13319e0c81a6d7b3b0fea00e28b84.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_254" - }, - { - "description": "Complete Outpost on Objective Suicidal Difficulty", - "displayName": "Frozen Assets", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72142caac4513322346bb51b738a099219288e9c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_255" - }, - { - "description": "Complete Outpost on Objective Hell On Earth Difficulty", - "displayName": "The Snow Must Go On", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fb3f2cd9de0a8d536b4070a2ac59d747f5e76a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_256" - }, - { - "description": null, - "displayName": "Achievement_257_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_257" - }, - { - "description": null, - "displayName": "Achievement_258_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_258" - }, - { - "description": null, - "displayName": "Achievement_259_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_259" - }, - { - "description": null, - "displayName": "Achievement_260_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_260" - }, - { - "description": null, - "displayName": "Achievement_261_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_261" - } -] \ No newline at end of file diff --git a/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json b/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json new file mode 100644 index 0000000..34db327 --- /dev/null +++ b/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json @@ -0,0 +1,4 @@ +{ + "2001": 1, + "2002": 1 +} \ No newline at end of file diff --git a/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json b/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json index 8613d40..7a45fb5 100644 --- a/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json +++ b/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json @@ -2,2621 +2,2097 @@ { "description": "Complete Burning Paris on Survival Normal difficulty", "displayName": "Tower Tussle", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/602f536d30b0c235518e7a1e44187d441eaf63d6.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_0", - "time_earned": 0 + "name": "Achievement_0" }, { "description": "Complete Burning Paris on Survival Hard difficulty", "displayName": "Seine Skirmish", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/636fe6d6fabcabde48e874b7f4743632578b1c5d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_1", - "time_earned": 0 + "name": "Achievement_1" }, { "description": "Beat Burning Paris on Suicidal", "displayName": "Bastille Brawl", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c917888af91dfe611af82089437b2893779c8efc.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_2", - "time_earned": 0 + "name": "Achievement_2" }, { "description": "Beat Burning Paris on Hell on Earth", "displayName": "Arc Action", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70b565ce3857b76c0a05369f06c8c049e16f7acb.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_3", - "time_earned": 0 + "name": "Achievement_3" }, { "description": "Beat Outpost on Normal", "displayName": "You Can't Fight In Here, This Is The Control Room", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d47d3ba3fd18af18307316c45ef5928a2ef548ea.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_4", - "time_earned": 0 + "name": "Achievement_4" }, { "description": "Beat Outpost on Hard", "displayName": "This Is What Happens When You Meet A Zed In The Alps", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02ee9ce922c7ce7a64829cd532f1ba2643dd4bb1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_5", - "time_earned": 0 + "name": "Achievement_5" }, { "description": "Beat Outpost on Suicidal", "displayName": "The Shield Doors Must Be Closed", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/050dcb99026091b63eddda0cdc4d63fd722c1e1b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_6", - "time_earned": 0 + "name": "Achievement_6" }, { "description": "Beat Outpost on Hell on Earth", "displayName": "Fear Is For The Zeds, My Little Lord", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8431a972a1983e9caf674f6789a5c465805ebbc4.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_7", - "time_earned": 0 + "name": "Achievement_7" }, { "description": "Beat Biotics Lab on Normal", "displayName": "Open For Testing", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a8d274c3d77ec81d2aab54af370f724d40f15bc.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_8", - "time_earned": 0 + "name": "Achievement_8" }, { "description": "Beat Biotics Lab on Hard", "displayName": "Limited Contact", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cbcc021969245995ce09589ad53ab1a47f0fdff7.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_9", - "time_earned": 0 + "name": "Achievement_9" }, { "description": "Beat Biotics Lab on Suicidal", "displayName": "Restricted Access", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/44268ccc9bac63ecbf60f39898d7dc2c17bd53ab.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_10", - "time_earned": 0 + "name": "Achievement_10" }, { "description": "Beat Biotics Lab on Hell on Earth", "displayName": "Controlled Environment", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70cb90730ab2705bb1e306819354651d56c38552.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_11", - "time_earned": 0 + "name": "Achievement_11" }, { "description": "Beat Volter Manor on Normal", "displayName": "Just Visiting", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/61fa8d36c9829af872c0ad5228c60d64069fce17.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_12", - "time_earned": 0 + "name": "Achievement_12" }, { "description": "Beat Volter Manor on Hard", "displayName": "Mind Your Manor", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e5b10441e0474095bbb81d5960f1af27c932084.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_13", - "time_earned": 0 + "name": "Achievement_13" }, { "description": "Beat Volter Manor on Suicidal", "displayName": "Settling In", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1683c9b2122f6ede072934269661f93e17ab984e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_14", - "time_earned": 0 + "name": "Achievement_14" }, { "description": "Complete Volter Manor on Survival Hell On Earth difficulty", "displayName": "Lord of the Manor", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c4b365273492452a071837a4255bd4d2dea73da.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_15", - "time_earned": 0 + "name": "Achievement_15" }, { "description": "Collect all the items on Burning Paris", "displayName": "Paris Plunder", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1438bcf38af2bfc2c847a1f668faf687df0b732.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_16", - "time_earned": 0 + "name": "Achievement_16" }, { "description": "Collect all the items on Outpost", "displayName": "Outpost Offerings", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59ffefa9465aaf04ffdbc9e705cf3164d28a91b0.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_17", - "time_earned": 0 + "name": "Achievement_17" }, { "description": "Collect all the items on Biotics Lab", "displayName": "Biotics Bling", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da4820f31888fcefa4a634a584e12a96de211e88.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_18", - "time_earned": 0 + "name": "Achievement_18" }, { "description": "Collect all the items on Volter Manor", "displayName": "Manor Money", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/30c452781f10edb7b6b3abd3a038776eac66252d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_19", - "time_earned": 0 + "name": "Achievement_19" }, { "description": "Complete Evacuation Point on Survival Normal difficulty", "displayName": "The Suite Life", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c80431926b58a51f442831f69d109df8d3f64e1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_20", - "time_earned": 0 + "name": "Achievement_20" }, { "description": "Complete Evacuation Point on Survival Hard difficulty", "displayName": "Unsinkable II", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3b2a9c5c63aad9b5f0a43f93424e0f29c8c6deb9.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_21", - "time_earned": 0 + "name": "Achievement_21" }, { "description": "Complete Evacuation Point on Survival Suicidal difficulty", "displayName": "Bow Movement", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4b22d317141e729496ec00a2f0f7bc6a8a3146f2.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_22", - "time_earned": 0 + "name": "Achievement_22" }, { "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", "displayName": "Seas The Day", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b64bf6337277640aa8f455aed9d210168a7ce414.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_23", - "time_earned": 0 + "name": "Achievement_23" }, { "description": "Complete Catacombs on Survival Normal difficulty", "displayName": "A Light In The Darkness", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d2908401103ad32380e3cf3525dafc45a1691306.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_24", - "time_earned": 0 + "name": "Achievement_24" }, { "description": "Complete Catacombs on Survival Hard difficulty", "displayName": "This Is No Mine", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1b79ab127fcaba5394686438c187275672fa62e3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_25", - "time_earned": 0 + "name": "Achievement_25" }, { "description": "Complete Catacombs on Survival Suicidal difficulty", "displayName": "This Is A Tomb, Theirs", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72a312fa2a311a0d57ba43d5d0ff5324560bd954.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_26", - "time_earned": 0 + "name": "Achievement_26" }, { "description": "Complete Catacombs on Survival Hell On Earth difficulty", "displayName": "They Shall Not Pass", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4770075a39f42f45b4fa7cf8f4c2e9c377633a0.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_27", - "time_earned": 0 + "name": "Achievement_27" }, { "description": "Collect all the items on Evacuation Point", "displayName": "Point Paper", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8946b527da24edc10caea62e796b1b43420f736b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_28", - "time_earned": 0 + "name": "Achievement_28" }, { "description": "Collect all the items on Catacombs", "displayName": "Catacombs Cash", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/daa37be2677f123e123bf39b945e996fb8758c45.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_29", - "time_earned": 0 + "name": "Achievement_29" }, { "description": "Reach Level 5 Berserker", "displayName": "Reach Level 5 Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ec445dee4f5bfcfca9e132ff680068e02c80983a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_30", - "time_earned": 0 + "name": "Achievement_30" }, { "description": "Reach Level 10 Berserker", "displayName": "Reach Level 10 Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b2a3fc6e4112e667d045e7a0e3d1d229afe9273.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_31", - "time_earned": 0 + "name": "Achievement_31" }, { "description": "Reach Level 15 Berserker", "displayName": "Reach Level 15 Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77fcacad378a8b65c6a1a40149a0bb41e571d252.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_32", - "time_earned": 0 + "name": "Achievement_32" }, { "description": "Reach Level 20 Berserker", "displayName": "Reach Level 20 Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/edcb6d683a8cdb6dd29bd6dfa6c4887aedf886ef.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_33", - "time_earned": 0 + "name": "Achievement_33" }, { "description": "Reach Level 25 Berserker", "displayName": "Reach Level 25 Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c0797935113227a8a7d60cdd76dfe1d272bd9c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_34", - "time_earned": 0 + "name": "Achievement_34" }, { "description": "Reach Level 5 Medic", "displayName": "Reach Level 5 Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f81cafc2e08f2373cf4a5a4feb8ebc9d42609f52.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_35", - "time_earned": 0 + "name": "Achievement_35" }, { "description": "Reach Level 10 Medic", "displayName": "Reach Level 10 Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfa49ae2939448e3eae52e6ef5d88a8d3e8cee5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_36", - "time_earned": 0 + "name": "Achievement_36" }, { "description": "Reach Level 15 Medic", "displayName": "Reach Level 15 Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9d05bece5bdc0c4a919629378aa8d0a838b01548.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_37", - "time_earned": 0 + "name": "Achievement_37" }, { "description": "Reach Level 20 Medic", "displayName": "Reach Level 20 Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8dcf9baa3420738cea516dfbb148d822b8cbc5c9.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_38", - "time_earned": 0 + "name": "Achievement_38" }, { "description": "Reach Level 25 Medic", "displayName": "Reach Level 25 Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/908b077bf03a98b6731c68d78bfb4071bb112604.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_39", - "time_earned": 0 + "name": "Achievement_39" }, { "description": "Reach Level 5 Commando", "displayName": "Reach Level 5 Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59df9bded3394b3658929b5c0d6c4ef94d544bc3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_40", - "time_earned": 0 + "name": "Achievement_40" }, { "description": "Reach Level 10 Commando", "displayName": "Reach Level 10 Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0052ebf1633c386974865ee696606c9fa003ff10.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_41", - "time_earned": 0 + "name": "Achievement_41" }, { "description": "Reach Level 15 Commando", "displayName": "Reach Level 15 Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a211f3fb884248955eb1608987882372c44be91.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_42", - "time_earned": 0 + "name": "Achievement_42" }, { "description": "Reach Level 20 Commando", "displayName": "Reach Level 20 Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46e7a0273fe5e82f4cbf6a650e8e9b519651ed46.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_43", - "time_earned": 0 + "name": "Achievement_43" }, { "description": "Reach Level 25 Commando", "displayName": "Reach Level 25 Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ea698f23e293f79e28ad83c710820c86c30e8639.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_44", - "time_earned": 0 + "name": "Achievement_44" }, { "description": "Reach Level 5 Support", "displayName": "Reach Level 5 Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8405e32f8bd371eb86b2d2c969efaba94d1b0076.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_45", - "time_earned": 0 + "name": "Achievement_45" }, { "description": "Reach Level 10 Support", "displayName": "Reach Level 10 Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d9f35337082a2acb1893cc3976a0bdfcc670eef2.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_46", - "time_earned": 0 + "name": "Achievement_46" }, { "description": "Reach Level 15 Support", "displayName": "Reach Level 15 Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77627b9cf8a5ff535bc4cc0b1afb8dceeaa89dcc.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_47", - "time_earned": 0 + "name": "Achievement_47" }, { "description": "Reach Level 20 Support", "displayName": "Reach Level 20 Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87d64c361dbacf7bb024abbfa1cb379b86e91989.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_48", - "time_earned": 0 + "name": "Achievement_48" }, { "description": "Reach Level 25 Support", "displayName": "Reach Level 25 Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a435a108d19908931941b652c758534d0147ce2.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_49", - "time_earned": 0 + "name": "Achievement_49" }, { "description": "Reach Level 5 Firebug", "displayName": "Reach Level 5 Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e6db9d05a3d33d94868e43f0a7034ecdb3ad840.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_50", - "time_earned": 0 + "name": "Achievement_50" }, { "description": "Reach Level 10 Firebug", "displayName": "Reach Level 10 Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/23ca75c49075bfd65d1a262b8e42d9c021b311ef.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_51", - "time_earned": 0 + "name": "Achievement_51" }, { "description": "Reach Level 15 Firebug", "displayName": "Reach Level 15 Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1cbb261b23edfea921a280c099d76f88dbd872a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_52", - "time_earned": 0 + "name": "Achievement_52" }, { "description": "Reach Level 20 Firebug", "displayName": "Reach Level 20 Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e133456760dd3f8148b9ec1417371c6ecebe62f5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_53", - "time_earned": 0 + "name": "Achievement_53" }, { "description": "Reach Level 25 Firebug", "displayName": "Reach Level 25 Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2488d37177ef8c82d03ac5bf7eb43fe774518c11.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_54", - "time_earned": 0 + "name": "Achievement_54" }, { "description": "Reach Level 5 Demolitions", "displayName": "Reach Level 5 Demolitions", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f8ff68113d42586d47a3f8b8120a16f40794699b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_55", - "time_earned": 0 + "name": "Achievement_55" }, { "description": "Reach Level 10 Demolitions", "displayName": "Reach Level 10 Demolitions", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2664d73ed43ef164935a580a295bbf1e9e4e8de.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_56", - "time_earned": 0 + "name": "Achievement_56" }, { "description": "Reach Level 15 Demolitions", "displayName": "Reach Level 15 Demolitions", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dda8becc826584df747b1db31c1f36d8fe4a827e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_57", - "time_earned": 0 + "name": "Achievement_57" }, { "description": "Reach Level 20 Demolitions", "displayName": "Reach Level 20 Demolitions", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/97e880c18ee6117082b2fbf43e2c7f6b170fa5f8.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_58", - "time_earned": 0 + "name": "Achievement_58" }, { "description": "Reach Level 25 Demolitions", "displayName": "Reach Level 25 Demolitions", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ae40a49979e39239251944daaee0eb6a1e72603d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_59", - "time_earned": 0 + "name": "Achievement_59" }, { "description": "Reach Level 5 Gunslinger", "displayName": "Reach Level 5 Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6dc5ed68550025c39e585746f5f9386e38661758.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_60", - "time_earned": 0 + "name": "Achievement_60" }, { "description": "Reach Level 10 Gunslinger", "displayName": "Reach Level 10 Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9a79962091ac4c31ea093da1edb1c3b0f47d129b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_61", - "time_earned": 0 + "name": "Achievement_61" }, { "description": "Reach Level 15 Gunslinger", "displayName": "Reach Level 15 Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7fb6931c29993732579b4cd3d8e9daab9a09f0ca.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_62", - "time_earned": 0 + "name": "Achievement_62" }, { "description": "Reach Level 20 Gunslinger", "displayName": "Reach Level 20 Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/815dec2cee244bec1fd47ddcc4393276c0463ff9.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_63", - "time_earned": 0 + "name": "Achievement_63" }, { "description": "Reach Level 25 Gunslinger", "displayName": "Reach Level 25 Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cc7a9b384ed3897cc74fade28cde0e0c2c95b0ce.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_64", - "time_earned": 0 + "name": "Achievement_64" }, { "description": "Beat Any One Map as Berserker on Normal Difficulty", "displayName": "Normal Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36cc13be1928003332588ad18221760939c1dce3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_65", - "time_earned": 0 + "name": "Achievement_65" }, { "description": "Beat Any One Map as Berserker on Hard Difficulty", "displayName": "Hard Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/880c29a1d0131e4ecd8e863040e17bf504da9f2b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_66", - "time_earned": 0 + "name": "Achievement_66" }, { "description": "Beat Any One Map as Berserker on Suicidal Difficulty", "displayName": "Suicidal Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1916652e0bc1aeeaa0d3b13031fa8bb67b4a4737.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_67", - "time_earned": 0 + "name": "Achievement_67" }, { "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", "displayName": "Hellish Berserker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5134cbc5bab84d4fc20ada8bc9b51c6c742fffec.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_68", - "time_earned": 0 + "name": "Achievement_68" }, { "description": "Beat Any One Map as Medic on Normal Difficulty", "displayName": "Normal Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4839101153acbfda639e129955f4ad766cd24ee3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_69", - "time_earned": 0 + "name": "Achievement_69" }, { "description": "Beat Any One Map as Medic on Hard Difficulty", "displayName": "Hard Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4f2fc7260bbd80517e4ddc089ead393fee197a6a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_70", - "time_earned": 0 + "name": "Achievement_70" }, { "description": "Beat Any One Map as Medic on Suicidal Difficulty", "displayName": "Suicidal Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74bfb721ee43daade7c92e83593e2633d1531016.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_71", - "time_earned": 0 + "name": "Achievement_71" }, { "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", "displayName": "Hellish Medic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bbf40f4f99ddd1251494c45cf44436fc3032364e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_72", - "time_earned": 0 + "name": "Achievement_72" }, { "description": "Complete any map as a Commando on Survival Normal difficulty", "displayName": "Normal Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a8c0c6211e1314c175b8e5dd2785c79d97e8480.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_73", - "time_earned": 0 + "name": "Achievement_73" }, { "description": "Complete any map as a Commando on Survival Hard difficulty", "displayName": "Hard Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b44f5d459d8b35a7383718ea39540b8aed9f1d28.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_74", - "time_earned": 0 + "name": "Achievement_74" }, { "description": "Complete any map as a Commando on Survival Suicidal difficulty", "displayName": "Suicidal Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3d5b0e7ae171e6abd460c512bf7afaad20cb9c53.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_75", - "time_earned": 0 + "name": "Achievement_75" }, { "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", "displayName": "Hellish Commando", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e08ae8778751acbcf861ee08f3b9803d3181f34f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_76", - "time_earned": 0 + "name": "Achievement_76" }, { "description": "Complete any map as a Support on Survival Normal difficulty", "displayName": "Normal Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f18256b3f3ddee86f22b477be44e0093f6d1897d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_77", - "time_earned": 0 + "name": "Achievement_77" }, { "description": "Complete any map as a Support on Survival Hard difficulty", "displayName": "Hard Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4ad83923f2f9638896fe49aa80b04f11a80bd6db.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_78", - "time_earned": 0 + "name": "Achievement_78" }, { "description": "Complete any map as a Support on Survival Suicidal difficulty", "displayName": "Suicidal Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb55f2e2431b03b787ca803bd8ebb09ba4d0fbdd.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_79", - "time_earned": 0 + "name": "Achievement_79" }, { "description": "Complete any map as a Support on Survival Hell On Earth difficulty", "displayName": "Hellish Support", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c483d17dea8fedf4b013c3b8a1f3a86ed7c53a1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_80", - "time_earned": 0 + "name": "Achievement_80" }, { "description": "Complete any map as a Firebug on Survival Normal difficulty", "displayName": "Normal Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d787f7a96c2396e035bfae8415739dd3ec53ce69.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_81", - "time_earned": 0 + "name": "Achievement_81" }, { "description": "Complete any map as a Firebug on Survival Hard difficulty", "displayName": "Hard Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/924384c8d486ef91bf856c25edd258e29b7243d5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_82", - "time_earned": 0 + "name": "Achievement_82" }, { "description": "Complete any map as a Firebug on Survival Suicidal difficulty", "displayName": "Suicidal Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0372e445fd1ad3208f784c254192a5b07ca00e94.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_83", - "time_earned": 0 + "name": "Achievement_83" }, { "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", "displayName": "Hellish Firebug", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/41e8861feba48471f3677b706c259ab7cc3c6ec1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_84", - "time_earned": 0 + "name": "Achievement_84" }, { "description": "Complete any map as a Demolitionist on Survival Normal difficulty", "displayName": "Normal Demolition", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba1d7d23335daf81fa6358a296219983d5c41d1a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_85", - "time_earned": 0 + "name": "Achievement_85" }, { "description": "Complete any map as a Demolitionist on Survival Hard difficulty", "displayName": "Hard Demolition", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2d72fe0b205be4a7c58f1a2f0560e7390fea1f5d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_86", - "time_earned": 0 + "name": "Achievement_86" }, { "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", "displayName": "Suicidal Demolition", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/68c99c300525c4b0524f9d1df77d54bab2b91b5f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_87", - "time_earned": 0 + "name": "Achievement_87" }, { "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", "displayName": "Hellish Demolition", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f3e2fa5c5bf2fd11d3646cf4046fcd46f6fcea6f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_88", - "time_earned": 0 + "name": "Achievement_88" }, { "description": "Complete any map as a Gunslinger on Survival Normal difficulty", "displayName": "Normal Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fd2324d876a594a4a5e64a8e7e6912d41a334a30.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_89", - "time_earned": 0 + "name": "Achievement_89" }, { "description": "Complete any map as a Gunslinger on Survival Hard difficulty", "displayName": "Hard Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74f2431f94c6ecc6639f6af75f4a02f12b2e164d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_90", - "time_earned": 0 + "name": "Achievement_90" }, { "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", "displayName": "Suicidal Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35cc28c801142cd4e1e8c64c4f8f747e13761420.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_91", - "time_earned": 0 + "name": "Achievement_91" }, { "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", "displayName": "Hellish Gunslinger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77b47b409488fe21a216cef5d279ac6293bb0b5e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_92", - "time_earned": 0 + "name": "Achievement_92" }, { "description": "Reach Level 25 in all Perks", "displayName": "Perked Up", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36350fb27669319b6c3ec26304250c9ff76b8a13.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_93", - "time_earned": 0 + "name": "Achievement_93" }, { "description": "Complete Black Forest on Survival Normal difficulty", "displayName": "Killer Korn", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b69373a99d3d8d3216b09402a9896f5f29009564.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_94", - "time_earned": 0 + "name": "Achievement_94" }, { "description": "Complete Black Forest on Survival Hard difficulty", "displayName": "Lager Me Up", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/657bf135a2bbf040370e9b4f73f8dbb74c5f0022.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_95", - "time_earned": 0 + "name": "Achievement_95" }, { "description": "Complete Black Forest on Survival Suicidal difficulty", "displayName": "I'll Dopple Bock", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da1fb07964ecc32315a797b1c825d8562bb86113.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_96", - "time_earned": 0 + "name": "Achievement_96" }, { "description": "Complete Black Forest on Survival Hell On Earth difficulty", "displayName": "Kein Bier Vor Vier", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5284866c575c132f4d4c838d8c380b5c731e05b6.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_97", - "time_earned": 0 + "name": "Achievement_97" }, { "description": "Collect all the items on Black Forest", "displayName": "Black Forest Babies", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b8f2d33dbc9f884b8de60ea4573cf8cdf737d6d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_98", - "time_earned": 0 + "name": "Achievement_98" }, { "description": "Beat Farmhouse on Normal Difficulty", "displayName": "Plow the Field", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46cef619b81b1c389955bc1442c346a1b966431c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_99", - "time_earned": 0 + "name": "Achievement_99" }, { "description": "Beat Farmhouse on Hard Difficulty", "displayName": "Sow the Seed", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e20c6ea4e34b7953f9ea0982ad11835fa11ac9e9.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_100", - "time_earned": 0 + "name": "Achievement_100" }, { "description": "Beat Farmhouse on Suicidal Difficulty", "displayName": "Water the Crops", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a2da718294f17bc3fc0e06dac6e64c4942e691c4.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_101", - "time_earned": 0 + "name": "Achievement_101" }, { "description": "Beat Farmhouse on Hell on Earth Difficulty", "displayName": "Reap what you Sow", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7beeff9f0fb5fc641f2ad9d986db7cab1cb93486.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_102", - "time_earned": 0 + "name": "Achievement_102" }, { "description": "Collect all the items on Farmhouse", "displayName": "Darkness Dolls", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21abe9ca2790fed3a4f400bb82171de07460309e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_103", - "time_earned": 0 + "name": "Achievement_103" }, { "description": "Beat Prison on Normal", "displayName": "Walked into the wrong room", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/10b030dec54a8de662134975904e4b18546d2f8b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_104", - "time_earned": 0 + "name": "Achievement_104" }, { "description": "Beat Prison on Hard", "displayName": "Mercenaries get paid", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e10da3181de7bd0845b7a77d5f70dc83aae746fa.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_105", - "time_earned": 0 + "name": "Achievement_105" }, { "description": "Beat Prison on Suicidal", "displayName": "Like what, kill him again?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ed1d9b6092c89566a47c9593506f5dec889b9403.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_106", - "time_earned": 0 + "name": "Achievement_106" }, { "description": "Beat Prison on Hell on Earth", "displayName": "I was trained by the best. British Intel.", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca6f43274c132cf9d995591fb4045aa5c57709c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_107", - "time_earned": 0 + "name": "Achievement_107" }, { "description": "Collect all the items on Prison", "displayName": "Perilous Prison", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95c90482f7da7e7759fb68200f71d3b784e1396d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_108", - "time_earned": 0 + "name": "Achievement_108" }, { "description": "Complete the Training Floor", "displayName": "School's Out Forever", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/66f5309ba8030f4f5dc5f1c15e1db4dad14ffbb1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_109", - "time_earned": 0 + "name": "Achievement_109" }, { "description": "Reach Level 5 Sharpshooter", "displayName": "Reach Level 5 Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/023f4f3f8b8b45547a7c0bd9a1ac409cb262fbe8.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_110", - "time_earned": 0 + "name": "Achievement_110" }, { "description": "Reach Level 10 Sharpshooter", "displayName": "Reach Level 10 Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ca9c4dea499a0212dd521cbf872715b54aa22018.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_111", - "time_earned": 0 + "name": "Achievement_111" }, { "description": "Reach Level 15 Sharpshooter", "displayName": "Reach Level 15 Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c7a93ae33709f3e087c2d73b580ab71be443515.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_112", - "time_earned": 0 + "name": "Achievement_112" }, { "description": "Reach Level 20 Sharpshooter", "displayName": "Reach Level 20 Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/00d137f6217d596365635659f788f81a12a56cc7.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_113", - "time_earned": 0 + "name": "Achievement_113" }, { "description": "Reach Level 25 Sharpshooter", "displayName": "Reach Level 25 Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1010a85f23b67a0ed426f76827dc71a47c898e91.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_114", - "time_earned": 0 + "name": "Achievement_114" }, { "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", "displayName": "Normal Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/50e428ecaeb5ea710a68de937ab6db91871b8e06.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_115", - "time_earned": 0 + "name": "Achievement_115" }, { "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", "displayName": "Hard Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/378eb9e717b7405b636c74a504ef1548d47b1087.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_116", - "time_earned": 0 + "name": "Achievement_116" }, { "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", "displayName": "Suicidal Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/92ecee481d00897d6bd2d0526fd34fad7dd4dac2.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_117", - "time_earned": 0 + "name": "Achievement_117" }, { "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", "displayName": "Hellish Sharpshooter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/37762c27fa85c5bfea8793d99760979c383105a1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_118", - "time_earned": 0 + "name": "Achievement_118" }, { "description": "Complete Containment Station on Survival Normal difficulty", "displayName": "Never Got the Hang of Thursdays", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c72b7326246881b9d9e4c2a446f75fa5709455b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_119", - "time_earned": 0 + "name": "Achievement_119" }, { "description": "Complete Containment Station on Survival Hard difficulty", "displayName": "Don't Panic", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7874cadae34f3a5adea32253491d2c9264a119f7.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_120", - "time_earned": 0 + "name": "Achievement_120" }, { "description": "Complete Containment Station on Survival Suicidal difficulty", "displayName": "Give Up and Go Mad Now", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/258ebf7dee2742339bbdc3ced7609ddbe4c33517.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_121", - "time_earned": 0 + "name": "Achievement_121" }, { "description": "Complete Containment Station on Survival Hell On Earth difficulty", "displayName": "So Long and Thanks for All the Zeds", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a9313fc5d346da24302330d8784dcf7143b5c143.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_122", - "time_earned": 0 + "name": "Achievement_122" }, { "description": "Collect All the Items on Containment Station", "displayName": "Can't Be Contained", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffbbbe46c760cbed9d23cb5e53bf875384da70ee.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_123", - "time_earned": 0 + "name": "Achievement_123" }, { "description": "Complete Hostile Grounds on Survival Normal difficulty", "displayName": "Mind the Gap", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2de6a1efe33cabc68b9ddc4bbc831a32bc4bc50.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_124", - "time_earned": 0 + "name": "Achievement_124" }, { "description": "Complete Hostile Grounds on Survival Hard difficulty", "displayName": "Can't Make an Omelette Without Killing a Few People", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/69d31dd091f48198d692aa5bdb64e07cf52a92a3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_125", - "time_earned": 0 + "name": "Achievement_125" }, { "description": "Complete Hostile Grounds on Survival Suicidal difficulty", "displayName": "There Is No I in Team, But There Is an I in Pie", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bfcfa4a2fe2399e53034b696436610b0205540c8.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_126", - "time_earned": 0 + "name": "Achievement_126" }, { "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e3c20ee2ab91c0172796eac857bde8d7de639188.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_127", - "time_earned": 0 + "name": "Achievement_127" }, { "description": "Collect All the Items on Hostile Grounds", "displayName": "You've Got Red on You", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/020adbeabf8554ba8fe763cbb3c08df037a4965a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_128", - "time_earned": 0 + "name": "Achievement_128" }, { "description": "Kill a Siren Before She Screams", "displayName": "Dead Silence", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/08e4690859d94699a73a80e5589fb0b8c799fa1c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_129", - "time_earned": 0 + "name": "Achievement_129" }, { "description": "Kill the Patriarch Before He Has a Chance to Heal", "displayName": "Quick on the Trigger", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6fdfdd1f09fb91e90a1b25cb83a5421ae81a2cb5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_130", - "time_earned": 0 + "name": "Achievement_130" }, { "description": "Kill Your First Fleshpound", "displayName": "It's Only a Flesh Wound", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/03ff0be17f0e56d8e312aa117844f27f134c47af.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_131", - "time_earned": 0 + "name": "Achievement_131" }, { "description": "Kill Your First Scrake", "displayName": "Hack and Slash", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfc51c010c7198347da1a22e1ce51d47f5ff13c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_132", - "time_earned": 0 + "name": "Achievement_132" }, { "description": "Kill Dr. Hans Volter For the First Time", "displayName": "Die Volter", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6f07eab287060d5516082afa7e3a7772017fe75c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_133", - "time_earned": 0 + "name": "Achievement_133" }, { "description": "Win Any Match on Hard Difficulty", "displayName": "Win Hard", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/be68c7423f778e6a2fc636b4dc2e20942c6f0c68.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_134", - "time_earned": 0 + "name": "Achievement_134" }, { "description": "Win Any Match on Suicidal Difficulty", "displayName": "Win Suicidal", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3f199fbc299b56e873bb1bfb2d1726d88db3bbe6.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_135", - "time_earned": 0 + "name": "Achievement_135" }, { "description": "Win Any Match on Hell on Earth Difficulty", "displayName": "Win Hell on Earth", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35c0be17200bacee8c54fbe87f16e8f27a82a181.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_136", - "time_earned": 0 + "name": "Achievement_136" }, { "description": "Reach Level 5 on Any Perk", "displayName": "Mr. Perky 5", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/75ff6bda27bc5f21d0f5aa096305e66b87129871.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_137", - "time_earned": 0 + "name": "Achievement_137" }, { "description": "Reach Level 10 on Any Perk", "displayName": "Mr. Perky 10", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b63768e9a813a14111cc4eeb283a0833db88874.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_138", - "time_earned": 0 + "name": "Achievement_138" }, { "description": "Reach Level 15 on Any Perk", "displayName": "Mr. Perky 15", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/26c3035ca19855e765ad032d1de71fe64ae153e9.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_139", - "time_earned": 0 + "name": "Achievement_139" }, { "description": "Reach Level 20 on Any Perk", "displayName": "Mr. Perky 20", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/99a2fb3824c9f1eb2c607e22da9b4109cee0124f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_140", - "time_earned": 0 + "name": "Achievement_140" }, { "description": "Reach Level 25 on Any Perk", "displayName": "Mr. Perky 25", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9aa58d0c8f2f80e8250bb75aa4de09ffba6da5b5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_141", - "time_earned": 0 + "name": "Achievement_141" }, { "description": "Win 1 Multiplayer Match", "displayName": "Win 1", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/93aee896270cac79fb5ae36375c92091b57e9707.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_142", - "time_earned": 0 + "name": "Achievement_142" }, { "description": "Win 10 Multiplayer Matches", "displayName": "Win 10", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5ac2c4dcfc8e708bce22d43c8fa0a28bc5f63177.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_143", - "time_earned": 0 + "name": "Achievement_143" }, { "description": "Win 25 Multiplayer Matches", "displayName": "Win 25", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/361fe6cb30916a4b3785ea0431b7df56bca3e111.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_144", - "time_earned": 0 + "name": "Achievement_144" }, { "description": "Win a VS Survival Round Playing as the Zeds", "displayName": "VS Zed Win", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/992d3a5c5c8d736cd26ef8ce2f371eeea33a8469.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_145", - "time_earned": 0 + "name": "Achievement_145" }, { "description": "Win a VS Survival Round Playing as the Humans", "displayName": "VS Human Win", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af8cdf129ec3eaa218ca706105ed329792893872.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_146", - "time_earned": 0 + "name": "Achievement_146" }, { "description": "Weld a Door to 100%", "displayName": "Hold Out", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5b03919fefaa82dc87765dc29961e4fd3816acb.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_147", - "time_earned": 0 + "name": "Achievement_147" }, { "description": "Heal a Teammate With the Syringe", "displayName": "I Got Your Back", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a873278bb202e325e5073ae542ebabf0dd276236.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_148", - "time_earned": 0 + "name": "Achievement_148" }, { "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", "displayName": "Benefactor", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7b07b668e976c865c0a2ad8707149d43f9652ef6.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_149", - "time_earned": 0 + "name": "Achievement_149" }, { "description": "Beat Infernal Realms on Normal", "displayName": "Hell is Other People", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/27b51a5f9b9795e0e2e90d0784c31e70d7047f3c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_150", - "time_earned": 0 + "name": "Achievement_150" }, { "description": "Complete Infernal Realms on Survival Hard difficulty", "displayName": "If You Are Going Through Hell, Keep Going", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a062da8ad5b21973ff9913dfeede3b05c81dc19c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_151", - "time_earned": 0 + "name": "Achievement_151" }, { "description": "Complete Infernal Realms on Survival Suicidal difficulty", "displayName": "Hell is Just a Frame of Mind", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ac0d5107bbe97948e7642300b3503e0d91bcee3b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_152", - "time_earned": 0 + "name": "Achievement_152" }, { "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", "displayName": "All Hope abandon, Ye Who Enter Here", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/210ab00c89581caf7ffe220078d9ab9506f0dabd.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_153", - "time_earned": 0 + "name": "Achievement_153" }, { "description": "Collect all the Items in Infernal Realms", "displayName": "Infernal Relics", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c81f20349851c9b12ea9fba2116d4458c8bb309.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_154", - "time_earned": 0 + "name": "Achievement_154" }, { "description": "Reach Level 5 SWAT", "displayName": "Reach Level 5 SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6919e017b0389e4e4f80b94a282bd10b88632567.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_155", - "time_earned": 0 + "name": "Achievement_155" }, { "description": "Reach Level 10 SWAT", "displayName": "Reach Level 10 SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba0a2d8bea98c36f402cf72ff59a17a6ea8a5097.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_156", - "time_earned": 0 + "name": "Achievement_156" }, { "description": "Reach Level 15 SWAT", "displayName": "Reach Level 15 SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/07b4a6889ba0f960360b16c6a2c528b2802c8c0d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_157", - "time_earned": 0 + "name": "Achievement_157" }, { "description": "Reach Level 20 SWAT", "displayName": "Reach Level 20 SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0577ad2c3987fa0186aaa017fa5c25c75c281133.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_158", - "time_earned": 0 + "name": "Achievement_158" }, { "description": "Reach Level 25 SWAT", "displayName": "Reach Level 25 SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c7655f2d1f275bc77e73b85a02d921f9e29d3031.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_159", - "time_earned": 0 + "name": "Achievement_159" }, { "description": "Complete any map as a SWAT on Survival Normal difficulty", "displayName": "Normal SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b9a7646537a74042db00c7c46b58463c12331ad.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_160", - "time_earned": 0 + "name": "Achievement_160" }, { "description": "Beat Any One Map as SWAT on Hard Difficulty", "displayName": "Hard SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a43a6bb8e914126587b1419879ff3d95b83ec6f6.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_161", - "time_earned": 0 + "name": "Achievement_161" }, { "description": "Beat Any One Map as SWAT on Suicidal Difficulty", "displayName": "Suicidal SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af9bbfa27fa159b8ea469ee79ba525bdbcf07b6e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_162", - "time_earned": 0 + "name": "Achievement_162" }, { "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", "displayName": "Hellish SWAT", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a86755764baed752a896d2c8cd524bd20e1d6c57.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_163", - "time_earned": 0 + "name": "Achievement_163" }, { "description": "Reach Level 5 Survivalist", "displayName": "Reach Level 5 Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5c730159237de25db37bbba7ac8b899ba9b92f28.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_164", - "time_earned": 0 + "name": "Achievement_164" }, { "description": "Reach Level 10 Survivalist", "displayName": "Reach Level 10 Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c87bbe270e7a60494f0d6a46a173f48e8e90f266.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_165", - "time_earned": 0 + "name": "Achievement_165" }, { "description": "Reach Level 15 Survivalist", "displayName": "Reach Level 15 Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0fc03a0b9535d3f31d8cfe3055e905e7cda85939.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_166", - "time_earned": 0 + "name": "Achievement_166" }, { "description": "Reach Level 20 Survivalist", "displayName": "Reach Level 20 Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f9526579c6b4f52621b85c5913ff8773940fed11.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_167", - "time_earned": 0 + "name": "Achievement_167" }, { "description": "Reach Level 25 Survivalist", "displayName": "Reach Level 25 Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a472196ec80ad363c21e1bac0206061a8ec6e1e1.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_168", - "time_earned": 0 + "name": "Achievement_168" }, { "description": "Beat Any One Map as Survivalist on Normal Difficulty", "displayName": "Normal Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4c78a847b3842fac7ea587a603594d9a39ffc8a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_169", - "time_earned": 0 + "name": "Achievement_169" }, { "description": "Complete any map as a Survivalist on Survival Hard difficulty", "displayName": "Hard Survivalist ", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/17c50c8adff85ea28e3cbd3b7fa31d387efb3eff.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_170", - "time_earned": 0 + "name": "Achievement_170" }, { "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", "displayName": "Suicidal Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/accaa92454ffe35037f67c63c03ebb9544eec484.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_171", - "time_earned": 0 + "name": "Achievement_171" }, { "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", "displayName": "Hellish Survivalist", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a90fc7ad76f58c1278097f3a351001438c62327.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_172", - "time_earned": 0 + "name": "Achievement_172" }, { "description": "Complete Zed Landing on Survival Normal difficulty", "displayName": "Surfs Up", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e1c100915ffb91be6090459fdcda997a31fe62f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_173", - "time_earned": 0 + "name": "Achievement_173" }, { "description": "Complete Zed Landing on Survival Hard difficulty", "displayName": "Gnarly", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1d855a17989f39be054443c9277c90907eff1f8d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_174", - "time_earned": 0 + "name": "Achievement_174" }, { "description": "Complete Zed Landing on Survival Suicidal difficulty", "displayName": "Close-out", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25a425379ed71d99787c091fa7a24e507c2eecac.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_175", - "time_earned": 0 + "name": "Achievement_175" }, { "description": "Complete Zed Landing on Survival Hell On Earth difficulty", "displayName": "Blown Out", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d5f30aa2ff0b4a3e080eab4a61e202a87cf1775.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_176", - "time_earned": 0 + "name": "Achievement_176" }, { "description": "Collect all the volley balls on Zed Landing", "displayName": "ALAN!!!!!!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffad0d1970b1b8813ba164cd4465fc4de9b271eb.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_177", - "time_earned": 0 + "name": "Achievement_177" }, { "description": "Complete The Descent on Survival Normal difficulty", "displayName": "How Bout Some Gas?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02f005688d599e8f655a6d41a65751031c1a4392.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_178", - "time_earned": 0 + "name": "Achievement_178" }, { "description": "Complete The Descent on Survival Hard difficulty", "displayName": "But what if we added Gas?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84848cab1b952d23328637f81e45b69aeda38ded.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_179", - "time_earned": 0 + "name": "Achievement_179" }, { "description": "Complete The Descent on Survival Suicidal difficulty", "displayName": "Let's Try Some Gas", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d6d7a2ce4b36b10b27946e972b3b7184f2226069.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_180", - "time_earned": 0 + "name": "Achievement_180" }, { "description": "Complete The Descent on Survival Hell On Earth difficulty", "displayName": "That's enough gas....", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e2ab1da79c801e23fba287c2fccc548bdbf0026.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_181", - "time_earned": 0 + "name": "Achievement_181" }, { "description": "Collect all the items on The Descent", "displayName": "Hans Off the Merchandise", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21ab02dcc7dc02c09b5e65a82fcdfa200a96a0db.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_182", - "time_earned": 0 + "name": "Achievement_182" }, { "description": "Complete Nuked on Survival Normal difficulty", "displayName": "The War Room", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2a96570f609cf5842a31691e5cc8c0a800907786.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_183", - "time_earned": 0 + "name": "Achievement_183" }, { "description": "Complete Nuked on Survival Hard difficulty", "displayName": "The Mineshaft Gap", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c28acbddf4b6bed6d2ad1ec7536b1160e3b056.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_184", - "time_earned": 0 + "name": "Achievement_184" }, { "description": "Complete Nuked on Survival Suicidal difficulty", "displayName": "Peace is Our Profession", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e759bb1400427742feb5d39e715e6c956c11987a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_185", - "time_earned": 0 + "name": "Achievement_185" }, { "description": "Complete Nuked on Survival Hell On Earth difficulty", "displayName": "How I Learned to Love the Bomb", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c42d2d9c5eb25d2c2c4a58dddd8084f470892e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_186", - "time_earned": 0 + "name": "Achievement_186" }, { "description": "Collect all the items on Nuked", "displayName": "Davy Crockett", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c16a98ee7a9a777730733ca1ec1cda2391fb89c7.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_187", - "time_earned": 0 + "name": "Achievement_187" }, { "description": "Complete Tragic Kingdom on Survival Normal difficulty", "displayName": "It's a Bloody World After All", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0803a7e5a71920b9aa9c08e71eb381a9eda6e12.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_188", - "time_earned": 0 + "name": "Achievement_188" }, { "description": "Complete Tragic Kingdom on Survival Hard difficulty", "displayName": "The Goriest Place on Earth", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e2f6339b665184291d2987a3a48a5dbfb4b54c0e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_189", - "time_earned": 0 + "name": "Achievement_189" }, { "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", "displayName": "The House the Zed Built", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/85f0612297393d567d8ff712fa324dabb0c269fb.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_190", - "time_earned": 0 + "name": "Achievement_190" }, { "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", "displayName": "Where Nightmares Come True", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f68565b02007c17260805be1d5bb3c55271e1cb3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_191", - "time_earned": 0 + "name": "Achievement_191" }, { "description": "Collect all the items on The Tragic Kingdom", "displayName": "The Wonderful World of Merchandising", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/79ad35a7fe93d31661bd54825571708545e43210.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_192", - "time_earned": 0 + "name": "Achievement_192" }, { "description": "Beat Nightmare on Normal", "displayName": "I Got a Rock", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1777445a1bc01a5c39a75c7167df6359edd5f26e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_193", - "time_earned": 0 + "name": "Achievement_193" }, { "description": "Beat Nightmare on Hard", "displayName": "Yuck, Candy Corn", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fb9b4f18d7f58d43295ee571cae5c821a5f12836.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_194", - "time_earned": 0 + "name": "Achievement_194" }, { "description": "Beat Nightmare on Suicidal", "displayName": "Fun Size? What is Fun Size?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53e20884174ea4717588f5a7c324d1a02d207dae.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_195", - "time_earned": 0 + "name": "Achievement_195" }, { "description": "Beat Nightmare on Hell on Earth", "displayName": "Victory! Full Size Candy Bar!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c69b7865a24dcc827d5ea44ac166907b8f08b4ad.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_196", - "time_earned": 0 + "name": "Achievement_196" }, { "description": "Collect all the items (skulls) on Nightmare", "displayName": "Letting the Demons Out", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/874e1f46efd7b59e66485ee1b9b4b5765bcab692.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_197", - "time_earned": 0 + "name": "Achievement_197" }, { "description": "Beat Krampus Lair on Normal", "displayName": "Stocking Full of Coal", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ff769cc651d4be77250428a4b6d4e0a254015b11.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_198", - "time_earned": 0 + "name": "Achievement_198" }, { "description": "Beat Krampus Lair on Hard", "displayName": "Bundle of Switches", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84082b5ce17368ef1e6a1d9e78174866674686ba.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_199", - "time_earned": 0 + "name": "Achievement_199" }, { "description": "Beat Krampus Lair on Suicidal", "displayName": "A Whupping", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fe7e707e5ad19ef5e0dd9152a6d1b3ddeb59d883.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_200", - "time_earned": 0 + "name": "Achievement_200" }, { "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", "displayName": "Carried off to the Underworld", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c318550b2c02db9532d6051dd3af1f855cd87f5e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_201", - "time_earned": 0 + "name": "Achievement_201" }, { "description": "Collect all the items (Snowglobes) on Krampus Lair", "displayName": "A World Under Glass", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_202", - "time_earned": 0 + "name": "Achievement_202" }, { "description": "Complete DieSector wave 25 on Endless Normal difficulty", "displayName": "Training Simulation", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/510dc6da957123fce45794b85cc89075b6aa35d0.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_203", - "time_earned": 0 + "name": "Achievement_203" }, { "description": "Complete DieSector wave 25 on Endless Hard difficulty", "displayName": "Test Trials", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/925db58c260bb48f62eb56ef9a5e8faf9274c905.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_204", - "time_earned": 0 + "name": "Achievement_204" }, { "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", "displayName": "Code Dead", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/222996c8e587aefda46d41c4c70b9108357ed175.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_205", - "time_earned": 0 + "name": "Achievement_205" }, { "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", "displayName": "Fatal Exception", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cf61a22148cdb35bd943ff14fb83f68c0cd8736e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_206", - "time_earned": 0 + "name": "Achievement_206" }, { "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", "displayName": "It's aD.A.R.able", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53405d791ad24a2a03b0d71c9c6f515e05fe3620.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_207", - "time_earned": 0 + "name": "Achievement_207" }, { "description": "Complete Power Core on Survival Normal difficulty", "displayName": "A Spark to Light the Way", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/877725c3b9e141295e2c52ac6f14af6f68013f04.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_208", - "time_earned": 0 + "name": "Achievement_208" }, { "description": "Complete Power Core on Survival Hard difficulty", "displayName": "Bolting through the Core", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95d39cdab7b75fca64b64c39e4671f3ff09f3871.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_209", - "time_earned": 0 + "name": "Achievement_209" }, { "description": "Complete Power Core on Survival Suicidal difficulty", "displayName": "High Voltage", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5521e83f9cf369d9f807489db0120d97a3e3002.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_210", - "time_earned": 0 + "name": "Achievement_210" }, { "description": "Complete Power Core on Survival Hell On Earth difficulty", "displayName": "I Have the Power!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca61bb09f6a26eebd4f76e5ab2804b2bdbd6540.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_211", - "time_earned": 0 + "name": "Achievement_211" }, { "description": "Collect all the items (Batteries) on Power Core", "displayName": "Surge Breaker", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2942584ef67dfc745bed2c7fcbd8f04bd0c9b11b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_212", - "time_earned": 0 + "name": "Achievement_212" }, { "description": "Complete Airship on Survival Normal difficulty", "displayName": "A Little Turbulence", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e76995587e9bf81b4beecad3b305b06f32ee35c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_213", - "time_earned": 0 + "name": "Achievement_213" }, { "description": "Complete Airship on Survival Hard difficulty", "displayName": "Flying Unfriendly Skies", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3dcc2a19350aef1f5b5079d2fa1510225bb5924f.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_214", - "time_earned": 0 + "name": "Achievement_214" }, { "description": "Complete Airship on Survival Suicidal difficulty", "displayName": "Soar, Gore, and More", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d318dee401d56bafc7ebed0eaab6e4dcfb593b00.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_215", - "time_earned": 0 + "name": "Achievement_215" }, { "description": "Complete Airship on Survival Hell On Earth difficulty", "displayName": "Mile High Dead Club", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/350d3e23eb31845a77fcef992c7fe899fd436f80.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_216", - "time_earned": 0 + "name": "Achievement_216" }, { "description": "Collect all the items (Steam Cells) on Airship", "displayName": "Powered by Steam", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b5fdc74747940179c7dc5f3ab964b1ef4175fdc0.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_217", - "time_earned": 0 + "name": "Achievement_217" }, { "description": "Complete Lockdown on Survival Normal difficulty", "displayName": "Station Stabilization", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffab338f1cf3295c1efd4a01d0e0bca3def85229.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_218", - "time_earned": 0 + "name": "Achievement_218" }, { "description": "Complete Lockdown on Survival Hard difficulty", "displayName": "Fun Near the Sun", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/39205159c665ba3b80af9365b4f6e58ccac29ef2.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_219", - "time_earned": 0 + "name": "Achievement_219" }, { "description": "Complete Lockdown on Survival Suicidal difficulty", "displayName": "Space Race", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7c8cfb7f628de3b9c7a438d17311882900314c75.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_220", - "time_earned": 0 + "name": "Achievement_220" }, { "description": "Complete Lockdown on Survival Hell On Earth difficulty", "displayName": "Houston, We Don't Have a Problem", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/177825463454281e2ef5c05ecc1526ef2474c3d4.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_221", - "time_earned": 0 + "name": "Achievement_221" }, { "description": "Collect all the items (Batteries) on Lockdown", "displayName": "Shocking Discovery!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c5b893ccd87f50690b337222fe6139c931b3533c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_222", - "time_earned": 0 + "name": "Achievement_222" }, { "description": "Complete Monster Ball on Survival Normal difficulty", "displayName": "Castle Crashers", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a5f8f0ecc173daa77a844bc1ad6b91ddaf60383d.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_223", - "time_earned": 0 + "name": "Achievement_223" }, { "description": "Complete Monster Ball on Survival Hard difficulty", "displayName": "Party Hard!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/49cda67ccd22c0ebf522717bd03fad590b786389.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_224", - "time_earned": 0 + "name": "Achievement_224" }, { "description": "Complete Monster Ball on Survival Suicidal difficulty", "displayName": "Dance on the Gore Floor", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ce29727842be31de090c83871e6f5831efacfb87.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_225", - "time_earned": 0 + "name": "Achievement_225" }, { "description": "Complete Monster Ball on Survival Hell on Earth difficulty", "displayName": "Rest In Pieces", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25005dfa6da839a95b8aa3664ebb13034a228f49.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_226", - "time_earned": 0 + "name": "Achievement_226" }, { "description": "Destroy 10 Glowing Skulls in Monster Ball", "displayName": "Spooky Scary Skeletons", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d3b14b6dcab1ffaa714e2bebdff231a8972e313.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_227", - "time_earned": 0 + "name": "Achievement_227" }, { "description": "Unlock the Alchemist Room in Monster Ball", "displayName": "Death's Door", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/382680a850833e6d1b227c6b92d066ebb892ce0e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_228", - "time_earned": 0 + "name": "Achievement_228" }, { "description": "Complete Santa's Workshop on Survival Normal Difficulty", "displayName": "Cookies and Milk", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c9262e0a59ee9f4ae0b6b7f778e57aa5b84ddbb.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_229", - "time_earned": 0 + "name": "Achievement_229" }, { "description": "Complete Santa's Workshop on Survival Hard Difficulty", "displayName": "Slaying with Santa", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b9ef59caab40af925efab875cec9c3cfcddc8bbd.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_230", - "time_earned": 0 + "name": "Achievement_230" }, { "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", "displayName": "A Deadly Carol", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/55cebdba7cae5617c8a8664ff2361d31c98e41ac.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_231", - "time_earned": 0 + "name": "Achievement_231" }, { "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", "displayName": "You're On The Badass List", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/42cdfa0830aaaafbf52b7aa22b14e37094277526.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_232", - "time_earned": 0 + "name": "Achievement_232" }, { "description": "Destroy 10 Snow Globes in Santa's Workshop", "displayName": "Yule Shoot Your Eye Out", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_233", - "time_earned": 0 + "name": "Achievement_233" }, { "description": "Complete Shopping Spree on Survival Normal Difficulty", "displayName": "Cleanup On Aisle 3", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3a4536ce96f3535865a03aea65fd970706339058.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_234", - "time_earned": 0 + "name": "Achievement_234" }, { "description": "Complete Shopping Spree on Survival Hard Difficulty", "displayName": "Shoot One Get Two Free", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/933bc0eaa31bc8e877f08e12cf5543a40032e4d5.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_235", - "time_earned": 0 + "name": "Achievement_235" }, { "description": "Complete Shopping Spree on Survival Suicidal Difficulty", "displayName": "Savings to Die For", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c4e0289e34928cce62665fe535b886f38d8a0534.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_236", - "time_earned": 0 + "name": "Achievement_236" }, { "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", "displayName": "Red Friday", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb976a5df4b166702cf5c16ef38026f62e76ba13.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_237", - "time_earned": 0 + "name": "Achievement_237" }, { "description": "Destroy 10 Dosh Necklaces in Shopping Spree", "displayName": "A Special Deal", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/60d04d244713b2b9475658538261124a0da51adc.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_238", - "time_earned": 0 + "name": "Achievement_238" }, { "description": "Complete Spillway on Survival Normal Difficulty", "displayName": "It's All Downstream From Here", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84c45895752213f960988d909fac2317c1468d7e.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_239", - "time_earned": 0 + "name": "Achievement_239" }, { "description": "Complete Spillway on Survival Hard Difficulty", "displayName": "Zeds Be Dam", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dca6e9d3e9aff9dd05a56c3a9838e21e37d2e8cf.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_240", - "time_earned": 0 + "name": "Achievement_240" }, { "description": "Complete Spillway on Survival Suicidal Difficulty", "displayName": "Overflow Controlled", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a834f5eca65f679bb9232faa5371501addd2222.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_241", - "time_earned": 0 + "name": "Achievement_241" }, { "description": "Complete Spillway on Survival Hell On Earth Difficulty", "displayName": "Dam You're Good!", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/751f4a1ed126d232c8be5cfa6b5efa05ec103316.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_242", - "time_earned": 0 + "name": "Achievement_242" }, { "description": "Destroy 10 Dosh Necklaces in Spillway", "displayName": "Money Down the Drain", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87cc7f0c7342385b24efb2956f214c7d057f3288.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_243", - "time_earned": 0 + "name": "Achievement_243" }, { "description": "Complete Steam Fortress on Objective Normal Difficulty", "displayName": "Burning Out the Fuse", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c669333a43bc28fdda7a441d54bab8d69cb14b2c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_244", - "time_earned": 0 + "name": "Achievement_244" }, { "description": "Complete Steam Fortress on Objective Hard Difficulty", "displayName": "Touchdown Brings Me Down", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a3723df79a8f83adef085ad31bf5ce7584715cf.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_245", - "time_earned": 0 + "name": "Achievement_245" }, { "description": "Complete Steam Fortress on Objective Suicidal Difficulty", "displayName": "High as a Kite", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7197c8ba18ed6dd63deaa9ac2198e26aa199d07b.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_246", - "time_earned": 0 + "name": "Achievement_246" }, { "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", "displayName": "It's Cold as Hell", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54a004733d400ae8f350ce4fb95e8f9601462189.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_247", - "time_earned": 0 + "name": "Achievement_247" }, { "description": "Destroy 10 Steam Batteries on Steam Fortress", "displayName": "All This Science I Don't Understand", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f93605f0b8543fa506641195fa7fd6e21e6bb545.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_248", - "time_earned": 0 + "name": "Achievement_248" }, { "description": "Complete Zed Landing on Objective Normal Difficulty", "displayName": "Droning On", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3798d728855dc6dc65e926288176ab87666dbd86.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_249", - "time_earned": 0 + "name": "Achievement_249" }, { "description": "Complete Zed Landing on Objective Hard Difficulty", "displayName": "Data Deliverier ", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7933cd8f729179eb61274fffa8ac3af69368997c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_250", - "time_earned": 0 + "name": "Achievement_250" }, { "description": "Complete Zed Landing on Objective Suicidal Difficulty", "displayName": "Island Isolation", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c25b0221caf5779641711eae5dbe5e915d7feef0.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_251", - "time_earned": 0 + "name": "Achievement_251" }, { "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", "displayName": "Someone Call a Chopper?", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9ccce9f949a52cf79fbc4b53f703fb4bd726d652.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_252", - "time_earned": 0 + "name": "Achievement_252" }, { "description": "Complete Outpost on Objective Normal Difficulty", "displayName": "It's Snow Good. ", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/626744b7626d76146205e4ee0545ff5b82d48536.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_253", - "time_earned": 0 + "name": "Achievement_253" }, { "description": "Complete Outpost on Objective Hard Difficulty", "displayName": "Giving the Cold Shoulder", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0d63ed438b13319e0c81a6d7b3b0fea00e28b84.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_254", - "time_earned": 0 + "name": "Achievement_254" }, { "description": "Complete Outpost on Objective Suicidal Difficulty", "displayName": "Frozen Assets", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72142caac4513322346bb51b738a099219288e9c.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_255", - "time_earned": 0 + "name": "Achievement_255" }, { "description": "Complete Outpost on Objective Hell On Earth Difficulty", "displayName": "The Snow Must Go On", - "earned": 0, - "hidden": 0, + "hidden": "0", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fb3f2cd9de0a8d536b4070a2ac59d747f5e76a.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_256", - "time_earned": 0 + "name": "Achievement_256" }, { "description": null, "displayName": "Achievement_257_Name", - "earned": 0, - "hidden": 1, + "hidden": "1", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_257", - "time_earned": 0 + "name": "Achievement_257" }, { "description": null, "displayName": "Achievement_258_Name", - "earned": 0, - "hidden": 1, + "hidden": "1", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_258", - "time_earned": 0 + "name": "Achievement_258" }, { "description": null, "displayName": "Achievement_259_Name", - "earned": 0, - "hidden": 1, + "hidden": "1", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_259", - "time_earned": 0 + "name": "Achievement_259" }, { "description": null, "displayName": "Achievement_260_Name", - "earned": 0, - "hidden": 1, + "hidden": "1", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_260", - "time_earned": 0 + "name": "Achievement_260" }, { "description": null, "displayName": "Achievement_261_Name", - "earned": 0, - "hidden": 1, + "hidden": "1", "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_261", - "time_earned": 0 + "name": "Achievement_261" } ] \ No newline at end of file From d9b9b990f37f545d563af542d9b36f1b4e340e02 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Mon, 26 Aug 2019 17:55:31 +0000 Subject: [PATCH 11/48] Update settings_parser.cpp --- dll/settings_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/settings_parser.cpp b/dll/settings_parser.cpp index b2a377a..b0abdbc 100644 --- a/dll/settings_parser.cpp +++ b/dll/settings_parser.cpp @@ -144,7 +144,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s uint64 steam_id = 0; bool generate_new = false; //try to load steam id from game specific settings folder first - if (local_storage->get_data(SETTINGS_STORAGE_FOLDER, "user_steam_id.txt", array_steam_id, sizeof(array_steam_id) - 1) > 0) { + if (local_storage->get_data(Local_Storage::settings_storage_folder, "user_steam_id.txt", array_steam_id, sizeof(array_steam_id) - 1) > 0) { user_id = CSteamID((uint64)std::atoll(array_steam_id)); if (!user_id.IsValid()) { generate_new = true; From da75aa3ae721f98e2a50aa7aea31886dd98b6f1a Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Tue, 27 Aug 2019 00:17:57 +0200 Subject: [PATCH 12/48] Added item definition to generate_game_infos Thx psychonic. --- generate_game_infos/generate_game_infos.cpp | 244 ++++++++++++++++---- 1 file changed, 193 insertions(+), 51 deletions(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 921ac06..a67fa56 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -164,11 +164,202 @@ public: }) } */ +// --------------------------------- +// -- Special thanks to psychonic -- +// --------------------------------- +// Get game items definition digest (Phase1): https://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key=&appid=218620 +/* +{ + "response": { + "modified": 1566848385, + "digest": "3CDFC1CC1AC2B0D55D12C1C130F4294BDD6DF8D0" + } +} +*/ + +// Get game items definition: https://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid=218620&digest= +/* +[ + { + "appid":"218620", + "itemdefid":"0", + "Timestamp":"2016-04-08T18:00:21.3643085Z", + "modified":"20160408T180021Z", + "date_created":"20160408T180021Z", + "type":"", + "display_type":"", + "name":"", + "quantity":0, + "description":"", + "tradable":false, + "marketable":false, + "commodity":false, + "drop_interval":0, + "drop_max_per_window":0, + "workshopid":"0" + }, + { + "appid":"218620", + "itemdefid":"50002", + "Timestamp":"2015-11-13T16:01:18.0338618Z", + "modified":"20151113T160117Z", + "date_created":"20151113T160117Z", + "type":"item", + "display_type":"", + "name":"Sputnik Safe", + "quantity":0, + "description":"[color=#2360D8]THE JUDGE SHOTGUN | Pixel [/color]\n[color=#2360D8]KOBUS 90 SUBMACHINE GUN | Red Stars[/color]\n[color=#2360D8]PLAINSRIDER BOW | Arctic Plains[/color]\n[color=#2360D8]GRUBER KURZ PISTOL | Little Leopard[/color]\n[color=#2360D8]HRL-7 ROCKET LAUNCHER | Headline[/color]\n[color=#2360D8]LOCOMOTIVE 12G SHOTGUN | Cosmonaut[/color]\n[color=#9900FF]FLAMETHROWER | St. Basil[/color]\n[color=#9900FF]JP36 RIFLE | Ice Leopard [/color]\n[color=#9900FF]CAR-4 RIFLE | Stripe On[/color]\n[color=#9900FF]BRONCO .44 REVOLVER | Black Bull[/color]\n[color=#FF00FF]BERNETTI 9 PISTOL | Angry Bear[/color]\n[color=#FF00FF]THANATOS .50 CAL SNIPER RIFLE | Matrjoschka[/color]\n[color=#FF00FF]M308 RIFLE | Helmet Space Program[/color]\n[color=#FF0000]CLARION RIFLE | Breaching Owl[/color]\n[color=#FF0000]MOSCONI 12G SHOTGUN | Bullet Bear Gun[/color]\n[color=#FFAA00]or an exceedingly rare special item![/color]", + "icon_url":"http://media.overkillsoftware.com/economy42gF2Y/safes_weapon_01.png", + "icon_url_large":"http://media.overkillsoftware.com/economy42gF2Y/safes_weapon_01.png", + "store_tags":"safe;sputnik safe;", + "tradable":true, + "marketable":true, + "commodity":false, + "drop_interval":0, + "drop_max_per_window":0, + "workshopid":"0", + "dsl_bonus":"false", + "item_name":"weapon_01", + "item_slot":"safes" + } +*/ #ifdef max #undef max #endif +std::string steam_apikey; +std::string app_id; + +void generate_achievements(CurlEasy &easy) +{ + std::string url = "http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; + url += steam_apikey; + url += "&appid="; + url += app_id; + easy.set_url(url); + easy.perform(); + try + { + std::ofstream ach_file("achievements.json", std::ios::trunc | std::ios::out); + nlohmann::json json = nlohmann::json::parse(easy.get_answer()); + nlohmann::json output_json = nlohmann::json::array(); + + bool first = true; + int i = 0; + for (auto& item : json["game"]["availableGameStats"]["achievements"].items()) + { + output_json[i]["name"] = item.value()["name"]; + output_json[i]["displayName"] = item.value()["displayName"]; + output_json[i]["hidden"] = std::to_string(item.value()["hidden"].get()); + try + { + output_json[i]["description"] = item.value()["description"]; + } + catch (...) + { + output_json[i]["description"] = ""; + } + output_json[i]["icon"] = item.value()["icon"]; + output_json[i]["icongray"] = item.value()["icongray"]; + ++i; + } + ach_file << std::setw(2) << output_json; + } + catch (std::exception& e) + { + std::cerr << "Failed to get infos: "; + long code; + if (easy.get_html_code(code) == CURLE_OK && code == 403) + { + std::cerr << "Error in webapi key"; + } + else + { + std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your achivements.json"; + } + std::cerr << std::endl; + } +} + +void generate_items(CurlEasy& easy) +{ + std::string url = "https://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; + url += steam_apikey; + url += "&appid="; + url += app_id; + + easy.set_url(url); + easy.perform(); + + try + { + nlohmann::json json = nlohmann::json::parse(easy.get_answer()); + std::string digest = json["response"]["digest"]; + + url = "https://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid="; + url += app_id; + url += "&digest="; + url += digest; + + easy.set_url(url); + easy.perform(); + + nlohmann::json item_json = nlohmann::json::object(); + json = nlohmann::json::parse(easy.get_answer()); + std::ofstream items_file("items.json", std::ios::trunc | std::ios::out); + for (auto &i : json) + { + for (auto j = i.begin(); j != i.end(); ++j) + { + //if (j.key() == "itemdefid") + //{ + // j.value() = std::stoll(j.value().get()); + //} + //else + { + nlohmann::json& v = j.value(); + switch (v.type()) + { + case nlohmann::json::value_t::boolean: + v = (v.get() ? "true" : "false"); + break; + + case nlohmann::json::value_t::number_float: + v = std::to_string(v.get()); + break; + + case nlohmann::json::value_t::number_integer: + v = std::to_string(v.get()); + break; + + case nlohmann::json::value_t::number_unsigned: + v = std::to_string(v.get()); + break; + } + } + } + item_json[i["itemdefid"].get()] = i; + } + + items_file << std::setw(2) << item_json; + } + catch (std::exception& e) + { + std::cerr << "Failed to get infos: "; + long code; + if (easy.get_html_code(code) == CURLE_OK && code == 403) + { + std::cerr << "Error in webapi key"; + } + else + { + std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your achivements.json"; + } + std::cerr << std::endl; + } +} + int main() { CurlGlobal& cglobal = CurlGlobal::Inst(); @@ -177,10 +368,6 @@ int main() CurlEasy easy; if (easy.init()) { - std::string url; - std::string steam_apikey; - std::string app_id; - std::cout << "Enter the game appid: "; std::cin >> app_id; std::cout << "Enter your webapi key: "; @@ -188,53 +375,8 @@ int main() std::cin.ignore(std::numeric_limits::max(), '\n'); std::cin >> steam_apikey; - url = "http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; - url += steam_apikey; - url += "&appid="; - url += app_id; - easy.set_url(url); - easy.perform(); - try - { - std::ofstream ach_file("achievements.json", std::ios::trunc | std::ios::out); - nlohmann::json json = nlohmann::json::parse(easy.get_answer()); - nlohmann::json output_json = nlohmann::json::array(); - - bool first = true; - int i = 0; - for (auto& item : json["game"]["availableGameStats"]["achievements"].items()) - { - output_json[i]["name"] = item.value()["name"]; - output_json[i]["displayName"] = item.value()["displayName"]; - output_json[i]["hidden"] = std::to_string(item.value()["hidden"].get()); - try - { - output_json[i]["description"] = item.value()["description"]; - } - catch (...) - { - output_json[i]["description"] = ""; - } - output_json[i]["icon"] = item.value()["icon"]; - output_json[i]["icongray"] = item.value()["icongray"]; - ++i; - } - ach_file << std::setw(2) << output_json; - } - catch (std::exception& e) - { - std::cerr << "Failed to get infos: "; - long code; - if (easy.get_html_code(code) == CURLE_OK && code == 403) - { - std::cerr << "Error in webapi key"; - } - else - { - std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your achivements.json"; - } - std::cerr << std::endl; - } + generate_achievements(easy); + generate_items(easy); } } \ No newline at end of file From 86b178f55bd3e7ac48e7705d6605c86c3849899d Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 1 Sep 2019 21:32:48 +0200 Subject: [PATCH 13/48] Fixed definition update not being called Should update definition when inventory is requested and definition is not loaded --- dll/steam_inventory.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index bdde870..acc6319 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -847,9 +847,9 @@ bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventory void RunCallbacks() { - if (call_definition_update) { - read_items_db(); + if (call_definition_update && !definition_update_called) { definition_update_called = true; + read_items_db(); SteamInventoryDefinitionUpdate_t data = {}; callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); @@ -860,6 +860,7 @@ void RunCallbacks() read_inventory_db(); inventory_loaded = true; + call_definition_update = true; call_inventory_update = false; } From cfa04f2df859c52e591842ea50e4a12139b26652 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 1 Sep 2019 22:19:36 +0200 Subject: [PATCH 14/48] Description is an empty string if not set --- generate_game_infos/generate_game_infos.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index a67fa56..a3f74b8 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -254,7 +254,10 @@ void generate_achievements(CurlEasy &easy) output_json[i]["hidden"] = std::to_string(item.value()["hidden"].get()); try { - output_json[i]["description"] = item.value()["description"]; + if( !item.value()["description"].is_null() ) + output_json[i]["description"] = item.value()["description"]; + else + output_json[i]["description"] = ""; } catch (...) { From 420e498f22f7fb61b532da5082599a25303a9326 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 4 Sep 2019 17:39:23 +0000 Subject: [PATCH 15/48] Update generate_game_infos.cpp --- generate_game_infos/generate_game_infos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index a3f74b8..bd487ba 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -357,7 +357,7 @@ void generate_items(CurlEasy& easy) } else { - std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your achivements.json"; + std::cerr << "Error while parsing json. Try to go at " << url << " and see what you can do to build your items.json"; } std::cerr << std::endl; } From 6c19056fbbfe08a6c624ce1be49edcaa72f05a12 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 18 Sep 2019 14:53:04 +0200 Subject: [PATCH 16/48] Change inventory files place. inventory is now in %appdata%/goldberg...//inventory just like remote and stats. It is also affected by the local_save.txt --- dll/local_storage.cpp | 16 +++------------- dll/local_storage.h | 1 - 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index 08f4465..98bb284 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -53,11 +53,6 @@ std::string Local_Storage::get_global_settings_path() return ""; } -std::string Local_Storage::get_global_inventory_path() -{ - return ""; -} - Local_Storage::Local_Storage(std::string save_directory) { @@ -527,11 +522,6 @@ std::string Local_Storage::get_global_settings_path() return save_directory + settings_storage_folder + PATH_SEPARATOR; } -std::string Local_Storage::get_global_inventory_path() -{ - return save_directory + inventory_storage_folder + PATH_SEPARATOR; -} - std::vector Local_Storage::get_filenames_path(std::string path) { if (path.back() != *PATH_SEPARATOR) { @@ -703,7 +693,7 @@ bool Local_Storage::update_save_filenames(std::string folder) bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) { - std::string inv_path = std::move(get_global_inventory_path() + appid + file); + std::string inv_path = std::move(save_directory + appid + inventory_storage_folder + PATH_SEPARATOR + file); std::ifstream inventory_file(inv_path); // If there is a file and we opened it if (inventory_file) @@ -735,11 +725,11 @@ bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const& bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) { - std::string inv_path = std::move(get_global_inventory_path() + appid); + std::string inv_path = std::move(save_directory + appid + inventory_storage_folder); create_directory(inv_path); - std::ofstream inventory_file(inv_path + file, std::ios::trunc | std::ios::out); + std::ofstream inventory_file(inv_path + PATH_SEPARATOR + file, std::ios::trunc | std::ios::out); if (inventory_file) { inventory_file << std::setw(2) << json; diff --git a/dll/local_storage.h b/dll/local_storage.h index ef618a5..38d676b 100644 --- a/dll/local_storage.h +++ b/dll/local_storage.h @@ -59,7 +59,6 @@ public: bool file_delete(std::string folder, std::string file); uint64_t file_timestamp(std::string folder, std::string file); std::string get_global_settings_path(); - std::string get_global_inventory_path(); std::string get_path(std::string folder); bool update_save_filenames(std::string folder); From 5ed9a7aa77db1602b8e9746c1279f4228a1023ff Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Fri, 20 Sep 2019 11:04:04 -0400 Subject: [PATCH 17/48] Fix dumb bug. --- dll/steam_controller.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dll/steam_controller.h b/dll/steam_controller.h index 926013d..1cd15e4 100644 --- a/dll/steam_controller.h +++ b/dll/steam_controller.h @@ -682,7 +682,8 @@ int GetAnalogActionOrigins( InputHandle_t inputHandle, InputActionSetHandle_t ac break; } } - return 0; + + return count; } From 75dd582dec7b45992bde84f9c09a1030cb83c011 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sun, 22 Sep 2019 11:35:27 -0400 Subject: [PATCH 18/48] Fix crash when one of the lobby keys which was supposed to be an int was not an int. --- dll/steam_matchmaking.h | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/dll/steam_matchmaking.h b/dll/steam_matchmaking.h index 4622cc2..7ca1df9 100644 --- a/dll/steam_matchmaking.h +++ b/dll/steam_matchmaking.h @@ -1152,16 +1152,21 @@ void RunCallbacks() } } } else { - int compare_to = stoi(value->second, 0, 0); - PRINT_DEBUG("Compare Values %i %i\n", compare_to, f.value_int); - if (f.eComparisonType == k_ELobbyComparisonEqual) { - if (compare_to == f.value_int) { - PRINT_DEBUG("Equal\n"); - //use = use; - } else { - PRINT_DEBUG("Not Equal\n"); - use = false; + try { + int compare_to = std::stoi(value->second, 0, 0); + PRINT_DEBUG("Compare Values %i %i\n", compare_to, f.value_int); + if (f.eComparisonType == k_ELobbyComparisonEqual) { + if (compare_to == f.value_int) { + PRINT_DEBUG("Equal\n"); + //use = use; + } else { + PRINT_DEBUG("Not Equal\n"); + use = false; + } } + } catch (...) { + //Same case as if the key is not in the lobby? + use = false; } //TODO: add more comparisons } From 846ed27397fda3c3ff1c9d619e51be6358122d06 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Mon, 23 Sep 2019 18:42:13 +0200 Subject: [PATCH 19/48] Add a default inventory support Put a file in /steam_settings/default_items.json with all default items you want (same syntax as the inventory file) --- dll/steam_inventory.h | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index acc6319..e116e65 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -44,6 +44,7 @@ class Steam_Inventory : { public: static constexpr auto items_user_file = "items.json"; + static constexpr auto items_default_file = "default_items.json"; private: class Settings *settings; @@ -122,7 +123,36 @@ void read_items_db() void read_inventory_db() { - local_storage->load_inventory_file(user_items, items_user_file); + // If we havn't got any inventory + if (!local_storage->load_inventory_file(user_items, items_user_file)) + { + // Try to load a default one + std::string items_db_path = Local_Storage::get_game_settings_path() + items_default_file; + PRINT_DEBUG("Default items file path: %s\n", items_db_path.c_str()); + std::ifstream inventory_file(items_db_path); + // If there is a file and we opened it + if (inventory_file) + { + inventory_file.seekg(0, std::ios::end); + size_t size = inventory_file.tellg(); + std::string buffer(size, '\0'); + inventory_file.seekg(0); + // Read it entirely, if the .json file gets too big, + // I should look into this and split reads into smaller parts. + inventory_file.read(&buffer[0], size); + inventory_file.close(); + + try + { + user_items = std::move(nlohmann::json::parse(buffer)); + PRINT_DEBUG("Loaded default inventory. Loaded %u items.\n", user_items.size()); + } + catch (std::exception& e) + { + PRINT_DEBUG("Error while parsing inventory json: %s\n", e.what()); + } + } + } } public: From 965031a804c1b0e37e742cde76b82718322cf0a2 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Tue, 24 Sep 2019 12:26:34 +0200 Subject: [PATCH 20/48] Download achievement pictures and store em in images/ --- generate_game_infos/generate_game_infos.cpp | 74 +++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index bd487ba..43eb086 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -231,7 +231,40 @@ public: std::string steam_apikey; std::string app_id; -void generate_achievements(CurlEasy &easy) +#if defined(WIN32) || defined(_WIN32) +#include + +static bool create_directory(std::string const& strPath) +{ + DWORD dwAttrib = GetFileAttributesA(strPath.c_str()); + + if (dwAttrib != INVALID_FILE_ATTRIBUTES && dwAttrib & FILE_ATTRIBUTE_DIRECTORY) + return true; + + return CreateDirectoryA(strPath.c_str(), NULL); +} +#elif defined(__linux__) +#include +#include +#include + +static bool create_directory(std::string const& strPath) +{ + stat sb; + + if (stat(strPath.c_str(), &sb) != 0) + { + return mkdir(strPath.c_str(), 0755) == 0; + } + if (S_ISDIR(sb.st_mode)) + return true; + + return false; +} + +#endif + +static void generate_achievements(CurlEasy &easy) { std::string url = "http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; url += steam_apikey; @@ -263,8 +296,35 @@ void generate_achievements(CurlEasy &easy) { output_json[i]["description"] = ""; } - output_json[i]["icon"] = item.value()["icon"]; - output_json[i]["icongray"] = item.value()["icongray"]; + + { + std::string icon_path = "images/" + item.value()["name"].get() + ".jpg"; + std::ofstream achievement_icon(icon_path, std::ios::out | std::ios::trunc | std::ios::binary); + if (!achievement_icon) + { + std::cerr << "Cannot create achievement icon \"" << icon_path << "\"" << std::endl; + return; + } + easy.set_url(item.value()["icon"]); + easy.perform(); + + std::string picture = easy.get_answer(); + achievement_icon.write(picture.c_str(), picture.length()); + } + { + std::string icon_path = "images/" + item.value()["name"].get() + "_gray.jpg"; + std::ofstream achievement_icon(icon_path, std::ios::out | std::ios::trunc | std::ios::binary); + if (!achievement_icon) + { + std::cerr << "Cannot create achievement icon \"" << icon_path << "\"" << std::endl; + return; + } + easy.set_url(item.value()["icongray"]); + easy.perform(); + + std::string picture = easy.get_answer(); + achievement_icon.write(picture.c_str(), picture.length()); + } ++i; } ach_file << std::setw(2) << output_json; @@ -285,7 +345,7 @@ void generate_achievements(CurlEasy &easy) } } -void generate_items(CurlEasy& easy) +static void generate_items(CurlEasy& easy) { std::string url = "https://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; url += steam_apikey; @@ -365,6 +425,12 @@ void generate_items(CurlEasy& easy) int main() { + if (!create_directory("images")) + { + std::cerr << "Cannot create directory \"images\"" << std::endl; + return -1; + } + CurlGlobal& cglobal = CurlGlobal::Inst(); cglobal.init(); From 325a19f204ba4e617944db400d946b4a43e2a024 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Tue, 24 Sep 2019 17:58:55 +0200 Subject: [PATCH 21/48] struct stat --- generate_game_infos/generate_game_infos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 43eb086..00e1e0b 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -250,7 +250,7 @@ static bool create_directory(std::string const& strPath) static bool create_directory(std::string const& strPath) { - stat sb; + struct stat sb; if (stat(strPath.c_str(), &sb) != 0) { From c0fd74088d086233dad91ca133eca48b6f6826d4 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 25 Sep 2019 12:29:14 +0200 Subject: [PATCH 22/48] Added missing path --- generate_game_infos/generate_game_infos.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 00e1e0b..0ff8f50 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -310,6 +310,9 @@ static void generate_achievements(CurlEasy &easy) std::string picture = easy.get_answer(); achievement_icon.write(picture.c_str(), picture.length()); + + output_json[i]["icon"] = icon_path; + } { std::string icon_path = "images/" + item.value()["name"].get() + "_gray.jpg"; @@ -324,6 +327,8 @@ static void generate_achievements(CurlEasy &easy) std::string picture = easy.get_answer(); achievement_icon.write(picture.c_str(), picture.length()); + + output_json[i]["icongray"] = icon_path; } ++i; } From 928575f0374189474bcc0f8a7127afb5bb684321 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Tue, 1 Oct 2019 18:16:45 +0200 Subject: [PATCH 23/48] Remove home directory example and update the achievement example --- Readme_release.txt | 5 - .../232090/achievements.EXAMPLE.json | 18 - .../232090/items.EXAMPLE.json | 4 - .../achievements.EXAMPLE.json | 2098 ----------------- .../achievements_EXAMPLE.json | 2098 +++++++++++++++++ 5 files changed, 2098 insertions(+), 2125 deletions(-) delete mode 100644 files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json delete mode 100644 files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json delete mode 100644 files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json create mode 100644 files_example/steam_settings.EXAMPLE/achievements_EXAMPLE.json diff --git a/Readme_release.txt b/Readme_release.txt index 0926de1..113a4bf 100644 --- a/Readme_release.txt +++ b/Readme_release.txt @@ -70,11 +70,6 @@ Create a folder named steam_settings right beside steam_api.dll if there isn't o An example can be found in steam_settings.EXAMPLE that works with Killing Floor 2. The items.json syntax is simple, you SHOULD validate your .json file before trying to run your game or you won't have any item in your inventory. Just look for "online json validator" on your web brower to valide your file. You can use https://steamdb.info/ to list items and attributes they have and put them into your .json. -Then you have to add item/achievement to you inventory. To do so, go to %appdata%\Goldberg SteamEmu Saves\inventory\ on windows or [$XDG_DATA_HOME|~/.local/share]/Goldberg SteamEmu Saves on linux. -In that folder, create a file items.json and/or achievements.json and fill it like in the example inventory.EXAMPLE. -items.json syntax is like so: { "item_id": , "other_item_id": }. -achievements.json syntax is like so: { "achievement_name": { "earned" : [true|false], "earned_time": }, "second_name": { "earned" : [true|false], "earned_time": } } -"earned_time" can be 0, meaning the achievement was earned before before trace the earn time. (See https://partner.steamgames.com/doc/api/ISteamUserStats#GetAchievementAndUnlockTime) Keep in mind that some item are not valid to have in your inventory. For example, in PayDay2 all items below item_id 50000 will make your game crash. Leaderboards: diff --git a/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json b/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json deleted file mode 100644 index 7cf5155..0000000 --- a/files_example/inventory.EXAMPLE/232090/achievements.EXAMPLE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "Achievement_0": { - "earned": true, - "earned_time": 1566718428 - }, - "Achievement_1": { - "earned": true, - "earned_time": 1566718431 - }, - "Achievement_10": { - "earned": true, - "earned_time": 1566718431 - }, - "Achievement_100": { - "earned": true, - "earned_time": 1566718432 - } -} \ No newline at end of file diff --git a/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json b/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json deleted file mode 100644 index 34db327..0000000 --- a/files_example/inventory.EXAMPLE/232090/items.EXAMPLE.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "2001": 1, - "2002": 1 -} \ No newline at end of file diff --git a/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json b/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json deleted file mode 100644 index 7a45fb5..0000000 --- a/files_example/steam_settings.EXAMPLE/achievements.EXAMPLE.json +++ /dev/null @@ -1,2098 +0,0 @@ -[ - { - "description": "Complete Burning Paris on Survival Normal difficulty", - "displayName": "Tower Tussle", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/602f536d30b0c235518e7a1e44187d441eaf63d6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_0" - }, - { - "description": "Complete Burning Paris on Survival Hard difficulty", - "displayName": "Seine Skirmish", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/636fe6d6fabcabde48e874b7f4743632578b1c5d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_1" - }, - { - "description": "Beat Burning Paris on Suicidal", - "displayName": "Bastille Brawl", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c917888af91dfe611af82089437b2893779c8efc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_2" - }, - { - "description": "Beat Burning Paris on Hell on Earth", - "displayName": "Arc Action", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70b565ce3857b76c0a05369f06c8c049e16f7acb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_3" - }, - { - "description": "Beat Outpost on Normal", - "displayName": "You Can't Fight In Here, This Is The Control Room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d47d3ba3fd18af18307316c45ef5928a2ef548ea.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_4" - }, - { - "description": "Beat Outpost on Hard", - "displayName": "This Is What Happens When You Meet A Zed In The Alps", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02ee9ce922c7ce7a64829cd532f1ba2643dd4bb1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_5" - }, - { - "description": "Beat Outpost on Suicidal", - "displayName": "The Shield Doors Must Be Closed", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/050dcb99026091b63eddda0cdc4d63fd722c1e1b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_6" - }, - { - "description": "Beat Outpost on Hell on Earth", - "displayName": "Fear Is For The Zeds, My Little Lord", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8431a972a1983e9caf674f6789a5c465805ebbc4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_7" - }, - { - "description": "Beat Biotics Lab on Normal", - "displayName": "Open For Testing", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a8d274c3d77ec81d2aab54af370f724d40f15bc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_8" - }, - { - "description": "Beat Biotics Lab on Hard", - "displayName": "Limited Contact", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cbcc021969245995ce09589ad53ab1a47f0fdff7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_9" - }, - { - "description": "Beat Biotics Lab on Suicidal", - "displayName": "Restricted Access", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/44268ccc9bac63ecbf60f39898d7dc2c17bd53ab.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_10" - }, - { - "description": "Beat Biotics Lab on Hell on Earth", - "displayName": "Controlled Environment", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/70cb90730ab2705bb1e306819354651d56c38552.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_11" - }, - { - "description": "Beat Volter Manor on Normal", - "displayName": "Just Visiting", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/61fa8d36c9829af872c0ad5228c60d64069fce17.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_12" - }, - { - "description": "Beat Volter Manor on Hard", - "displayName": "Mind Your Manor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e5b10441e0474095bbb81d5960f1af27c932084.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_13" - }, - { - "description": "Beat Volter Manor on Suicidal", - "displayName": "Settling In", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1683c9b2122f6ede072934269661f93e17ab984e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_14" - }, - { - "description": "Complete Volter Manor on Survival Hell On Earth difficulty", - "displayName": "Lord of the Manor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c4b365273492452a071837a4255bd4d2dea73da.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_15" - }, - { - "description": "Collect all the items on Burning Paris", - "displayName": "Paris Plunder", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1438bcf38af2bfc2c847a1f668faf687df0b732.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_16" - }, - { - "description": "Collect all the items on Outpost", - "displayName": "Outpost Offerings", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59ffefa9465aaf04ffdbc9e705cf3164d28a91b0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_17" - }, - { - "description": "Collect all the items on Biotics Lab", - "displayName": "Biotics Bling", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da4820f31888fcefa4a634a584e12a96de211e88.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_18" - }, - { - "description": "Collect all the items on Volter Manor", - "displayName": "Manor Money", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/30c452781f10edb7b6b3abd3a038776eac66252d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fa19ba1f7d3065bc5a546edd438feed6b4fb9d.jpg", - "name": "Achievement_19" - }, - { - "description": "Complete Evacuation Point on Survival Normal difficulty", - "displayName": "The Suite Life", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c80431926b58a51f442831f69d109df8d3f64e1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_20" - }, - { - "description": "Complete Evacuation Point on Survival Hard difficulty", - "displayName": "Unsinkable II", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3b2a9c5c63aad9b5f0a43f93424e0f29c8c6deb9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_21" - }, - { - "description": "Complete Evacuation Point on Survival Suicidal difficulty", - "displayName": "Bow Movement", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4b22d317141e729496ec00a2f0f7bc6a8a3146f2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_22" - }, - { - "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", - "displayName": "Seas The Day", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b64bf6337277640aa8f455aed9d210168a7ce414.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_23" - }, - { - "description": "Complete Catacombs on Survival Normal difficulty", - "displayName": "A Light In The Darkness", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d2908401103ad32380e3cf3525dafc45a1691306.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_24" - }, - { - "description": "Complete Catacombs on Survival Hard difficulty", - "displayName": "This Is No Mine", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1b79ab127fcaba5394686438c187275672fa62e3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_25" - }, - { - "description": "Complete Catacombs on Survival Suicidal difficulty", - "displayName": "This Is A Tomb, Theirs", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72a312fa2a311a0d57ba43d5d0ff5324560bd954.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_26" - }, - { - "description": "Complete Catacombs on Survival Hell On Earth difficulty", - "displayName": "They Shall Not Pass", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4770075a39f42f45b4fa7cf8f4c2e9c377633a0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_27" - }, - { - "description": "Collect all the items on Evacuation Point", - "displayName": "Point Paper", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8946b527da24edc10caea62e796b1b43420f736b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_28" - }, - { - "description": "Collect all the items on Catacombs", - "displayName": "Catacombs Cash", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/daa37be2677f123e123bf39b945e996fb8758c45.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_29" - }, - { - "description": "Reach Level 5 Berserker", - "displayName": "Reach Level 5 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ec445dee4f5bfcfca9e132ff680068e02c80983a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_30" - }, - { - "description": "Reach Level 10 Berserker", - "displayName": "Reach Level 10 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b2a3fc6e4112e667d045e7a0e3d1d229afe9273.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_31" - }, - { - "description": "Reach Level 15 Berserker", - "displayName": "Reach Level 15 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77fcacad378a8b65c6a1a40149a0bb41e571d252.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_32" - }, - { - "description": "Reach Level 20 Berserker", - "displayName": "Reach Level 20 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/edcb6d683a8cdb6dd29bd6dfa6c4887aedf886ef.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_33" - }, - { - "description": "Reach Level 25 Berserker", - "displayName": "Reach Level 25 Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c0797935113227a8a7d60cdd76dfe1d272bd9c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_34" - }, - { - "description": "Reach Level 5 Medic", - "displayName": "Reach Level 5 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f81cafc2e08f2373cf4a5a4feb8ebc9d42609f52.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_35" - }, - { - "description": "Reach Level 10 Medic", - "displayName": "Reach Level 10 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfa49ae2939448e3eae52e6ef5d88a8d3e8cee5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_36" - }, - { - "description": "Reach Level 15 Medic", - "displayName": "Reach Level 15 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9d05bece5bdc0c4a919629378aa8d0a838b01548.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_37" - }, - { - "description": "Reach Level 20 Medic", - "displayName": "Reach Level 20 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8dcf9baa3420738cea516dfbb148d822b8cbc5c9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_38" - }, - { - "description": "Reach Level 25 Medic", - "displayName": "Reach Level 25 Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/908b077bf03a98b6731c68d78bfb4071bb112604.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_39" - }, - { - "description": "Reach Level 5 Commando", - "displayName": "Reach Level 5 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/59df9bded3394b3658929b5c0d6c4ef94d544bc3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_40" - }, - { - "description": "Reach Level 10 Commando", - "displayName": "Reach Level 10 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0052ebf1633c386974865ee696606c9fa003ff10.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_41" - }, - { - "description": "Reach Level 15 Commando", - "displayName": "Reach Level 15 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a211f3fb884248955eb1608987882372c44be91.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_42" - }, - { - "description": "Reach Level 20 Commando", - "displayName": "Reach Level 20 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46e7a0273fe5e82f4cbf6a650e8e9b519651ed46.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_43" - }, - { - "description": "Reach Level 25 Commando", - "displayName": "Reach Level 25 Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ea698f23e293f79e28ad83c710820c86c30e8639.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_44" - }, - { - "description": "Reach Level 5 Support", - "displayName": "Reach Level 5 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8405e32f8bd371eb86b2d2c969efaba94d1b0076.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_45" - }, - { - "description": "Reach Level 10 Support", - "displayName": "Reach Level 10 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d9f35337082a2acb1893cc3976a0bdfcc670eef2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_46" - }, - { - "description": "Reach Level 15 Support", - "displayName": "Reach Level 15 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77627b9cf8a5ff535bc4cc0b1afb8dceeaa89dcc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_47" - }, - { - "description": "Reach Level 20 Support", - "displayName": "Reach Level 20 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87d64c361dbacf7bb024abbfa1cb379b86e91989.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_48" - }, - { - "description": "Reach Level 25 Support", - "displayName": "Reach Level 25 Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a435a108d19908931941b652c758534d0147ce2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_49" - }, - { - "description": "Reach Level 5 Firebug", - "displayName": "Reach Level 5 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4e6db9d05a3d33d94868e43f0a7034ecdb3ad840.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_50" - }, - { - "description": "Reach Level 10 Firebug", - "displayName": "Reach Level 10 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/23ca75c49075bfd65d1a262b8e42d9c021b311ef.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_51" - }, - { - "description": "Reach Level 15 Firebug", - "displayName": "Reach Level 15 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e1cbb261b23edfea921a280c099d76f88dbd872a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_52" - }, - { - "description": "Reach Level 20 Firebug", - "displayName": "Reach Level 20 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e133456760dd3f8148b9ec1417371c6ecebe62f5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_53" - }, - { - "description": "Reach Level 25 Firebug", - "displayName": "Reach Level 25 Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2488d37177ef8c82d03ac5bf7eb43fe774518c11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_54" - }, - { - "description": "Reach Level 5 Demolitions", - "displayName": "Reach Level 5 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f8ff68113d42586d47a3f8b8120a16f40794699b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_55" - }, - { - "description": "Reach Level 10 Demolitions", - "displayName": "Reach Level 10 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2664d73ed43ef164935a580a295bbf1e9e4e8de.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_56" - }, - { - "description": "Reach Level 15 Demolitions", - "displayName": "Reach Level 15 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dda8becc826584df747b1db31c1f36d8fe4a827e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_57" - }, - { - "description": "Reach Level 20 Demolitions", - "displayName": "Reach Level 20 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/97e880c18ee6117082b2fbf43e2c7f6b170fa5f8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_58" - }, - { - "description": "Reach Level 25 Demolitions", - "displayName": "Reach Level 25 Demolitions", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ae40a49979e39239251944daaee0eb6a1e72603d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_59" - }, - { - "description": "Reach Level 5 Gunslinger", - "displayName": "Reach Level 5 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6dc5ed68550025c39e585746f5f9386e38661758.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_60" - }, - { - "description": "Reach Level 10 Gunslinger", - "displayName": "Reach Level 10 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9a79962091ac4c31ea093da1edb1c3b0f47d129b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_61" - }, - { - "description": "Reach Level 15 Gunslinger", - "displayName": "Reach Level 15 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7fb6931c29993732579b4cd3d8e9daab9a09f0ca.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_62" - }, - { - "description": "Reach Level 20 Gunslinger", - "displayName": "Reach Level 20 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/815dec2cee244bec1fd47ddcc4393276c0463ff9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_63" - }, - { - "description": "Reach Level 25 Gunslinger", - "displayName": "Reach Level 25 Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cc7a9b384ed3897cc74fade28cde0e0c2c95b0ce.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_64" - }, - { - "description": "Beat Any One Map as Berserker on Normal Difficulty", - "displayName": "Normal Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36cc13be1928003332588ad18221760939c1dce3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_65" - }, - { - "description": "Beat Any One Map as Berserker on Hard Difficulty", - "displayName": "Hard Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/880c29a1d0131e4ecd8e863040e17bf504da9f2b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_66" - }, - { - "description": "Beat Any One Map as Berserker on Suicidal Difficulty", - "displayName": "Suicidal Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1916652e0bc1aeeaa0d3b13031fa8bb67b4a4737.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_67" - }, - { - "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", - "displayName": "Hellish Berserker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5134cbc5bab84d4fc20ada8bc9b51c6c742fffec.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_68" - }, - { - "description": "Beat Any One Map as Medic on Normal Difficulty", - "displayName": "Normal Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4839101153acbfda639e129955f4ad766cd24ee3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_69" - }, - { - "description": "Beat Any One Map as Medic on Hard Difficulty", - "displayName": "Hard Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4f2fc7260bbd80517e4ddc089ead393fee197a6a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_70" - }, - { - "description": "Beat Any One Map as Medic on Suicidal Difficulty", - "displayName": "Suicidal Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74bfb721ee43daade7c92e83593e2633d1531016.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_71" - }, - { - "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", - "displayName": "Hellish Medic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bbf40f4f99ddd1251494c45cf44436fc3032364e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_72" - }, - { - "description": "Complete any map as a Commando on Survival Normal difficulty", - "displayName": "Normal Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5a8c0c6211e1314c175b8e5dd2785c79d97e8480.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_73" - }, - { - "description": "Complete any map as a Commando on Survival Hard difficulty", - "displayName": "Hard Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b44f5d459d8b35a7383718ea39540b8aed9f1d28.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_74" - }, - { - "description": "Complete any map as a Commando on Survival Suicidal difficulty", - "displayName": "Suicidal Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3d5b0e7ae171e6abd460c512bf7afaad20cb9c53.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_75" - }, - { - "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", - "displayName": "Hellish Commando", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e08ae8778751acbcf861ee08f3b9803d3181f34f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_76" - }, - { - "description": "Complete any map as a Support on Survival Normal difficulty", - "displayName": "Normal Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f18256b3f3ddee86f22b477be44e0093f6d1897d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_77" - }, - { - "description": "Complete any map as a Support on Survival Hard difficulty", - "displayName": "Hard Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4ad83923f2f9638896fe49aa80b04f11a80bd6db.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_78" - }, - { - "description": "Complete any map as a Support on Survival Suicidal difficulty", - "displayName": "Suicidal Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb55f2e2431b03b787ca803bd8ebb09ba4d0fbdd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_79" - }, - { - "description": "Complete any map as a Support on Survival Hell On Earth difficulty", - "displayName": "Hellish Support", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2c483d17dea8fedf4b013c3b8a1f3a86ed7c53a1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_80" - }, - { - "description": "Complete any map as a Firebug on Survival Normal difficulty", - "displayName": "Normal Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d787f7a96c2396e035bfae8415739dd3ec53ce69.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_81" - }, - { - "description": "Complete any map as a Firebug on Survival Hard difficulty", - "displayName": "Hard Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/924384c8d486ef91bf856c25edd258e29b7243d5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_82" - }, - { - "description": "Complete any map as a Firebug on Survival Suicidal difficulty", - "displayName": "Suicidal Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0372e445fd1ad3208f784c254192a5b07ca00e94.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_83" - }, - { - "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", - "displayName": "Hellish Firebug", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/41e8861feba48471f3677b706c259ab7cc3c6ec1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_84" - }, - { - "description": "Complete any map as a Demolitionist on Survival Normal difficulty", - "displayName": "Normal Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba1d7d23335daf81fa6358a296219983d5c41d1a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_85" - }, - { - "description": "Complete any map as a Demolitionist on Survival Hard difficulty", - "displayName": "Hard Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2d72fe0b205be4a7c58f1a2f0560e7390fea1f5d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_86" - }, - { - "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", - "displayName": "Suicidal Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/68c99c300525c4b0524f9d1df77d54bab2b91b5f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_87" - }, - { - "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", - "displayName": "Hellish Demolition", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f3e2fa5c5bf2fd11d3646cf4046fcd46f6fcea6f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_88" - }, - { - "description": "Complete any map as a Gunslinger on Survival Normal difficulty", - "displayName": "Normal Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fd2324d876a594a4a5e64a8e7e6912d41a334a30.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_89" - }, - { - "description": "Complete any map as a Gunslinger on Survival Hard difficulty", - "displayName": "Hard Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/74f2431f94c6ecc6639f6af75f4a02f12b2e164d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_90" - }, - { - "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", - "displayName": "Suicidal Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35cc28c801142cd4e1e8c64c4f8f747e13761420.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_91" - }, - { - "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", - "displayName": "Hellish Gunslinger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/77b47b409488fe21a216cef5d279ac6293bb0b5e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_92" - }, - { - "description": "Reach Level 25 in all Perks", - "displayName": "Perked Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/36350fb27669319b6c3ec26304250c9ff76b8a13.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_93" - }, - { - "description": "Complete Black Forest on Survival Normal difficulty", - "displayName": "Killer Korn", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b69373a99d3d8d3216b09402a9896f5f29009564.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_94" - }, - { - "description": "Complete Black Forest on Survival Hard difficulty", - "displayName": "Lager Me Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/657bf135a2bbf040370e9b4f73f8dbb74c5f0022.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_95" - }, - { - "description": "Complete Black Forest on Survival Suicidal difficulty", - "displayName": "I'll Dopple Bock", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/da1fb07964ecc32315a797b1c825d8562bb86113.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_96" - }, - { - "description": "Complete Black Forest on Survival Hell On Earth difficulty", - "displayName": "Kein Bier Vor Vier", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5284866c575c132f4d4c838d8c380b5c731e05b6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_97" - }, - { - "description": "Collect all the items on Black Forest", - "displayName": "Black Forest Babies", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8b8f2d33dbc9f884b8de60ea4573cf8cdf737d6d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_98" - }, - { - "description": "Beat Farmhouse on Normal Difficulty", - "displayName": "Plow the Field", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/46cef619b81b1c389955bc1442c346a1b966431c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_99" - }, - { - "description": "Beat Farmhouse on Hard Difficulty", - "displayName": "Sow the Seed", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e20c6ea4e34b7953f9ea0982ad11835fa11ac9e9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_100" - }, - { - "description": "Beat Farmhouse on Suicidal Difficulty", - "displayName": "Water the Crops", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a2da718294f17bc3fc0e06dac6e64c4942e691c4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_101" - }, - { - "description": "Beat Farmhouse on Hell on Earth Difficulty", - "displayName": "Reap what you Sow", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7beeff9f0fb5fc641f2ad9d986db7cab1cb93486.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_102" - }, - { - "description": "Collect all the items on Farmhouse", - "displayName": "Darkness Dolls", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21abe9ca2790fed3a4f400bb82171de07460309e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_103" - }, - { - "description": "Beat Prison on Normal", - "displayName": "Walked into the wrong room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/10b030dec54a8de662134975904e4b18546d2f8b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_104" - }, - { - "description": "Beat Prison on Hard", - "displayName": "Mercenaries get paid", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e10da3181de7bd0845b7a77d5f70dc83aae746fa.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_105" - }, - { - "description": "Beat Prison on Suicidal", - "displayName": "Like what, kill him again?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ed1d9b6092c89566a47c9593506f5dec889b9403.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_106" - }, - { - "description": "Beat Prison on Hell on Earth", - "displayName": "I was trained by the best. British Intel.", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca6f43274c132cf9d995591fb4045aa5c57709c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_107" - }, - { - "description": "Collect all the items on Prison", - "displayName": "Perilous Prison", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95c90482f7da7e7759fb68200f71d3b784e1396d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_108" - }, - { - "description": "Complete the Training Floor", - "displayName": "School's Out Forever", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/66f5309ba8030f4f5dc5f1c15e1db4dad14ffbb1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_109" - }, - { - "description": "Reach Level 5 Sharpshooter", - "displayName": "Reach Level 5 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/023f4f3f8b8b45547a7c0bd9a1ac409cb262fbe8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_110" - }, - { - "description": "Reach Level 10 Sharpshooter", - "displayName": "Reach Level 10 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ca9c4dea499a0212dd521cbf872715b54aa22018.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_111" - }, - { - "description": "Reach Level 15 Sharpshooter", - "displayName": "Reach Level 15 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c7a93ae33709f3e087c2d73b580ab71be443515.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_112" - }, - { - "description": "Reach Level 20 Sharpshooter", - "displayName": "Reach Level 20 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/00d137f6217d596365635659f788f81a12a56cc7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_113" - }, - { - "description": "Reach Level 25 Sharpshooter", - "displayName": "Reach Level 25 Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1010a85f23b67a0ed426f76827dc71a47c898e91.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_114" - }, - { - "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", - "displayName": "Normal Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/50e428ecaeb5ea710a68de937ab6db91871b8e06.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_115" - }, - { - "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", - "displayName": "Hard Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/378eb9e717b7405b636c74a504ef1548d47b1087.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_116" - }, - { - "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", - "displayName": "Suicidal Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/92ecee481d00897d6bd2d0526fd34fad7dd4dac2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_117" - }, - { - "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", - "displayName": "Hellish Sharpshooter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/37762c27fa85c5bfea8793d99760979c383105a1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_118" - }, - { - "description": "Complete Containment Station on Survival Normal difficulty", - "displayName": "Never Got the Hang of Thursdays", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9c72b7326246881b9d9e4c2a446f75fa5709455b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_119" - }, - { - "description": "Complete Containment Station on Survival Hard difficulty", - "displayName": "Don't Panic", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7874cadae34f3a5adea32253491d2c9264a119f7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_120" - }, - { - "description": "Complete Containment Station on Survival Suicidal difficulty", - "displayName": "Give Up and Go Mad Now", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/258ebf7dee2742339bbdc3ced7609ddbe4c33517.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_121" - }, - { - "description": "Complete Containment Station on Survival Hell On Earth difficulty", - "displayName": "So Long and Thanks for All the Zeds", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a9313fc5d346da24302330d8784dcf7143b5c143.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_122" - }, - { - "description": "Collect All the Items on Containment Station", - "displayName": "Can't Be Contained", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffbbbe46c760cbed9d23cb5e53bf875384da70ee.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_123" - }, - { - "description": "Complete Hostile Grounds on Survival Normal difficulty", - "displayName": "Mind the Gap", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b2de6a1efe33cabc68b9ddc4bbc831a32bc4bc50.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_124" - }, - { - "description": "Complete Hostile Grounds on Survival Hard difficulty", - "displayName": "Can't Make an Omelette Without Killing a Few People", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/69d31dd091f48198d692aa5bdb64e07cf52a92a3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_125" - }, - { - "description": "Complete Hostile Grounds on Survival Suicidal difficulty", - "displayName": "There Is No I in Team, But There Is an I in Pie", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/bfcfa4a2fe2399e53034b696436610b0205540c8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_126" - }, - { - "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", - "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e3c20ee2ab91c0172796eac857bde8d7de639188.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_127" - }, - { - "description": "Collect All the Items on Hostile Grounds", - "displayName": "You've Got Red on You", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/020adbeabf8554ba8fe763cbb3c08df037a4965a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_128" - }, - { - "description": "Kill a Siren Before She Screams", - "displayName": "Dead Silence", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/08e4690859d94699a73a80e5589fb0b8c799fa1c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_129" - }, - { - "description": "Kill the Patriarch Before He Has a Chance to Heal", - "displayName": "Quick on the Trigger", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6fdfdd1f09fb91e90a1b25cb83a5421ae81a2cb5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_130" - }, - { - "description": "Kill Your First Fleshpound", - "displayName": "It's Only a Flesh Wound", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/03ff0be17f0e56d8e312aa117844f27f134c47af.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_131" - }, - { - "description": "Kill Your First Scrake", - "displayName": "Hack and Slash", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6cfc51c010c7198347da1a22e1ce51d47f5ff13c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_132" - }, - { - "description": "Kill Dr. Hans Volter For the First Time", - "displayName": "Die Volter", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6f07eab287060d5516082afa7e3a7772017fe75c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_133" - }, - { - "description": "Win Any Match on Hard Difficulty", - "displayName": "Win Hard", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/be68c7423f778e6a2fc636b4dc2e20942c6f0c68.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_134" - }, - { - "description": "Win Any Match on Suicidal Difficulty", - "displayName": "Win Suicidal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3f199fbc299b56e873bb1bfb2d1726d88db3bbe6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_135" - }, - { - "description": "Win Any Match on Hell on Earth Difficulty", - "displayName": "Win Hell on Earth", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/35c0be17200bacee8c54fbe87f16e8f27a82a181.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_136" - }, - { - "description": "Reach Level 5 on Any Perk", - "displayName": "Mr. Perky 5", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/75ff6bda27bc5f21d0f5aa096305e66b87129871.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_137" - }, - { - "description": "Reach Level 10 on Any Perk", - "displayName": "Mr. Perky 10", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b63768e9a813a14111cc4eeb283a0833db88874.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_138" - }, - { - "description": "Reach Level 15 on Any Perk", - "displayName": "Mr. Perky 15", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/26c3035ca19855e765ad032d1de71fe64ae153e9.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_139" - }, - { - "description": "Reach Level 20 on Any Perk", - "displayName": "Mr. Perky 20", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/99a2fb3824c9f1eb2c607e22da9b4109cee0124f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_140" - }, - { - "description": "Reach Level 25 on Any Perk", - "displayName": "Mr. Perky 25", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9aa58d0c8f2f80e8250bb75aa4de09ffba6da5b5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_141" - }, - { - "description": "Win 1 Multiplayer Match", - "displayName": "Win 1", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/93aee896270cac79fb5ae36375c92091b57e9707.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_142" - }, - { - "description": "Win 10 Multiplayer Matches", - "displayName": "Win 10", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5ac2c4dcfc8e708bce22d43c8fa0a28bc5f63177.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_143" - }, - { - "description": "Win 25 Multiplayer Matches", - "displayName": "Win 25", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/361fe6cb30916a4b3785ea0431b7df56bca3e111.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_144" - }, - { - "description": "Win a VS Survival Round Playing as the Zeds", - "displayName": "VS Zed Win", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/992d3a5c5c8d736cd26ef8ce2f371eeea33a8469.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_145" - }, - { - "description": "Win a VS Survival Round Playing as the Humans", - "displayName": "VS Human Win", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af8cdf129ec3eaa218ca706105ed329792893872.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_146" - }, - { - "description": "Weld a Door to 100%", - "displayName": "Hold Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5b03919fefaa82dc87765dc29961e4fd3816acb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_147" - }, - { - "description": "Heal a Teammate With the Syringe", - "displayName": "I Got Your Back", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a873278bb202e325e5073ae542ebabf0dd276236.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_148" - }, - { - "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", - "displayName": "Benefactor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7b07b668e976c865c0a2ad8707149d43f9652ef6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_149" - }, - { - "description": "Beat Infernal Realms on Normal", - "displayName": "Hell is Other People", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/27b51a5f9b9795e0e2e90d0784c31e70d7047f3c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_150" - }, - { - "description": "Complete Infernal Realms on Survival Hard difficulty", - "displayName": "If You Are Going Through Hell, Keep Going", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a062da8ad5b21973ff9913dfeede3b05c81dc19c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_151" - }, - { - "description": "Complete Infernal Realms on Survival Suicidal difficulty", - "displayName": "Hell is Just a Frame of Mind", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ac0d5107bbe97948e7642300b3503e0d91bcee3b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_152" - }, - { - "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", - "displayName": "All Hope abandon, Ye Who Enter Here", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/210ab00c89581caf7ffe220078d9ab9506f0dabd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_153" - }, - { - "description": "Collect all the Items in Infernal Realms", - "displayName": "Infernal Relics", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3c81f20349851c9b12ea9fba2116d4458c8bb309.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_154" - }, - { - "description": "Reach Level 5 SWAT", - "displayName": "Reach Level 5 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6919e017b0389e4e4f80b94a282bd10b88632567.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_155" - }, - { - "description": "Reach Level 10 SWAT", - "displayName": "Reach Level 10 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ba0a2d8bea98c36f402cf72ff59a17a6ea8a5097.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_156" - }, - { - "description": "Reach Level 15 SWAT", - "displayName": "Reach Level 15 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/07b4a6889ba0f960360b16c6a2c528b2802c8c0d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_157" - }, - { - "description": "Reach Level 20 SWAT", - "displayName": "Reach Level 20 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0577ad2c3987fa0186aaa017fa5c25c75c281133.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_158" - }, - { - "description": "Reach Level 25 SWAT", - "displayName": "Reach Level 25 SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c7655f2d1f275bc77e73b85a02d921f9e29d3031.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_159" - }, - { - "description": "Complete any map as a SWAT on Survival Normal difficulty", - "displayName": "Normal SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2b9a7646537a74042db00c7c46b58463c12331ad.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_160" - }, - { - "description": "Beat Any One Map as SWAT on Hard Difficulty", - "displayName": "Hard SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a43a6bb8e914126587b1419879ff3d95b83ec6f6.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_161" - }, - { - "description": "Beat Any One Map as SWAT on Suicidal Difficulty", - "displayName": "Suicidal SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/af9bbfa27fa159b8ea469ee79ba525bdbcf07b6e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_162" - }, - { - "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", - "displayName": "Hellish SWAT", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a86755764baed752a896d2c8cd524bd20e1d6c57.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_163" - }, - { - "description": "Reach Level 5 Survivalist", - "displayName": "Reach Level 5 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/5c730159237de25db37bbba7ac8b899ba9b92f28.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_164" - }, - { - "description": "Reach Level 10 Survivalist", - "displayName": "Reach Level 10 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c87bbe270e7a60494f0d6a46a173f48e8e90f266.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_165" - }, - { - "description": "Reach Level 15 Survivalist", - "displayName": "Reach Level 15 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0fc03a0b9535d3f31d8cfe3055e905e7cda85939.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_166" - }, - { - "description": "Reach Level 20 Survivalist", - "displayName": "Reach Level 20 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f9526579c6b4f52621b85c5913ff8773940fed11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_167" - }, - { - "description": "Reach Level 25 Survivalist", - "displayName": "Reach Level 25 Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a472196ec80ad363c21e1bac0206061a8ec6e1e1.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_168" - }, - { - "description": "Beat Any One Map as Survivalist on Normal Difficulty", - "displayName": "Normal Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b4c78a847b3842fac7ea587a603594d9a39ffc8a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_169" - }, - { - "description": "Complete any map as a Survivalist on Survival Hard difficulty", - "displayName": "Hard Survivalist ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/17c50c8adff85ea28e3cbd3b7fa31d387efb3eff.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_170" - }, - { - "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", - "displayName": "Suicidal Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/accaa92454ffe35037f67c63c03ebb9544eec484.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_171" - }, - { - "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", - "displayName": "Hellish Survivalist", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a90fc7ad76f58c1278097f3a351001438c62327.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_172" - }, - { - "description": "Complete Zed Landing on Survival Normal difficulty", - "displayName": "Surfs Up", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e1c100915ffb91be6090459fdcda997a31fe62f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_173" - }, - { - "description": "Complete Zed Landing on Survival Hard difficulty", - "displayName": "Gnarly", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1d855a17989f39be054443c9277c90907eff1f8d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_174" - }, - { - "description": "Complete Zed Landing on Survival Suicidal difficulty", - "displayName": "Close-out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25a425379ed71d99787c091fa7a24e507c2eecac.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_175" - }, - { - "description": "Complete Zed Landing on Survival Hell On Earth difficulty", - "displayName": "Blown Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d5f30aa2ff0b4a3e080eab4a61e202a87cf1775.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_176" - }, - { - "description": "Collect all the volley balls on Zed Landing", - "displayName": "ALAN!!!!!!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffad0d1970b1b8813ba164cd4465fc4de9b271eb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_177" - }, - { - "description": "Complete The Descent on Survival Normal difficulty", - "displayName": "How Bout Some Gas?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/02f005688d599e8f655a6d41a65751031c1a4392.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_178" - }, - { - "description": "Complete The Descent on Survival Hard difficulty", - "displayName": "But what if we added Gas?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84848cab1b952d23328637f81e45b69aeda38ded.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_179" - }, - { - "description": "Complete The Descent on Survival Suicidal difficulty", - "displayName": "Let's Try Some Gas", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d6d7a2ce4b36b10b27946e972b3b7184f2226069.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_180" - }, - { - "description": "Complete The Descent on Survival Hell On Earth difficulty", - "displayName": "That's enough gas....", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6e2ab1da79c801e23fba287c2fccc548bdbf0026.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_181" - }, - { - "description": "Collect all the items on The Descent", - "displayName": "Hans Off the Merchandise", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/21ab02dcc7dc02c09b5e65a82fcdfa200a96a0db.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_182" - }, - { - "description": "Complete Nuked on Survival Normal difficulty", - "displayName": "The War Room", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2a96570f609cf5842a31691e5cc8c0a800907786.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_183" - }, - { - "description": "Complete Nuked on Survival Hard difficulty", - "displayName": "The Mineshaft Gap", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c28acbddf4b6bed6d2ad1ec7536b1160e3b056.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_184" - }, - { - "description": "Complete Nuked on Survival Suicidal difficulty", - "displayName": "Peace is Our Profession", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e759bb1400427742feb5d39e715e6c956c11987a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_185" - }, - { - "description": "Complete Nuked on Survival Hell On Earth difficulty", - "displayName": "How I Learned to Love the Bomb", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/47c42d2d9c5eb25d2c2c4a58dddd8084f470892e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_186" - }, - { - "description": "Collect all the items on Nuked", - "displayName": "Davy Crockett", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c16a98ee7a9a777730733ca1ec1cda2391fb89c7.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_187" - }, - { - "description": "Complete Tragic Kingdom on Survival Normal difficulty", - "displayName": "It's a Bloody World After All", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0803a7e5a71920b9aa9c08e71eb381a9eda6e12.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_188" - }, - { - "description": "Complete Tragic Kingdom on Survival Hard difficulty", - "displayName": "The Goriest Place on Earth", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e2f6339b665184291d2987a3a48a5dbfb4b54c0e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_189" - }, - { - "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", - "displayName": "The House the Zed Built", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/85f0612297393d567d8ff712fa324dabb0c269fb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_190" - }, - { - "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", - "displayName": "Where Nightmares Come True", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f68565b02007c17260805be1d5bb3c55271e1cb3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_191" - }, - { - "description": "Collect all the items on The Tragic Kingdom", - "displayName": "The Wonderful World of Merchandising", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/79ad35a7fe93d31661bd54825571708545e43210.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_192" - }, - { - "description": "Beat Nightmare on Normal", - "displayName": "I Got a Rock", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/1777445a1bc01a5c39a75c7167df6359edd5f26e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_193" - }, - { - "description": "Beat Nightmare on Hard", - "displayName": "Yuck, Candy Corn", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fb9b4f18d7f58d43295ee571cae5c821a5f12836.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_194" - }, - { - "description": "Beat Nightmare on Suicidal", - "displayName": "Fun Size? What is Fun Size?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53e20884174ea4717588f5a7c324d1a02d207dae.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_195" - }, - { - "description": "Beat Nightmare on Hell on Earth", - "displayName": "Victory! Full Size Candy Bar!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c69b7865a24dcc827d5ea44ac166907b8f08b4ad.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_196" - }, - { - "description": "Collect all the items (skulls) on Nightmare", - "displayName": "Letting the Demons Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/874e1f46efd7b59e66485ee1b9b4b5765bcab692.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_197" - }, - { - "description": "Beat Krampus Lair on Normal", - "displayName": "Stocking Full of Coal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ff769cc651d4be77250428a4b6d4e0a254015b11.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_198" - }, - { - "description": "Beat Krampus Lair on Hard", - "displayName": "Bundle of Switches", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84082b5ce17368ef1e6a1d9e78174866674686ba.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_199" - }, - { - "description": "Beat Krampus Lair on Suicidal", - "displayName": "A Whupping", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/fe7e707e5ad19ef5e0dd9152a6d1b3ddeb59d883.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_200" - }, - { - "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", - "displayName": "Carried off to the Underworld", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c318550b2c02db9532d6051dd3af1f855cd87f5e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_201" - }, - { - "description": "Collect all the items (Snowglobes) on Krampus Lair", - "displayName": "A World Under Glass", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_202" - }, - { - "description": "Complete DieSector wave 25 on Endless Normal difficulty", - "displayName": "Training Simulation", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/510dc6da957123fce45794b85cc89075b6aa35d0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_203" - }, - { - "description": "Complete DieSector wave 25 on Endless Hard difficulty", - "displayName": "Test Trials", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/925db58c260bb48f62eb56ef9a5e8faf9274c905.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_204" - }, - { - "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", - "displayName": "Code Dead", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/222996c8e587aefda46d41c4c70b9108357ed175.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_205" - }, - { - "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", - "displayName": "Fatal Exception", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/cf61a22148cdb35bd943ff14fb83f68c0cd8736e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_206" - }, - { - "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", - "displayName": "It's aD.A.R.able", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/53405d791ad24a2a03b0d71c9c6f515e05fe3620.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_207" - }, - { - "description": "Complete Power Core on Survival Normal difficulty", - "displayName": "A Spark to Light the Way", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/877725c3b9e141295e2c52ac6f14af6f68013f04.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_208" - }, - { - "description": "Complete Power Core on Survival Hard difficulty", - "displayName": "Bolting through the Core", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/95d39cdab7b75fca64b64c39e4671f3ff09f3871.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_209" - }, - { - "description": "Complete Power Core on Survival Suicidal difficulty", - "displayName": "High Voltage", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d5521e83f9cf369d9f807489db0120d97a3e3002.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_210" - }, - { - "description": "Complete Power Core on Survival Hell On Earth difficulty", - "displayName": "I Have the Power!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8ca61bb09f6a26eebd4f76e5ab2804b2bdbd6540.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_211" - }, - { - "description": "Collect all the items (Batteries) on Power Core", - "displayName": "Surge Breaker", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/2942584ef67dfc745bed2c7fcbd8f04bd0c9b11b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_212" - }, - { - "description": "Complete Airship on Survival Normal difficulty", - "displayName": "A Little Turbulence", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/e76995587e9bf81b4beecad3b305b06f32ee35c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_213" - }, - { - "description": "Complete Airship on Survival Hard difficulty", - "displayName": "Flying Unfriendly Skies", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3dcc2a19350aef1f5b5079d2fa1510225bb5924f.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_214" - }, - { - "description": "Complete Airship on Survival Suicidal difficulty", - "displayName": "Soar, Gore, and More", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/d318dee401d56bafc7ebed0eaab6e4dcfb593b00.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_215" - }, - { - "description": "Complete Airship on Survival Hell On Earth difficulty", - "displayName": "Mile High Dead Club", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/350d3e23eb31845a77fcef992c7fe899fd436f80.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_216" - }, - { - "description": "Collect all the items (Steam Cells) on Airship", - "displayName": "Powered by Steam", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b5fdc74747940179c7dc5f3ab964b1ef4175fdc0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_217" - }, - { - "description": "Complete Lockdown on Survival Normal difficulty", - "displayName": "Station Stabilization", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ffab338f1cf3295c1efd4a01d0e0bca3def85229.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_218" - }, - { - "description": "Complete Lockdown on Survival Hard difficulty", - "displayName": "Fun Near the Sun", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/39205159c665ba3b80af9365b4f6e58ccac29ef2.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_219" - }, - { - "description": "Complete Lockdown on Survival Suicidal difficulty", - "displayName": "Space Race", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7c8cfb7f628de3b9c7a438d17311882900314c75.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_220" - }, - { - "description": "Complete Lockdown on Survival Hell On Earth difficulty", - "displayName": "Houston, We Don't Have a Problem", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/177825463454281e2ef5c05ecc1526ef2474c3d4.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_221" - }, - { - "description": "Collect all the items (Batteries) on Lockdown", - "displayName": "Shocking Discovery!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c5b893ccd87f50690b337222fe6139c931b3533c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_222" - }, - { - "description": "Complete Monster Ball on Survival Normal difficulty", - "displayName": "Castle Crashers", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/a5f8f0ecc173daa77a844bc1ad6b91ddaf60383d.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_223" - }, - { - "description": "Complete Monster Ball on Survival Hard difficulty", - "displayName": "Party Hard!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/49cda67ccd22c0ebf522717bd03fad590b786389.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_224" - }, - { - "description": "Complete Monster Ball on Survival Suicidal difficulty", - "displayName": "Dance on the Gore Floor", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/ce29727842be31de090c83871e6f5831efacfb87.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_225" - }, - { - "description": "Complete Monster Ball on Survival Hell on Earth difficulty", - "displayName": "Rest In Pieces", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/25005dfa6da839a95b8aa3664ebb13034a228f49.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_226" - }, - { - "description": "Destroy 10 Glowing Skulls in Monster Ball", - "displayName": "Spooky Scary Skeletons", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/8d3b14b6dcab1ffaa714e2bebdff231a8972e313.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_227" - }, - { - "description": "Unlock the Alchemist Room in Monster Ball", - "displayName": "Death's Door", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/382680a850833e6d1b227c6b92d066ebb892ce0e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_228" - }, - { - "description": "Complete Santa's Workshop on Survival Normal Difficulty", - "displayName": "Cookies and Milk", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6c9262e0a59ee9f4ae0b6b7f778e57aa5b84ddbb.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_229" - }, - { - "description": "Complete Santa's Workshop on Survival Hard Difficulty", - "displayName": "Slaying with Santa", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/b9ef59caab40af925efab875cec9c3cfcddc8bbd.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_230" - }, - { - "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", - "displayName": "A Deadly Carol", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/55cebdba7cae5617c8a8664ff2361d31c98e41ac.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_231" - }, - { - "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", - "displayName": "You're On The Badass List", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/42cdfa0830aaaafbf52b7aa22b14e37094277526.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_232" - }, - { - "description": "Destroy 10 Snow Globes in Santa's Workshop", - "displayName": "Yule Shoot Your Eye Out", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/486d1b5971dbe85edd3b93b61d19b474ff6764a8.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_233" - }, - { - "description": "Complete Shopping Spree on Survival Normal Difficulty", - "displayName": "Cleanup On Aisle 3", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3a4536ce96f3535865a03aea65fd970706339058.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_234" - }, - { - "description": "Complete Shopping Spree on Survival Hard Difficulty", - "displayName": "Shoot One Get Two Free", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/933bc0eaa31bc8e877f08e12cf5543a40032e4d5.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_235" - }, - { - "description": "Complete Shopping Spree on Survival Suicidal Difficulty", - "displayName": "Savings to Die For", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c4e0289e34928cce62665fe535b886f38d8a0534.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_236" - }, - { - "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", - "displayName": "Red Friday", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/eb976a5df4b166702cf5c16ef38026f62e76ba13.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/4bd7abab35ec5215d8bcc56872addd8ca2f331ff.jpg", - "name": "Achievement_237" - }, - { - "description": "Destroy 10 Dosh Necklaces in Shopping Spree", - "displayName": "A Special Deal", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/60d04d244713b2b9475658538261124a0da51adc.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54596c68ca49090f1ec57b19dfad28ff257400d2.jpg", - "name": "Achievement_238" - }, - { - "description": "Complete Spillway on Survival Normal Difficulty", - "displayName": "It's All Downstream From Here", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/84c45895752213f960988d909fac2317c1468d7e.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_239" - }, - { - "description": "Complete Spillway on Survival Hard Difficulty", - "displayName": "Zeds Be Dam", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/dca6e9d3e9aff9dd05a56c3a9838e21e37d2e8cf.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_240" - }, - { - "description": "Complete Spillway on Survival Suicidal Difficulty", - "displayName": "Overflow Controlled", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/0a834f5eca65f679bb9232faa5371501addd2222.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_241" - }, - { - "description": "Complete Spillway on Survival Hell On Earth Difficulty", - "displayName": "Dam You're Good!", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/751f4a1ed126d232c8be5cfa6b5efa05ec103316.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_242" - }, - { - "description": "Destroy 10 Dosh Necklaces in Spillway", - "displayName": "Money Down the Drain", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/87cc7f0c7342385b24efb2956f214c7d057f3288.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_243" - }, - { - "description": "Complete Steam Fortress on Objective Normal Difficulty", - "displayName": "Burning Out the Fuse", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c669333a43bc28fdda7a441d54bab8d69cb14b2c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_244" - }, - { - "description": "Complete Steam Fortress on Objective Hard Difficulty", - "displayName": "Touchdown Brings Me Down", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/6a3723df79a8f83adef085ad31bf5ce7584715cf.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_245" - }, - { - "description": "Complete Steam Fortress on Objective Suicidal Difficulty", - "displayName": "High as a Kite", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7197c8ba18ed6dd63deaa9ac2198e26aa199d07b.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_246" - }, - { - "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", - "displayName": "It's Cold as Hell", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/54a004733d400ae8f350ce4fb95e8f9601462189.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_247" - }, - { - "description": "Destroy 10 Steam Batteries on Steam Fortress", - "displayName": "All This Science I Don't Understand", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f93605f0b8543fa506641195fa7fd6e21e6bb545.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/380c05c1490a2d062d0d38ab4edb3751edfb352b.jpg", - "name": "Achievement_248" - }, - { - "description": "Complete Zed Landing on Objective Normal Difficulty", - "displayName": "Droning On", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/3798d728855dc6dc65e926288176ab87666dbd86.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_249" - }, - { - "description": "Complete Zed Landing on Objective Hard Difficulty", - "displayName": "Data Deliverier ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/7933cd8f729179eb61274fffa8ac3af69368997c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_250" - }, - { - "description": "Complete Zed Landing on Objective Suicidal Difficulty", - "displayName": "Island Isolation", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/c25b0221caf5779641711eae5dbe5e915d7feef0.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_251" - }, - { - "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", - "displayName": "Someone Call a Chopper?", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/9ccce9f949a52cf79fbc4b53f703fb4bd726d652.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_252" - }, - { - "description": "Complete Outpost on Objective Normal Difficulty", - "displayName": "It's Snow Good. ", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/626744b7626d76146205e4ee0545ff5b82d48536.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_253" - }, - { - "description": "Complete Outpost on Objective Hard Difficulty", - "displayName": "Giving the Cold Shoulder", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/f0d63ed438b13319e0c81a6d7b3b0fea00e28b84.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_254" - }, - { - "description": "Complete Outpost on Objective Suicidal Difficulty", - "displayName": "Frozen Assets", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/72142caac4513322346bb51b738a099219288e9c.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_255" - }, - { - "description": "Complete Outpost on Objective Hell On Earth Difficulty", - "displayName": "The Snow Must Go On", - "hidden": "0", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/18fb3f2cd9de0a8d536b4070a2ac59d747f5e76a.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_256" - }, - { - "description": null, - "displayName": "Achievement_257_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_257" - }, - { - "description": null, - "displayName": "Achievement_258_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_258" - }, - { - "description": null, - "displayName": "Achievement_259_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_259" - }, - { - "description": null, - "displayName": "Achievement_260_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_260" - }, - { - "description": null, - "displayName": "Achievement_261_Name", - "hidden": "1", - "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/232090/34120e794323534aaec67ad4711d5674144656c3.jpg", - "name": "Achievement_261" - } -] \ No newline at end of file diff --git a/files_example/steam_settings.EXAMPLE/achievements_EXAMPLE.json b/files_example/steam_settings.EXAMPLE/achievements_EXAMPLE.json new file mode 100644 index 0000000..b5788f6 --- /dev/null +++ b/files_example/steam_settings.EXAMPLE/achievements_EXAMPLE.json @@ -0,0 +1,2098 @@ +[ + { + "description": "Complete Burning Paris on Survival Normal difficulty", + "displayName": "Tower Tussle", + "hidden": "0", + "icon": "images/Achievement_0.jpg", + "icongray": "images/Achievement_0_gray.jpg", + "name": "Achievement_0" + }, + { + "description": "Complete Burning Paris on Survival Hard difficulty", + "displayName": "Seine Skirmish", + "hidden": "0", + "icon": "images/Achievement_1.jpg", + "icongray": "images/Achievement_1_gray.jpg", + "name": "Achievement_1" + }, + { + "description": "Beat Burning Paris on Suicidal", + "displayName": "Bastille Brawl", + "hidden": "0", + "icon": "images/Achievement_2.jpg", + "icongray": "images/Achievement_2_gray.jpg", + "name": "Achievement_2" + }, + { + "description": "Beat Burning Paris on Hell on Earth", + "displayName": "Arc Action", + "hidden": "0", + "icon": "images/Achievement_3.jpg", + "icongray": "images/Achievement_3_gray.jpg", + "name": "Achievement_3" + }, + { + "description": "Beat Outpost on Normal", + "displayName": "You Can't Fight In Here, This Is The Control Room", + "hidden": "0", + "icon": "images/Achievement_4.jpg", + "icongray": "images/Achievement_4_gray.jpg", + "name": "Achievement_4" + }, + { + "description": "Beat Outpost on Hard", + "displayName": "This Is What Happens When You Meet A Zed In The Alps", + "hidden": "0", + "icon": "images/Achievement_5.jpg", + "icongray": "images/Achievement_5_gray.jpg", + "name": "Achievement_5" + }, + { + "description": "Beat Outpost on Suicidal", + "displayName": "The Shield Doors Must Be Closed", + "hidden": "0", + "icon": "images/Achievement_6.jpg", + "icongray": "images/Achievement_6_gray.jpg", + "name": "Achievement_6" + }, + { + "description": "Beat Outpost on Hell on Earth", + "displayName": "Fear Is For The Zeds, My Little Lord", + "hidden": "0", + "icon": "images/Achievement_7.jpg", + "icongray": "images/Achievement_7_gray.jpg", + "name": "Achievement_7" + }, + { + "description": "Beat Biotics Lab on Normal", + "displayName": "Open For Testing", + "hidden": "0", + "icon": "images/Achievement_8.jpg", + "icongray": "images/Achievement_8_gray.jpg", + "name": "Achievement_8" + }, + { + "description": "Beat Biotics Lab on Hard", + "displayName": "Limited Contact", + "hidden": "0", + "icon": "images/Achievement_9.jpg", + "icongray": "images/Achievement_9_gray.jpg", + "name": "Achievement_9" + }, + { + "description": "Beat Biotics Lab on Suicidal", + "displayName": "Restricted Access", + "hidden": "0", + "icon": "images/Achievement_10.jpg", + "icongray": "images/Achievement_10_gray.jpg", + "name": "Achievement_10" + }, + { + "description": "Beat Biotics Lab on Hell on Earth", + "displayName": "Controlled Environment", + "hidden": "0", + "icon": "images/Achievement_11.jpg", + "icongray": "images/Achievement_11_gray.jpg", + "name": "Achievement_11" + }, + { + "description": "Beat Volter Manor on Normal", + "displayName": "Just Visiting", + "hidden": "0", + "icon": "images/Achievement_12.jpg", + "icongray": "images/Achievement_12_gray.jpg", + "name": "Achievement_12" + }, + { + "description": "Beat Volter Manor on Hard", + "displayName": "Mind Your Manor", + "hidden": "0", + "icon": "images/Achievement_13.jpg", + "icongray": "images/Achievement_13_gray.jpg", + "name": "Achievement_13" + }, + { + "description": "Beat Volter Manor on Suicidal", + "displayName": "Settling In", + "hidden": "0", + "icon": "images/Achievement_14.jpg", + "icongray": "images/Achievement_14_gray.jpg", + "name": "Achievement_14" + }, + { + "description": "Complete Volter Manor on Survival Hell On Earth difficulty", + "displayName": "Lord of the Manor", + "hidden": "0", + "icon": "images/Achievement_15.jpg", + "icongray": "images/Achievement_15_gray.jpg", + "name": "Achievement_15" + }, + { + "description": "Collect all the items on Burning Paris", + "displayName": "Paris Plunder", + "hidden": "0", + "icon": "images/Achievement_16.jpg", + "icongray": "images/Achievement_16_gray.jpg", + "name": "Achievement_16" + }, + { + "description": "Collect all the items on Outpost", + "displayName": "Outpost Offerings", + "hidden": "0", + "icon": "images/Achievement_17.jpg", + "icongray": "images/Achievement_17_gray.jpg", + "name": "Achievement_17" + }, + { + "description": "Collect all the items on Biotics Lab", + "displayName": "Biotics Bling", + "hidden": "0", + "icon": "images/Achievement_18.jpg", + "icongray": "images/Achievement_18_gray.jpg", + "name": "Achievement_18" + }, + { + "description": "Collect all the items on Volter Manor", + "displayName": "Manor Money", + "hidden": "0", + "icon": "images/Achievement_19.jpg", + "icongray": "images/Achievement_19_gray.jpg", + "name": "Achievement_19" + }, + { + "description": "Complete Evacuation Point on Survival Normal difficulty", + "displayName": "The Suite Life", + "hidden": "0", + "icon": "images/Achievement_20.jpg", + "icongray": "images/Achievement_20_gray.jpg", + "name": "Achievement_20" + }, + { + "description": "Complete Evacuation Point on Survival Hard difficulty", + "displayName": "Unsinkable II", + "hidden": "0", + "icon": "images/Achievement_21.jpg", + "icongray": "images/Achievement_21_gray.jpg", + "name": "Achievement_21" + }, + { + "description": "Complete Evacuation Point on Survival Suicidal difficulty", + "displayName": "Bow Movement", + "hidden": "0", + "icon": "images/Achievement_22.jpg", + "icongray": "images/Achievement_22_gray.jpg", + "name": "Achievement_22" + }, + { + "description": "Complete Evacuation Point on Survival Hell On Earth difficulty", + "displayName": "Seas The Day", + "hidden": "0", + "icon": "images/Achievement_23.jpg", + "icongray": "images/Achievement_23_gray.jpg", + "name": "Achievement_23" + }, + { + "description": "Complete Catacombs on Survival Normal difficulty", + "displayName": "A Light In The Darkness", + "hidden": "0", + "icon": "images/Achievement_24.jpg", + "icongray": "images/Achievement_24_gray.jpg", + "name": "Achievement_24" + }, + { + "description": "Complete Catacombs on Survival Hard difficulty", + "displayName": "This Is No Mine", + "hidden": "0", + "icon": "images/Achievement_25.jpg", + "icongray": "images/Achievement_25_gray.jpg", + "name": "Achievement_25" + }, + { + "description": "Complete Catacombs on Survival Suicidal difficulty", + "displayName": "This Is A Tomb, Theirs", + "hidden": "0", + "icon": "images/Achievement_26.jpg", + "icongray": "images/Achievement_26_gray.jpg", + "name": "Achievement_26" + }, + { + "description": "Complete Catacombs on Survival Hell On Earth difficulty", + "displayName": "They Shall Not Pass", + "hidden": "0", + "icon": "images/Achievement_27.jpg", + "icongray": "images/Achievement_27_gray.jpg", + "name": "Achievement_27" + }, + { + "description": "Collect all the items on Evacuation Point", + "displayName": "Point Paper", + "hidden": "0", + "icon": "images/Achievement_28.jpg", + "icongray": "images/Achievement_28_gray.jpg", + "name": "Achievement_28" + }, + { + "description": "Collect all the items on Catacombs", + "displayName": "Catacombs Cash", + "hidden": "0", + "icon": "images/Achievement_29.jpg", + "icongray": "images/Achievement_29_gray.jpg", + "name": "Achievement_29" + }, + { + "description": "Reach Level 5 Berserker", + "displayName": "Reach Level 5 Berserker", + "hidden": "0", + "icon": "images/Achievement_30.jpg", + "icongray": "images/Achievement_30_gray.jpg", + "name": "Achievement_30" + }, + { + "description": "Reach Level 10 Berserker", + "displayName": "Reach Level 10 Berserker", + "hidden": "0", + "icon": "images/Achievement_31.jpg", + "icongray": "images/Achievement_31_gray.jpg", + "name": "Achievement_31" + }, + { + "description": "Reach Level 15 Berserker", + "displayName": "Reach Level 15 Berserker", + "hidden": "0", + "icon": "images/Achievement_32.jpg", + "icongray": "images/Achievement_32_gray.jpg", + "name": "Achievement_32" + }, + { + "description": "Reach Level 20 Berserker", + "displayName": "Reach Level 20 Berserker", + "hidden": "0", + "icon": "images/Achievement_33.jpg", + "icongray": "images/Achievement_33_gray.jpg", + "name": "Achievement_33" + }, + { + "description": "Reach Level 25 Berserker", + "displayName": "Reach Level 25 Berserker", + "hidden": "0", + "icon": "images/Achievement_34.jpg", + "icongray": "images/Achievement_34_gray.jpg", + "name": "Achievement_34" + }, + { + "description": "Reach Level 5 Medic", + "displayName": "Reach Level 5 Medic", + "hidden": "0", + "icon": "images/Achievement_35.jpg", + "icongray": "images/Achievement_35_gray.jpg", + "name": "Achievement_35" + }, + { + "description": "Reach Level 10 Medic", + "displayName": "Reach Level 10 Medic", + "hidden": "0", + "icon": "images/Achievement_36.jpg", + "icongray": "images/Achievement_36_gray.jpg", + "name": "Achievement_36" + }, + { + "description": "Reach Level 15 Medic", + "displayName": "Reach Level 15 Medic", + "hidden": "0", + "icon": "images/Achievement_37.jpg", + "icongray": "images/Achievement_37_gray.jpg", + "name": "Achievement_37" + }, + { + "description": "Reach Level 20 Medic", + "displayName": "Reach Level 20 Medic", + "hidden": "0", + "icon": "images/Achievement_38.jpg", + "icongray": "images/Achievement_38_gray.jpg", + "name": "Achievement_38" + }, + { + "description": "Reach Level 25 Medic", + "displayName": "Reach Level 25 Medic", + "hidden": "0", + "icon": "images/Achievement_39.jpg", + "icongray": "images/Achievement_39_gray.jpg", + "name": "Achievement_39" + }, + { + "description": "Reach Level 5 Commando", + "displayName": "Reach Level 5 Commando", + "hidden": "0", + "icon": "images/Achievement_40.jpg", + "icongray": "images/Achievement_40_gray.jpg", + "name": "Achievement_40" + }, + { + "description": "Reach Level 10 Commando", + "displayName": "Reach Level 10 Commando", + "hidden": "0", + "icon": "images/Achievement_41.jpg", + "icongray": "images/Achievement_41_gray.jpg", + "name": "Achievement_41" + }, + { + "description": "Reach Level 15 Commando", + "displayName": "Reach Level 15 Commando", + "hidden": "0", + "icon": "images/Achievement_42.jpg", + "icongray": "images/Achievement_42_gray.jpg", + "name": "Achievement_42" + }, + { + "description": "Reach Level 20 Commando", + "displayName": "Reach Level 20 Commando", + "hidden": "0", + "icon": "images/Achievement_43.jpg", + "icongray": "images/Achievement_43_gray.jpg", + "name": "Achievement_43" + }, + { + "description": "Reach Level 25 Commando", + "displayName": "Reach Level 25 Commando", + "hidden": "0", + "icon": "images/Achievement_44.jpg", + "icongray": "images/Achievement_44_gray.jpg", + "name": "Achievement_44" + }, + { + "description": "Reach Level 5 Support", + "displayName": "Reach Level 5 Support", + "hidden": "0", + "icon": "images/Achievement_45.jpg", + "icongray": "images/Achievement_45_gray.jpg", + "name": "Achievement_45" + }, + { + "description": "Reach Level 10 Support", + "displayName": "Reach Level 10 Support", + "hidden": "0", + "icon": "images/Achievement_46.jpg", + "icongray": "images/Achievement_46_gray.jpg", + "name": "Achievement_46" + }, + { + "description": "Reach Level 15 Support", + "displayName": "Reach Level 15 Support", + "hidden": "0", + "icon": "images/Achievement_47.jpg", + "icongray": "images/Achievement_47_gray.jpg", + "name": "Achievement_47" + }, + { + "description": "Reach Level 20 Support", + "displayName": "Reach Level 20 Support", + "hidden": "0", + "icon": "images/Achievement_48.jpg", + "icongray": "images/Achievement_48_gray.jpg", + "name": "Achievement_48" + }, + { + "description": "Reach Level 25 Support", + "displayName": "Reach Level 25 Support", + "hidden": "0", + "icon": "images/Achievement_49.jpg", + "icongray": "images/Achievement_49_gray.jpg", + "name": "Achievement_49" + }, + { + "description": "Reach Level 5 Firebug", + "displayName": "Reach Level 5 Firebug", + "hidden": "0", + "icon": "images/Achievement_50.jpg", + "icongray": "images/Achievement_50_gray.jpg", + "name": "Achievement_50" + }, + { + "description": "Reach Level 10 Firebug", + "displayName": "Reach Level 10 Firebug", + "hidden": "0", + "icon": "images/Achievement_51.jpg", + "icongray": "images/Achievement_51_gray.jpg", + "name": "Achievement_51" + }, + { + "description": "Reach Level 15 Firebug", + "displayName": "Reach Level 15 Firebug", + "hidden": "0", + "icon": "images/Achievement_52.jpg", + "icongray": "images/Achievement_52_gray.jpg", + "name": "Achievement_52" + }, + { + "description": "Reach Level 20 Firebug", + "displayName": "Reach Level 20 Firebug", + "hidden": "0", + "icon": "images/Achievement_53.jpg", + "icongray": "images/Achievement_53_gray.jpg", + "name": "Achievement_53" + }, + { + "description": "Reach Level 25 Firebug", + "displayName": "Reach Level 25 Firebug", + "hidden": "0", + "icon": "images/Achievement_54.jpg", + "icongray": "images/Achievement_54_gray.jpg", + "name": "Achievement_54" + }, + { + "description": "Reach Level 5 Demolitions", + "displayName": "Reach Level 5 Demolitions", + "hidden": "0", + "icon": "images/Achievement_55.jpg", + "icongray": "images/Achievement_55_gray.jpg", + "name": "Achievement_55" + }, + { + "description": "Reach Level 10 Demolitions", + "displayName": "Reach Level 10 Demolitions", + "hidden": "0", + "icon": "images/Achievement_56.jpg", + "icongray": "images/Achievement_56_gray.jpg", + "name": "Achievement_56" + }, + { + "description": "Reach Level 15 Demolitions", + "displayName": "Reach Level 15 Demolitions", + "hidden": "0", + "icon": "images/Achievement_57.jpg", + "icongray": "images/Achievement_57_gray.jpg", + "name": "Achievement_57" + }, + { + "description": "Reach Level 20 Demolitions", + "displayName": "Reach Level 20 Demolitions", + "hidden": "0", + "icon": "images/Achievement_58.jpg", + "icongray": "images/Achievement_58_gray.jpg", + "name": "Achievement_58" + }, + { + "description": "Reach Level 25 Demolitions", + "displayName": "Reach Level 25 Demolitions", + "hidden": "0", + "icon": "images/Achievement_59.jpg", + "icongray": "images/Achievement_59_gray.jpg", + "name": "Achievement_59" + }, + { + "description": "Reach Level 5 Gunslinger", + "displayName": "Reach Level 5 Gunslinger", + "hidden": "0", + "icon": "images/Achievement_60.jpg", + "icongray": "images/Achievement_60_gray.jpg", + "name": "Achievement_60" + }, + { + "description": "Reach Level 10 Gunslinger", + "displayName": "Reach Level 10 Gunslinger", + "hidden": "0", + "icon": "images/Achievement_61.jpg", + "icongray": "images/Achievement_61_gray.jpg", + "name": "Achievement_61" + }, + { + "description": "Reach Level 15 Gunslinger", + "displayName": "Reach Level 15 Gunslinger", + "hidden": "0", + "icon": "images/Achievement_62.jpg", + "icongray": "images/Achievement_62_gray.jpg", + "name": "Achievement_62" + }, + { + "description": "Reach Level 20 Gunslinger", + "displayName": "Reach Level 20 Gunslinger", + "hidden": "0", + "icon": "images/Achievement_63.jpg", + "icongray": "images/Achievement_63_gray.jpg", + "name": "Achievement_63" + }, + { + "description": "Reach Level 25 Gunslinger", + "displayName": "Reach Level 25 Gunslinger", + "hidden": "0", + "icon": "images/Achievement_64.jpg", + "icongray": "images/Achievement_64_gray.jpg", + "name": "Achievement_64" + }, + { + "description": "Beat Any One Map as Berserker on Normal Difficulty", + "displayName": "Normal Berserker", + "hidden": "0", + "icon": "images/Achievement_65.jpg", + "icongray": "images/Achievement_65_gray.jpg", + "name": "Achievement_65" + }, + { + "description": "Beat Any One Map as Berserker on Hard Difficulty", + "displayName": "Hard Berserker", + "hidden": "0", + "icon": "images/Achievement_66.jpg", + "icongray": "images/Achievement_66_gray.jpg", + "name": "Achievement_66" + }, + { + "description": "Beat Any One Map as Berserker on Suicidal Difficulty", + "displayName": "Suicidal Berserker", + "hidden": "0", + "icon": "images/Achievement_67.jpg", + "icongray": "images/Achievement_67_gray.jpg", + "name": "Achievement_67" + }, + { + "description": "Beat Any One Map as Berserker on Hell on Earth Difficulty", + "displayName": "Hellish Berserker", + "hidden": "0", + "icon": "images/Achievement_68.jpg", + "icongray": "images/Achievement_68_gray.jpg", + "name": "Achievement_68" + }, + { + "description": "Beat Any One Map as Medic on Normal Difficulty", + "displayName": "Normal Medic", + "hidden": "0", + "icon": "images/Achievement_69.jpg", + "icongray": "images/Achievement_69_gray.jpg", + "name": "Achievement_69" + }, + { + "description": "Beat Any One Map as Medic on Hard Difficulty", + "displayName": "Hard Medic", + "hidden": "0", + "icon": "images/Achievement_70.jpg", + "icongray": "images/Achievement_70_gray.jpg", + "name": "Achievement_70" + }, + { + "description": "Beat Any One Map as Medic on Suicidal Difficulty", + "displayName": "Suicidal Medic", + "hidden": "0", + "icon": "images/Achievement_71.jpg", + "icongray": "images/Achievement_71_gray.jpg", + "name": "Achievement_71" + }, + { + "description": "Beat Any One Map as Medic on Hell on Earth Difficulty", + "displayName": "Hellish Medic", + "hidden": "0", + "icon": "images/Achievement_72.jpg", + "icongray": "images/Achievement_72_gray.jpg", + "name": "Achievement_72" + }, + { + "description": "Complete any map as a Commando on Survival Normal difficulty", + "displayName": "Normal Commando", + "hidden": "0", + "icon": "images/Achievement_73.jpg", + "icongray": "images/Achievement_73_gray.jpg", + "name": "Achievement_73" + }, + { + "description": "Complete any map as a Commando on Survival Hard difficulty", + "displayName": "Hard Commando", + "hidden": "0", + "icon": "images/Achievement_74.jpg", + "icongray": "images/Achievement_74_gray.jpg", + "name": "Achievement_74" + }, + { + "description": "Complete any map as a Commando on Survival Suicidal difficulty", + "displayName": "Suicidal Commando", + "hidden": "0", + "icon": "images/Achievement_75.jpg", + "icongray": "images/Achievement_75_gray.jpg", + "name": "Achievement_75" + }, + { + "description": "Complete any map as a Commando on Survival Hell On Earth difficulty", + "displayName": "Hellish Commando", + "hidden": "0", + "icon": "images/Achievement_76.jpg", + "icongray": "images/Achievement_76_gray.jpg", + "name": "Achievement_76" + }, + { + "description": "Complete any map as a Support on Survival Normal difficulty", + "displayName": "Normal Support", + "hidden": "0", + "icon": "images/Achievement_77.jpg", + "icongray": "images/Achievement_77_gray.jpg", + "name": "Achievement_77" + }, + { + "description": "Complete any map as a Support on Survival Hard difficulty", + "displayName": "Hard Support", + "hidden": "0", + "icon": "images/Achievement_78.jpg", + "icongray": "images/Achievement_78_gray.jpg", + "name": "Achievement_78" + }, + { + "description": "Complete any map as a Support on Survival Suicidal difficulty", + "displayName": "Suicidal Support", + "hidden": "0", + "icon": "images/Achievement_79.jpg", + "icongray": "images/Achievement_79_gray.jpg", + "name": "Achievement_79" + }, + { + "description": "Complete any map as a Support on Survival Hell On Earth difficulty", + "displayName": "Hellish Support", + "hidden": "0", + "icon": "images/Achievement_80.jpg", + "icongray": "images/Achievement_80_gray.jpg", + "name": "Achievement_80" + }, + { + "description": "Complete any map as a Firebug on Survival Normal difficulty", + "displayName": "Normal Firebug", + "hidden": "0", + "icon": "images/Achievement_81.jpg", + "icongray": "images/Achievement_81_gray.jpg", + "name": "Achievement_81" + }, + { + "description": "Complete any map as a Firebug on Survival Hard difficulty", + "displayName": "Hard Firebug", + "hidden": "0", + "icon": "images/Achievement_82.jpg", + "icongray": "images/Achievement_82_gray.jpg", + "name": "Achievement_82" + }, + { + "description": "Complete any map as a Firebug on Survival Suicidal difficulty", + "displayName": "Suicidal Firebug", + "hidden": "0", + "icon": "images/Achievement_83.jpg", + "icongray": "images/Achievement_83_gray.jpg", + "name": "Achievement_83" + }, + { + "description": "Complete any map as a Firebug on Survival Hell On Earth difficulty", + "displayName": "Hellish Firebug", + "hidden": "0", + "icon": "images/Achievement_84.jpg", + "icongray": "images/Achievement_84_gray.jpg", + "name": "Achievement_84" + }, + { + "description": "Complete any map as a Demolitionist on Survival Normal difficulty", + "displayName": "Normal Demolition", + "hidden": "0", + "icon": "images/Achievement_85.jpg", + "icongray": "images/Achievement_85_gray.jpg", + "name": "Achievement_85" + }, + { + "description": "Complete any map as a Demolitionist on Survival Hard difficulty", + "displayName": "Hard Demolition", + "hidden": "0", + "icon": "images/Achievement_86.jpg", + "icongray": "images/Achievement_86_gray.jpg", + "name": "Achievement_86" + }, + { + "description": "Complete any map as a Demolitionist on Survival Suicidal difficulty", + "displayName": "Suicidal Demolition", + "hidden": "0", + "icon": "images/Achievement_87.jpg", + "icongray": "images/Achievement_87_gray.jpg", + "name": "Achievement_87" + }, + { + "description": "Complete any map as a Demolitionist on Survival Hell On Earth difficulty", + "displayName": "Hellish Demolition", + "hidden": "0", + "icon": "images/Achievement_88.jpg", + "icongray": "images/Achievement_88_gray.jpg", + "name": "Achievement_88" + }, + { + "description": "Complete any map as a Gunslinger on Survival Normal difficulty", + "displayName": "Normal Gunslinger", + "hidden": "0", + "icon": "images/Achievement_89.jpg", + "icongray": "images/Achievement_89_gray.jpg", + "name": "Achievement_89" + }, + { + "description": "Complete any map as a Gunslinger on Survival Hard difficulty", + "displayName": "Hard Gunslinger", + "hidden": "0", + "icon": "images/Achievement_90.jpg", + "icongray": "images/Achievement_90_gray.jpg", + "name": "Achievement_90" + }, + { + "description": "Complete any map as a Gunslinger on Survival Suicidal difficulty", + "displayName": "Suicidal Gunslinger", + "hidden": "0", + "icon": "images/Achievement_91.jpg", + "icongray": "images/Achievement_91_gray.jpg", + "name": "Achievement_91" + }, + { + "description": "Complete any map as a Gunslinger on Survival Hell On Earth difficulty", + "displayName": "Hellish Gunslinger", + "hidden": "0", + "icon": "images/Achievement_92.jpg", + "icongray": "images/Achievement_92_gray.jpg", + "name": "Achievement_92" + }, + { + "description": "Reach Level 25 in all Perks", + "displayName": "Perked Up", + "hidden": "0", + "icon": "images/Achievement_93.jpg", + "icongray": "images/Achievement_93_gray.jpg", + "name": "Achievement_93" + }, + { + "description": "Complete Black Forest on Survival Normal difficulty", + "displayName": "Killer Korn", + "hidden": "0", + "icon": "images/Achievement_94.jpg", + "icongray": "images/Achievement_94_gray.jpg", + "name": "Achievement_94" + }, + { + "description": "Complete Black Forest on Survival Hard difficulty", + "displayName": "Lager Me Up", + "hidden": "0", + "icon": "images/Achievement_95.jpg", + "icongray": "images/Achievement_95_gray.jpg", + "name": "Achievement_95" + }, + { + "description": "Complete Black Forest on Survival Suicidal difficulty", + "displayName": "I'll Dopple Bock", + "hidden": "0", + "icon": "images/Achievement_96.jpg", + "icongray": "images/Achievement_96_gray.jpg", + "name": "Achievement_96" + }, + { + "description": "Complete Black Forest on Survival Hell On Earth difficulty", + "displayName": "Kein Bier Vor Vier", + "hidden": "0", + "icon": "images/Achievement_97.jpg", + "icongray": "images/Achievement_97_gray.jpg", + "name": "Achievement_97" + }, + { + "description": "Collect all the items on Black Forest", + "displayName": "Black Forest Babies", + "hidden": "0", + "icon": "images/Achievement_98.jpg", + "icongray": "images/Achievement_98_gray.jpg", + "name": "Achievement_98" + }, + { + "description": "Beat Farmhouse on Normal Difficulty", + "displayName": "Plow the Field", + "hidden": "0", + "icon": "images/Achievement_99.jpg", + "icongray": "images/Achievement_99_gray.jpg", + "name": "Achievement_99" + }, + { + "description": "Beat Farmhouse on Hard Difficulty", + "displayName": "Sow the Seed", + "hidden": "0", + "icon": "images/Achievement_100.jpg", + "icongray": "images/Achievement_100_gray.jpg", + "name": "Achievement_100" + }, + { + "description": "Beat Farmhouse on Suicidal Difficulty", + "displayName": "Water the Crops", + "hidden": "0", + "icon": "images/Achievement_101.jpg", + "icongray": "images/Achievement_101_gray.jpg", + "name": "Achievement_101" + }, + { + "description": "Beat Farmhouse on Hell on Earth Difficulty", + "displayName": "Reap what you Sow", + "hidden": "0", + "icon": "images/Achievement_102.jpg", + "icongray": "images/Achievement_102_gray.jpg", + "name": "Achievement_102" + }, + { + "description": "Collect all the items on Farmhouse", + "displayName": "Darkness Dolls", + "hidden": "0", + "icon": "images/Achievement_103.jpg", + "icongray": "images/Achievement_103_gray.jpg", + "name": "Achievement_103" + }, + { + "description": "Beat Prison on Normal", + "displayName": "Walked into the wrong room", + "hidden": "0", + "icon": "images/Achievement_104.jpg", + "icongray": "images/Achievement_104_gray.jpg", + "name": "Achievement_104" + }, + { + "description": "Beat Prison on Hard", + "displayName": "Mercenaries get paid", + "hidden": "0", + "icon": "images/Achievement_105.jpg", + "icongray": "images/Achievement_105_gray.jpg", + "name": "Achievement_105" + }, + { + "description": "Beat Prison on Suicidal", + "displayName": "Like what, kill him again?", + "hidden": "0", + "icon": "images/Achievement_106.jpg", + "icongray": "images/Achievement_106_gray.jpg", + "name": "Achievement_106" + }, + { + "description": "Beat Prison on Hell on Earth", + "displayName": "I was trained by the best. British Intel.", + "hidden": "0", + "icon": "images/Achievement_107.jpg", + "icongray": "images/Achievement_107_gray.jpg", + "name": "Achievement_107" + }, + { + "description": "Collect all the items on Prison", + "displayName": "Perilous Prison", + "hidden": "0", + "icon": "images/Achievement_108.jpg", + "icongray": "images/Achievement_108_gray.jpg", + "name": "Achievement_108" + }, + { + "description": "Complete the Training Floor", + "displayName": "School's Out Forever", + "hidden": "0", + "icon": "images/Achievement_109.jpg", + "icongray": "images/Achievement_109_gray.jpg", + "name": "Achievement_109" + }, + { + "description": "Reach Level 5 Sharpshooter", + "displayName": "Reach Level 5 Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_110.jpg", + "icongray": "images/Achievement_110_gray.jpg", + "name": "Achievement_110" + }, + { + "description": "Reach Level 10 Sharpshooter", + "displayName": "Reach Level 10 Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_111.jpg", + "icongray": "images/Achievement_111_gray.jpg", + "name": "Achievement_111" + }, + { + "description": "Reach Level 15 Sharpshooter", + "displayName": "Reach Level 15 Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_112.jpg", + "icongray": "images/Achievement_112_gray.jpg", + "name": "Achievement_112" + }, + { + "description": "Reach Level 20 Sharpshooter", + "displayName": "Reach Level 20 Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_113.jpg", + "icongray": "images/Achievement_113_gray.jpg", + "name": "Achievement_113" + }, + { + "description": "Reach Level 25 Sharpshooter", + "displayName": "Reach Level 25 Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_114.jpg", + "icongray": "images/Achievement_114_gray.jpg", + "name": "Achievement_114" + }, + { + "description": "Beat Any One Map as Sharpshooter on Normal Difficulty", + "displayName": "Normal Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_115.jpg", + "icongray": "images/Achievement_115_gray.jpg", + "name": "Achievement_115" + }, + { + "description": "Beat Any One Map as Sharpshooter on Hard Difficulty", + "displayName": "Hard Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_116.jpg", + "icongray": "images/Achievement_116_gray.jpg", + "name": "Achievement_116" + }, + { + "description": "Complete any map as a Sharpshooter on Survival Suicidal difficulty", + "displayName": "Suicidal Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_117.jpg", + "icongray": "images/Achievement_117_gray.jpg", + "name": "Achievement_117" + }, + { + "description": "Complete any map as a Sharpshooter on Survival Hell On Earth difficulty", + "displayName": "Hellish Sharpshooter", + "hidden": "0", + "icon": "images/Achievement_118.jpg", + "icongray": "images/Achievement_118_gray.jpg", + "name": "Achievement_118" + }, + { + "description": "Complete Containment Station on Survival Normal difficulty", + "displayName": "Never Got the Hang of Thursdays", + "hidden": "0", + "icon": "images/Achievement_119.jpg", + "icongray": "images/Achievement_119_gray.jpg", + "name": "Achievement_119" + }, + { + "description": "Complete Containment Station on Survival Hard difficulty", + "displayName": "Don't Panic", + "hidden": "0", + "icon": "images/Achievement_120.jpg", + "icongray": "images/Achievement_120_gray.jpg", + "name": "Achievement_120" + }, + { + "description": "Complete Containment Station on Survival Suicidal difficulty", + "displayName": "Give Up and Go Mad Now", + "hidden": "0", + "icon": "images/Achievement_121.jpg", + "icongray": "images/Achievement_121_gray.jpg", + "name": "Achievement_121" + }, + { + "description": "Complete Containment Station on Survival Hell On Earth difficulty", + "displayName": "So Long and Thanks for All the Zeds", + "hidden": "0", + "icon": "images/Achievement_122.jpg", + "icongray": "images/Achievement_122_gray.jpg", + "name": "Achievement_122" + }, + { + "description": "Collect All the Items on Containment Station", + "displayName": "Can't Be Contained", + "hidden": "0", + "icon": "images/Achievement_123.jpg", + "icongray": "images/Achievement_123_gray.jpg", + "name": "Achievement_123" + }, + { + "description": "Complete Hostile Grounds on Survival Normal difficulty", + "displayName": "Mind the Gap", + "hidden": "0", + "icon": "images/Achievement_124.jpg", + "icongray": "images/Achievement_124_gray.jpg", + "name": "Achievement_124" + }, + { + "description": "Complete Hostile Grounds on Survival Hard difficulty", + "displayName": "Can't Make an Omelette Without Killing a Few People", + "hidden": "0", + "icon": "images/Achievement_125.jpg", + "icongray": "images/Achievement_125_gray.jpg", + "name": "Achievement_125" + }, + { + "description": "Complete Hostile Grounds on Survival Suicidal difficulty", + "displayName": "There Is No I in Team, But There Is an I in Pie", + "hidden": "0", + "icon": "images/Achievement_126.jpg", + "icongray": "images/Achievement_126_gray.jpg", + "name": "Achievement_126" + }, + { + "description": "Complete Hostile Grounds on Survival Hell On Earth difficulty", + "displayName": "Who Died and Made You #*%$&@ King of the Zombies?", + "hidden": "0", + "icon": "images/Achievement_127.jpg", + "icongray": "images/Achievement_127_gray.jpg", + "name": "Achievement_127" + }, + { + "description": "Collect All the Items on Hostile Grounds", + "displayName": "You've Got Red on You", + "hidden": "0", + "icon": "images/Achievement_128.jpg", + "icongray": "images/Achievement_128_gray.jpg", + "name": "Achievement_128" + }, + { + "description": "Kill a Siren Before She Screams", + "displayName": "Dead Silence", + "hidden": "0", + "icon": "images/Achievement_129.jpg", + "icongray": "images/Achievement_129_gray.jpg", + "name": "Achievement_129" + }, + { + "description": "Kill the Patriarch Before He Has a Chance to Heal", + "displayName": "Quick on the Trigger", + "hidden": "0", + "icon": "images/Achievement_130.jpg", + "icongray": "images/Achievement_130_gray.jpg", + "name": "Achievement_130" + }, + { + "description": "Kill Your First Fleshpound", + "displayName": "It's Only a Flesh Wound", + "hidden": "0", + "icon": "images/Achievement_131.jpg", + "icongray": "images/Achievement_131_gray.jpg", + "name": "Achievement_131" + }, + { + "description": "Kill Your First Scrake", + "displayName": "Hack and Slash", + "hidden": "0", + "icon": "images/Achievement_132.jpg", + "icongray": "images/Achievement_132_gray.jpg", + "name": "Achievement_132" + }, + { + "description": "Kill Dr. Hans Volter For the First Time", + "displayName": "Die Volter", + "hidden": "0", + "icon": "images/Achievement_133.jpg", + "icongray": "images/Achievement_133_gray.jpg", + "name": "Achievement_133" + }, + { + "description": "Win Any Match on Hard Difficulty", + "displayName": "Win Hard", + "hidden": "0", + "icon": "images/Achievement_134.jpg", + "icongray": "images/Achievement_134_gray.jpg", + "name": "Achievement_134" + }, + { + "description": "Win Any Match on Suicidal Difficulty", + "displayName": "Win Suicidal", + "hidden": "0", + "icon": "images/Achievement_135.jpg", + "icongray": "images/Achievement_135_gray.jpg", + "name": "Achievement_135" + }, + { + "description": "Win Any Match on Hell on Earth Difficulty", + "displayName": "Win Hell on Earth", + "hidden": "0", + "icon": "images/Achievement_136.jpg", + "icongray": "images/Achievement_136_gray.jpg", + "name": "Achievement_136" + }, + { + "description": "Reach Level 5 on Any Perk", + "displayName": "Mr. Perky 5", + "hidden": "0", + "icon": "images/Achievement_137.jpg", + "icongray": "images/Achievement_137_gray.jpg", + "name": "Achievement_137" + }, + { + "description": "Reach Level 10 on Any Perk", + "displayName": "Mr. Perky 10", + "hidden": "0", + "icon": "images/Achievement_138.jpg", + "icongray": "images/Achievement_138_gray.jpg", + "name": "Achievement_138" + }, + { + "description": "Reach Level 15 on Any Perk", + "displayName": "Mr. Perky 15", + "hidden": "0", + "icon": "images/Achievement_139.jpg", + "icongray": "images/Achievement_139_gray.jpg", + "name": "Achievement_139" + }, + { + "description": "Reach Level 20 on Any Perk", + "displayName": "Mr. Perky 20", + "hidden": "0", + "icon": "images/Achievement_140.jpg", + "icongray": "images/Achievement_140_gray.jpg", + "name": "Achievement_140" + }, + { + "description": "Reach Level 25 on Any Perk", + "displayName": "Mr. Perky 25", + "hidden": "0", + "icon": "images/Achievement_141.jpg", + "icongray": "images/Achievement_141_gray.jpg", + "name": "Achievement_141" + }, + { + "description": "Win 1 Multiplayer Match", + "displayName": "Win 1", + "hidden": "0", + "icon": "images/Achievement_142.jpg", + "icongray": "images/Achievement_142_gray.jpg", + "name": "Achievement_142" + }, + { + "description": "Win 10 Multiplayer Matches", + "displayName": "Win 10", + "hidden": "0", + "icon": "images/Achievement_143.jpg", + "icongray": "images/Achievement_143_gray.jpg", + "name": "Achievement_143" + }, + { + "description": "Win 25 Multiplayer Matches", + "displayName": "Win 25", + "hidden": "0", + "icon": "images/Achievement_144.jpg", + "icongray": "images/Achievement_144_gray.jpg", + "name": "Achievement_144" + }, + { + "description": "Win a VS Survival Round Playing as the Zeds", + "displayName": "VS Zed Win", + "hidden": "0", + "icon": "images/Achievement_145.jpg", + "icongray": "images/Achievement_145_gray.jpg", + "name": "Achievement_145" + }, + { + "description": "Win a VS Survival Round Playing as the Humans", + "displayName": "VS Human Win", + "hidden": "0", + "icon": "images/Achievement_146.jpg", + "icongray": "images/Achievement_146_gray.jpg", + "name": "Achievement_146" + }, + { + "description": "Weld a Door to 100%", + "displayName": "Hold Out", + "hidden": "0", + "icon": "images/Achievement_147.jpg", + "icongray": "images/Achievement_147_gray.jpg", + "name": "Achievement_147" + }, + { + "description": "Heal a Teammate With the Syringe", + "displayName": "I Got Your Back", + "hidden": "0", + "icon": "images/Achievement_148.jpg", + "icongray": "images/Achievement_148_gray.jpg", + "name": "Achievement_148" + }, + { + "description": "Give 1000 Dosh to Another Player During a Multiplayer Match", + "displayName": "Benefactor", + "hidden": "0", + "icon": "images/Achievement_149.jpg", + "icongray": "images/Achievement_149_gray.jpg", + "name": "Achievement_149" + }, + { + "description": "Beat Infernal Realms on Normal", + "displayName": "Hell is Other People", + "hidden": "0", + "icon": "images/Achievement_150.jpg", + "icongray": "images/Achievement_150_gray.jpg", + "name": "Achievement_150" + }, + { + "description": "Complete Infernal Realms on Survival Hard difficulty", + "displayName": "If You Are Going Through Hell, Keep Going", + "hidden": "0", + "icon": "images/Achievement_151.jpg", + "icongray": "images/Achievement_151_gray.jpg", + "name": "Achievement_151" + }, + { + "description": "Complete Infernal Realms on Survival Suicidal difficulty", + "displayName": "Hell is Just a Frame of Mind", + "hidden": "0", + "icon": "images/Achievement_152.jpg", + "icongray": "images/Achievement_152_gray.jpg", + "name": "Achievement_152" + }, + { + "description": "Complete Infernal Realms on Survival Hell On Earth difficulty", + "displayName": "All Hope abandon, Ye Who Enter Here", + "hidden": "0", + "icon": "images/Achievement_153.jpg", + "icongray": "images/Achievement_153_gray.jpg", + "name": "Achievement_153" + }, + { + "description": "Collect all the Items in Infernal Realms", + "displayName": "Infernal Relics", + "hidden": "0", + "icon": "images/Achievement_154.jpg", + "icongray": "images/Achievement_154_gray.jpg", + "name": "Achievement_154" + }, + { + "description": "Reach Level 5 SWAT", + "displayName": "Reach Level 5 SWAT", + "hidden": "0", + "icon": "images/Achievement_155.jpg", + "icongray": "images/Achievement_155_gray.jpg", + "name": "Achievement_155" + }, + { + "description": "Reach Level 10 SWAT", + "displayName": "Reach Level 10 SWAT", + "hidden": "0", + "icon": "images/Achievement_156.jpg", + "icongray": "images/Achievement_156_gray.jpg", + "name": "Achievement_156" + }, + { + "description": "Reach Level 15 SWAT", + "displayName": "Reach Level 15 SWAT", + "hidden": "0", + "icon": "images/Achievement_157.jpg", + "icongray": "images/Achievement_157_gray.jpg", + "name": "Achievement_157" + }, + { + "description": "Reach Level 20 SWAT", + "displayName": "Reach Level 20 SWAT", + "hidden": "0", + "icon": "images/Achievement_158.jpg", + "icongray": "images/Achievement_158_gray.jpg", + "name": "Achievement_158" + }, + { + "description": "Reach Level 25 SWAT", + "displayName": "Reach Level 25 SWAT", + "hidden": "0", + "icon": "images/Achievement_159.jpg", + "icongray": "images/Achievement_159_gray.jpg", + "name": "Achievement_159" + }, + { + "description": "Complete any map as a SWAT on Survival Normal difficulty", + "displayName": "Normal SWAT", + "hidden": "0", + "icon": "images/Achievement_160.jpg", + "icongray": "images/Achievement_160_gray.jpg", + "name": "Achievement_160" + }, + { + "description": "Beat Any One Map as SWAT on Hard Difficulty", + "displayName": "Hard SWAT", + "hidden": "0", + "icon": "images/Achievement_161.jpg", + "icongray": "images/Achievement_161_gray.jpg", + "name": "Achievement_161" + }, + { + "description": "Beat Any One Map as SWAT on Suicidal Difficulty", + "displayName": "Suicidal SWAT", + "hidden": "0", + "icon": "images/Achievement_162.jpg", + "icongray": "images/Achievement_162_gray.jpg", + "name": "Achievement_162" + }, + { + "description": "Beat Any One Map as SWAT on Hell On Earth Difficulty", + "displayName": "Hellish SWAT", + "hidden": "0", + "icon": "images/Achievement_163.jpg", + "icongray": "images/Achievement_163_gray.jpg", + "name": "Achievement_163" + }, + { + "description": "Reach Level 5 Survivalist", + "displayName": "Reach Level 5 Survivalist", + "hidden": "0", + "icon": "images/Achievement_164.jpg", + "icongray": "images/Achievement_164_gray.jpg", + "name": "Achievement_164" + }, + { + "description": "Reach Level 10 Survivalist", + "displayName": "Reach Level 10 Survivalist", + "hidden": "0", + "icon": "images/Achievement_165.jpg", + "icongray": "images/Achievement_165_gray.jpg", + "name": "Achievement_165" + }, + { + "description": "Reach Level 15 Survivalist", + "displayName": "Reach Level 15 Survivalist", + "hidden": "0", + "icon": "images/Achievement_166.jpg", + "icongray": "images/Achievement_166_gray.jpg", + "name": "Achievement_166" + }, + { + "description": "Reach Level 20 Survivalist", + "displayName": "Reach Level 20 Survivalist", + "hidden": "0", + "icon": "images/Achievement_167.jpg", + "icongray": "images/Achievement_167_gray.jpg", + "name": "Achievement_167" + }, + { + "description": "Reach Level 25 Survivalist", + "displayName": "Reach Level 25 Survivalist", + "hidden": "0", + "icon": "images/Achievement_168.jpg", + "icongray": "images/Achievement_168_gray.jpg", + "name": "Achievement_168" + }, + { + "description": "Beat Any One Map as Survivalist on Normal Difficulty", + "displayName": "Normal Survivalist", + "hidden": "0", + "icon": "images/Achievement_169.jpg", + "icongray": "images/Achievement_169_gray.jpg", + "name": "Achievement_169" + }, + { + "description": "Complete any map as a Survivalist on Survival Hard difficulty", + "displayName": "Hard Survivalist ", + "hidden": "0", + "icon": "images/Achievement_170.jpg", + "icongray": "images/Achievement_170_gray.jpg", + "name": "Achievement_170" + }, + { + "description": "Complete any map as a Survivalist on Survival Suicidal difficulty", + "displayName": "Suicidal Survivalist", + "hidden": "0", + "icon": "images/Achievement_171.jpg", + "icongray": "images/Achievement_171_gray.jpg", + "name": "Achievement_171" + }, + { + "description": "Complete any map as a Survivalist on Survival Hell On Earth difficulty", + "displayName": "Hellish Survivalist", + "hidden": "0", + "icon": "images/Achievement_172.jpg", + "icongray": "images/Achievement_172_gray.jpg", + "name": "Achievement_172" + }, + { + "description": "Complete Zed Landing on Survival Normal difficulty", + "displayName": "Surfs Up", + "hidden": "0", + "icon": "images/Achievement_173.jpg", + "icongray": "images/Achievement_173_gray.jpg", + "name": "Achievement_173" + }, + { + "description": "Complete Zed Landing on Survival Hard difficulty", + "displayName": "Gnarly", + "hidden": "0", + "icon": "images/Achievement_174.jpg", + "icongray": "images/Achievement_174_gray.jpg", + "name": "Achievement_174" + }, + { + "description": "Complete Zed Landing on Survival Suicidal difficulty", + "displayName": "Close-out", + "hidden": "0", + "icon": "images/Achievement_175.jpg", + "icongray": "images/Achievement_175_gray.jpg", + "name": "Achievement_175" + }, + { + "description": "Complete Zed Landing on Survival Hell On Earth difficulty", + "displayName": "Blown Out", + "hidden": "0", + "icon": "images/Achievement_176.jpg", + "icongray": "images/Achievement_176_gray.jpg", + "name": "Achievement_176" + }, + { + "description": "Collect all the volley balls on Zed Landing", + "displayName": "ALAN!!!!!!", + "hidden": "0", + "icon": "images/Achievement_177.jpg", + "icongray": "images/Achievement_177_gray.jpg", + "name": "Achievement_177" + }, + { + "description": "Complete The Descent on Survival Normal difficulty", + "displayName": "How Bout Some Gas?", + "hidden": "0", + "icon": "images/Achievement_178.jpg", + "icongray": "images/Achievement_178_gray.jpg", + "name": "Achievement_178" + }, + { + "description": "Complete The Descent on Survival Hard difficulty", + "displayName": "But what if we added Gas?", + "hidden": "0", + "icon": "images/Achievement_179.jpg", + "icongray": "images/Achievement_179_gray.jpg", + "name": "Achievement_179" + }, + { + "description": "Complete The Descent on Survival Suicidal difficulty", + "displayName": "Let's Try Some Gas", + "hidden": "0", + "icon": "images/Achievement_180.jpg", + "icongray": "images/Achievement_180_gray.jpg", + "name": "Achievement_180" + }, + { + "description": "Complete The Descent on Survival Hell On Earth difficulty", + "displayName": "That's enough gas....", + "hidden": "0", + "icon": "images/Achievement_181.jpg", + "icongray": "images/Achievement_181_gray.jpg", + "name": "Achievement_181" + }, + { + "description": "Collect all the items on The Descent", + "displayName": "Hans Off the Merchandise", + "hidden": "0", + "icon": "images/Achievement_182.jpg", + "icongray": "images/Achievement_182_gray.jpg", + "name": "Achievement_182" + }, + { + "description": "Complete Nuked on Survival Normal difficulty", + "displayName": "The War Room", + "hidden": "0", + "icon": "images/Achievement_183.jpg", + "icongray": "images/Achievement_183_gray.jpg", + "name": "Achievement_183" + }, + { + "description": "Complete Nuked on Survival Hard difficulty", + "displayName": "The Mineshaft Gap", + "hidden": "0", + "icon": "images/Achievement_184.jpg", + "icongray": "images/Achievement_184_gray.jpg", + "name": "Achievement_184" + }, + { + "description": "Complete Nuked on Survival Suicidal difficulty", + "displayName": "Peace is Our Profession", + "hidden": "0", + "icon": "images/Achievement_185.jpg", + "icongray": "images/Achievement_185_gray.jpg", + "name": "Achievement_185" + }, + { + "description": "Complete Nuked on Survival Hell On Earth difficulty", + "displayName": "How I Learned to Love the Bomb", + "hidden": "0", + "icon": "images/Achievement_186.jpg", + "icongray": "images/Achievement_186_gray.jpg", + "name": "Achievement_186" + }, + { + "description": "Collect all the items on Nuked", + "displayName": "Davy Crockett", + "hidden": "0", + "icon": "images/Achievement_187.jpg", + "icongray": "images/Achievement_187_gray.jpg", + "name": "Achievement_187" + }, + { + "description": "Complete Tragic Kingdom on Survival Normal difficulty", + "displayName": "It's a Bloody World After All", + "hidden": "0", + "icon": "images/Achievement_188.jpg", + "icongray": "images/Achievement_188_gray.jpg", + "name": "Achievement_188" + }, + { + "description": "Complete Tragic Kingdom on Survival Hard difficulty", + "displayName": "The Goriest Place on Earth", + "hidden": "0", + "icon": "images/Achievement_189.jpg", + "icongray": "images/Achievement_189_gray.jpg", + "name": "Achievement_189" + }, + { + "description": "Complete Tragic Kingdom on Survival Suicidal difficulty", + "displayName": "The House the Zed Built", + "hidden": "0", + "icon": "images/Achievement_190.jpg", + "icongray": "images/Achievement_190_gray.jpg", + "name": "Achievement_190" + }, + { + "description": "Complete Tragic Kingdom on Survival Hell On Earth difficulty", + "displayName": "Where Nightmares Come True", + "hidden": "0", + "icon": "images/Achievement_191.jpg", + "icongray": "images/Achievement_191_gray.jpg", + "name": "Achievement_191" + }, + { + "description": "Collect all the items on The Tragic Kingdom", + "displayName": "The Wonderful World of Merchandising", + "hidden": "0", + "icon": "images/Achievement_192.jpg", + "icongray": "images/Achievement_192_gray.jpg", + "name": "Achievement_192" + }, + { + "description": "Beat Nightmare on Normal", + "displayName": "I Got a Rock", + "hidden": "0", + "icon": "images/Achievement_193.jpg", + "icongray": "images/Achievement_193_gray.jpg", + "name": "Achievement_193" + }, + { + "description": "Beat Nightmare on Hard", + "displayName": "Yuck, Candy Corn", + "hidden": "0", + "icon": "images/Achievement_194.jpg", + "icongray": "images/Achievement_194_gray.jpg", + "name": "Achievement_194" + }, + { + "description": "Beat Nightmare on Suicidal", + "displayName": "Fun Size? What is Fun Size?", + "hidden": "0", + "icon": "images/Achievement_195.jpg", + "icongray": "images/Achievement_195_gray.jpg", + "name": "Achievement_195" + }, + { + "description": "Beat Nightmare on Hell on Earth", + "displayName": "Victory! Full Size Candy Bar!", + "hidden": "0", + "icon": "images/Achievement_196.jpg", + "icongray": "images/Achievement_196_gray.jpg", + "name": "Achievement_196" + }, + { + "description": "Collect all the items (skulls) on Nightmare", + "displayName": "Letting the Demons Out", + "hidden": "0", + "icon": "images/Achievement_197.jpg", + "icongray": "images/Achievement_197_gray.jpg", + "name": "Achievement_197" + }, + { + "description": "Beat Krampus Lair on Normal", + "displayName": "Stocking Full of Coal", + "hidden": "0", + "icon": "images/Achievement_198.jpg", + "icongray": "images/Achievement_198_gray.jpg", + "name": "Achievement_198" + }, + { + "description": "Beat Krampus Lair on Hard", + "displayName": "Bundle of Switches", + "hidden": "0", + "icon": "images/Achievement_199.jpg", + "icongray": "images/Achievement_199_gray.jpg", + "name": "Achievement_199" + }, + { + "description": "Beat Krampus Lair on Suicidal", + "displayName": "A Whupping", + "hidden": "0", + "icon": "images/Achievement_200.jpg", + "icongray": "images/Achievement_200_gray.jpg", + "name": "Achievement_200" + }, + { + "description": "Complete Krampus Lair on Survival Hell On Earth difficulty", + "displayName": "Carried off to the Underworld", + "hidden": "0", + "icon": "images/Achievement_201.jpg", + "icongray": "images/Achievement_201_gray.jpg", + "name": "Achievement_201" + }, + { + "description": "Collect all the items (Snowglobes) on Krampus Lair", + "displayName": "A World Under Glass", + "hidden": "0", + "icon": "images/Achievement_202.jpg", + "icongray": "images/Achievement_202_gray.jpg", + "name": "Achievement_202" + }, + { + "description": "Complete DieSector wave 25 on Endless Normal difficulty", + "displayName": "Training Simulation", + "hidden": "0", + "icon": "images/Achievement_203.jpg", + "icongray": "images/Achievement_203_gray.jpg", + "name": "Achievement_203" + }, + { + "description": "Complete DieSector wave 25 on Endless Hard difficulty", + "displayName": "Test Trials", + "hidden": "0", + "icon": "images/Achievement_204.jpg", + "icongray": "images/Achievement_204_gray.jpg", + "name": "Achievement_204" + }, + { + "description": "Complete DieSector wave 25 on Endless Suicidal difficulty", + "displayName": "Code Dead", + "hidden": "0", + "icon": "images/Achievement_205.jpg", + "icongray": "images/Achievement_205_gray.jpg", + "name": "Achievement_205" + }, + { + "description": "Complete DieSector wave 25 on Endless Hell On Earth difficulty", + "displayName": "Fatal Exception", + "hidden": "0", + "icon": "images/Achievement_206.jpg", + "icongray": "images/Achievement_206_gray.jpg", + "name": "Achievement_206" + }, + { + "description": "Collect all the items (D.A.R. Bobbleheads) on DieSector", + "displayName": "It's aD.A.R.able", + "hidden": "0", + "icon": "images/Achievement_207.jpg", + "icongray": "images/Achievement_207_gray.jpg", + "name": "Achievement_207" + }, + { + "description": "Complete Power Core on Survival Normal difficulty", + "displayName": "A Spark to Light the Way", + "hidden": "0", + "icon": "images/Achievement_208.jpg", + "icongray": "images/Achievement_208_gray.jpg", + "name": "Achievement_208" + }, + { + "description": "Complete Power Core on Survival Hard difficulty", + "displayName": "Bolting through the Core", + "hidden": "0", + "icon": "images/Achievement_209.jpg", + "icongray": "images/Achievement_209_gray.jpg", + "name": "Achievement_209" + }, + { + "description": "Complete Power Core on Survival Suicidal difficulty", + "displayName": "High Voltage", + "hidden": "0", + "icon": "images/Achievement_210.jpg", + "icongray": "images/Achievement_210_gray.jpg", + "name": "Achievement_210" + }, + { + "description": "Complete Power Core on Survival Hell On Earth difficulty", + "displayName": "I Have the Power!", + "hidden": "0", + "icon": "images/Achievement_211.jpg", + "icongray": "images/Achievement_211_gray.jpg", + "name": "Achievement_211" + }, + { + "description": "Collect all the items (Batteries) on Power Core", + "displayName": "Surge Breaker", + "hidden": "0", + "icon": "images/Achievement_212.jpg", + "icongray": "images/Achievement_212_gray.jpg", + "name": "Achievement_212" + }, + { + "description": "Complete Airship on Survival Normal difficulty", + "displayName": "A Little Turbulence", + "hidden": "0", + "icon": "images/Achievement_213.jpg", + "icongray": "images/Achievement_213_gray.jpg", + "name": "Achievement_213" + }, + { + "description": "Complete Airship on Survival Hard difficulty", + "displayName": "Flying Unfriendly Skies", + "hidden": "0", + "icon": "images/Achievement_214.jpg", + "icongray": "images/Achievement_214_gray.jpg", + "name": "Achievement_214" + }, + { + "description": "Complete Airship on Survival Suicidal difficulty", + "displayName": "Soar, Gore, and More", + "hidden": "0", + "icon": "images/Achievement_215.jpg", + "icongray": "images/Achievement_215_gray.jpg", + "name": "Achievement_215" + }, + { + "description": "Complete Airship on Survival Hell On Earth difficulty", + "displayName": "Mile High Dead Club", + "hidden": "0", + "icon": "images/Achievement_216.jpg", + "icongray": "images/Achievement_216_gray.jpg", + "name": "Achievement_216" + }, + { + "description": "Collect all the items (Steam Cells) on Airship", + "displayName": "Powered by Steam", + "hidden": "0", + "icon": "images/Achievement_217.jpg", + "icongray": "images/Achievement_217_gray.jpg", + "name": "Achievement_217" + }, + { + "description": "Complete Lockdown on Survival Normal difficulty", + "displayName": "Station Stabilization", + "hidden": "0", + "icon": "images/Achievement_218.jpg", + "icongray": "images/Achievement_218_gray.jpg", + "name": "Achievement_218" + }, + { + "description": "Complete Lockdown on Survival Hard difficulty", + "displayName": "Fun Near the Sun", + "hidden": "0", + "icon": "images/Achievement_219.jpg", + "icongray": "images/Achievement_219_gray.jpg", + "name": "Achievement_219" + }, + { + "description": "Complete Lockdown on Survival Suicidal difficulty", + "displayName": "Space Race", + "hidden": "0", + "icon": "images/Achievement_220.jpg", + "icongray": "images/Achievement_220_gray.jpg", + "name": "Achievement_220" + }, + { + "description": "Complete Lockdown on Survival Hell On Earth difficulty", + "displayName": "Houston, We Don't Have a Problem", + "hidden": "0", + "icon": "images/Achievement_221.jpg", + "icongray": "images/Achievement_221_gray.jpg", + "name": "Achievement_221" + }, + { + "description": "Collect all the items (Batteries) on Lockdown", + "displayName": "Shocking Discovery!", + "hidden": "0", + "icon": "images/Achievement_222.jpg", + "icongray": "images/Achievement_222_gray.jpg", + "name": "Achievement_222" + }, + { + "description": "Complete Monster Ball on Survival Normal difficulty", + "displayName": "Castle Crashers", + "hidden": "0", + "icon": "images/Achievement_223.jpg", + "icongray": "images/Achievement_223_gray.jpg", + "name": "Achievement_223" + }, + { + "description": "Complete Monster Ball on Survival Hard difficulty", + "displayName": "Party Hard!", + "hidden": "0", + "icon": "images/Achievement_224.jpg", + "icongray": "images/Achievement_224_gray.jpg", + "name": "Achievement_224" + }, + { + "description": "Complete Monster Ball on Survival Suicidal difficulty", + "displayName": "Dance on the Gore Floor", + "hidden": "0", + "icon": "images/Achievement_225.jpg", + "icongray": "images/Achievement_225_gray.jpg", + "name": "Achievement_225" + }, + { + "description": "Complete Monster Ball on Survival Hell on Earth difficulty", + "displayName": "Rest In Pieces", + "hidden": "0", + "icon": "images/Achievement_226.jpg", + "icongray": "images/Achievement_226_gray.jpg", + "name": "Achievement_226" + }, + { + "description": "Destroy 10 Glowing Skulls in Monster Ball", + "displayName": "Spooky Scary Skeletons", + "hidden": "0", + "icon": "images/Achievement_227.jpg", + "icongray": "images/Achievement_227_gray.jpg", + "name": "Achievement_227" + }, + { + "description": "Unlock the Alchemist Room in Monster Ball", + "displayName": "Death's Door", + "hidden": "0", + "icon": "images/Achievement_228.jpg", + "icongray": "images/Achievement_228_gray.jpg", + "name": "Achievement_228" + }, + { + "description": "Complete Santa's Workshop on Survival Normal Difficulty", + "displayName": "Cookies and Milk", + "hidden": "0", + "icon": "images/Achievement_229.jpg", + "icongray": "images/Achievement_229_gray.jpg", + "name": "Achievement_229" + }, + { + "description": "Complete Santa's Workshop on Survival Hard Difficulty", + "displayName": "Slaying with Santa", + "hidden": "0", + "icon": "images/Achievement_230.jpg", + "icongray": "images/Achievement_230_gray.jpg", + "name": "Achievement_230" + }, + { + "description": "Complete Santa's Workshop on Survival Suicidal Difficulty", + "displayName": "A Deadly Carol", + "hidden": "0", + "icon": "images/Achievement_231.jpg", + "icongray": "images/Achievement_231_gray.jpg", + "name": "Achievement_231" + }, + { + "description": "Complete Santa's Workshop on Survival Hell On Earth Difficulty", + "displayName": "You're On The Badass List", + "hidden": "0", + "icon": "images/Achievement_232.jpg", + "icongray": "images/Achievement_232_gray.jpg", + "name": "Achievement_232" + }, + { + "description": "Destroy 10 Snow Globes in Santa's Workshop", + "displayName": "Yule Shoot Your Eye Out", + "hidden": "0", + "icon": "images/Achievement_233.jpg", + "icongray": "images/Achievement_233_gray.jpg", + "name": "Achievement_233" + }, + { + "description": "Complete Shopping Spree on Survival Normal Difficulty", + "displayName": "Cleanup On Aisle 3", + "hidden": "0", + "icon": "images/Achievement_234.jpg", + "icongray": "images/Achievement_234_gray.jpg", + "name": "Achievement_234" + }, + { + "description": "Complete Shopping Spree on Survival Hard Difficulty", + "displayName": "Shoot One Get Two Free", + "hidden": "0", + "icon": "images/Achievement_235.jpg", + "icongray": "images/Achievement_235_gray.jpg", + "name": "Achievement_235" + }, + { + "description": "Complete Shopping Spree on Survival Suicidal Difficulty", + "displayName": "Savings to Die For", + "hidden": "0", + "icon": "images/Achievement_236.jpg", + "icongray": "images/Achievement_236_gray.jpg", + "name": "Achievement_236" + }, + { + "description": "Complete Shopping Spree on Survival Hell On Earth Difficulty", + "displayName": "Red Friday", + "hidden": "0", + "icon": "images/Achievement_237.jpg", + "icongray": "images/Achievement_237_gray.jpg", + "name": "Achievement_237" + }, + { + "description": "Destroy 10 Dosh Necklaces in Shopping Spree", + "displayName": "A Special Deal", + "hidden": "0", + "icon": "images/Achievement_238.jpg", + "icongray": "images/Achievement_238_gray.jpg", + "name": "Achievement_238" + }, + { + "description": "Complete Spillway on Survival Normal Difficulty", + "displayName": "It's All Downstream From Here", + "hidden": "0", + "icon": "images/Achievement_239.jpg", + "icongray": "images/Achievement_239_gray.jpg", + "name": "Achievement_239" + }, + { + "description": "Complete Spillway on Survival Hard Difficulty", + "displayName": "Zeds Be Dam", + "hidden": "0", + "icon": "images/Achievement_240.jpg", + "icongray": "images/Achievement_240_gray.jpg", + "name": "Achievement_240" + }, + { + "description": "Complete Spillway on Survival Suicidal Difficulty", + "displayName": "Overflow Controlled", + "hidden": "0", + "icon": "images/Achievement_241.jpg", + "icongray": "images/Achievement_241_gray.jpg", + "name": "Achievement_241" + }, + { + "description": "Complete Spillway on Survival Hell On Earth Difficulty", + "displayName": "Dam You're Good!", + "hidden": "0", + "icon": "images/Achievement_242.jpg", + "icongray": "images/Achievement_242_gray.jpg", + "name": "Achievement_242" + }, + { + "description": "Destroy 10 Dosh Necklaces in Spillway", + "displayName": "Money Down the Drain", + "hidden": "0", + "icon": "images/Achievement_243.jpg", + "icongray": "images/Achievement_243_gray.jpg", + "name": "Achievement_243" + }, + { + "description": "Complete Steam Fortress on Objective Normal Difficulty", + "displayName": "Burning Out the Fuse", + "hidden": "0", + "icon": "images/Achievement_244.jpg", + "icongray": "images/Achievement_244_gray.jpg", + "name": "Achievement_244" + }, + { + "description": "Complete Steam Fortress on Objective Hard Difficulty", + "displayName": "Touchdown Brings Me Down", + "hidden": "0", + "icon": "images/Achievement_245.jpg", + "icongray": "images/Achievement_245_gray.jpg", + "name": "Achievement_245" + }, + { + "description": "Complete Steam Fortress on Objective Suicidal Difficulty", + "displayName": "High as a Kite", + "hidden": "0", + "icon": "images/Achievement_246.jpg", + "icongray": "images/Achievement_246_gray.jpg", + "name": "Achievement_246" + }, + { + "description": "Complete Steam Fortress on Objective Hell On Earth Difficulty", + "displayName": "It's Cold as Hell", + "hidden": "0", + "icon": "images/Achievement_247.jpg", + "icongray": "images/Achievement_247_gray.jpg", + "name": "Achievement_247" + }, + { + "description": "Destroy 10 Steam Batteries on Steam Fortress", + "displayName": "All This Science I Don't Understand", + "hidden": "0", + "icon": "images/Achievement_248.jpg", + "icongray": "images/Achievement_248_gray.jpg", + "name": "Achievement_248" + }, + { + "description": "Complete Zed Landing on Objective Normal Difficulty", + "displayName": "Droning On", + "hidden": "0", + "icon": "images/Achievement_249.jpg", + "icongray": "images/Achievement_249_gray.jpg", + "name": "Achievement_249" + }, + { + "description": "Complete Zed Landing on Objective Hard Difficulty", + "displayName": "Data Deliverier ", + "hidden": "0", + "icon": "images/Achievement_250.jpg", + "icongray": "images/Achievement_250_gray.jpg", + "name": "Achievement_250" + }, + { + "description": "Complete Zed Landing on Objective Suicidal Difficulty", + "displayName": "Island Isolation", + "hidden": "0", + "icon": "images/Achievement_251.jpg", + "icongray": "images/Achievement_251_gray.jpg", + "name": "Achievement_251" + }, + { + "description": "Complete Zed Landing on Objective Hell On Earth Difficulty", + "displayName": "Someone Call a Chopper?", + "hidden": "0", + "icon": "images/Achievement_252.jpg", + "icongray": "images/Achievement_252_gray.jpg", + "name": "Achievement_252" + }, + { + "description": "Complete Outpost on Objective Normal Difficulty", + "displayName": "It's Snow Good. ", + "hidden": "0", + "icon": "images/Achievement_253.jpg", + "icongray": "images/Achievement_253_gray.jpg", + "name": "Achievement_253" + }, + { + "description": "Complete Outpost on Objective Hard Difficulty", + "displayName": "Giving the Cold Shoulder", + "hidden": "0", + "icon": "images/Achievement_254.jpg", + "icongray": "images/Achievement_254_gray.jpg", + "name": "Achievement_254" + }, + { + "description": "Complete Outpost on Objective Suicidal Difficulty", + "displayName": "Frozen Assets", + "hidden": "0", + "icon": "images/Achievement_255.jpg", + "icongray": "images/Achievement_255_gray.jpg", + "name": "Achievement_255" + }, + { + "description": "Complete Outpost on Objective Hell On Earth Difficulty", + "displayName": "The Snow Must Go On", + "hidden": "0", + "icon": "images/Achievement_256.jpg", + "icongray": "images/Achievement_256_gray.jpg", + "name": "Achievement_256" + }, + { + "description": "Complete Ashwood Asylum on Survival Hard or higher Difficulty", + "displayName": "Cackling Crazy", + "hidden": "0", + "icon": "images/Achievement_257.jpg", + "icongray": "images/Achievement_257_gray.jpg", + "name": "Achievement_257" + }, + { + "description": "Complete Ashwood Asylum on Survival Hell On Earth Difficulty", + "displayName": "Non Compos Mentis", + "hidden": "0", + "icon": "images/Achievement_258.jpg", + "icongray": "images/Achievement_258_gray.jpg", + "name": "Achievement_258" + }, + { + "description": "Destroy 10 red skulls on Ashwood Asylum", + "displayName": "Money Mania", + "hidden": "0", + "icon": "images/Achievement_259.jpg", + "icongray": "images/Achievement_259_gray.jpg", + "name": "Achievement_259" + }, + { + "description": "Complete Nuked on Objective Hard or higher Difficulty", + "displayName": "An Explosive Ending", + "hidden": "0", + "icon": "images/Achievement_260.jpg", + "icongray": "images/Achievement_260_gray.jpg", + "name": "Achievement_260" + }, + { + "description": "Complete Nuked on Objective Hell On Earth Difficulty", + "displayName": "The World On Fire", + "hidden": "0", + "icon": "images/Achievement_261.jpg", + "icongray": "images/Achievement_261_gray.jpg", + "name": "Achievement_261" + } +] \ No newline at end of file From 95083267325f2978bb11f4c4c0167ac1318784d7 Mon Sep 17 00:00:00 2001 From: soft as HELL Date: Thu, 3 Oct 2019 16:17:34 +0300 Subject: [PATCH 24/48] Add validation to writes --- dll/steam_remote_storage.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dll/steam_remote_storage.h b/dll/steam_remote_storage.h index d0c7646..2840abb 100644 --- a/dll/steam_remote_storage.h +++ b/dll/steam_remote_storage.h @@ -84,6 +84,11 @@ bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) { PRINT_DEBUG("Steam_Remote_Storage::FileWrite %s %u\n", pchFile, cubData); std::lock_guard lock(global_mutex); + + if (!pvData || cubData < 0 || cubData > k_unMaxCloudFileChunkSize) { + return false; + } + int data_stored = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData); PRINT_DEBUG("Steam_Remote_Storage::Stored %i, %u\n", data_stored, data_stored == cubData); return data_stored == cubData; @@ -104,9 +109,15 @@ SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 c { PRINT_DEBUG("Steam_Remote_Storage::FileWriteAsync\n"); std::lock_guard lock(global_mutex); + + if (!pvData || cubData > k_unMaxCloudFileChunkSize) { + return k_uAPICallInvalid; + } + bool success = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData) == cubData; + RemoteStorageFileWriteAsyncComplete_t data; - data.m_eResult = k_EResultOK; + data.m_eResult = success ? k_EResultOK : k_EResultFail; return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data)); } From 787cac47db64f740fefcf2d992d7fdb829a198fa Mon Sep 17 00:00:00 2001 From: soft as HELL Date: Fri, 4 Oct 2019 19:01:17 +0300 Subject: [PATCH 25/48] Add delay to FileWriteAsync callback --- dll/steam_remote_storage.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/steam_remote_storage.h b/dll/steam_remote_storage.h index 2840abb..bc41d6e 100644 --- a/dll/steam_remote_storage.h +++ b/dll/steam_remote_storage.h @@ -119,7 +119,7 @@ SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 c RemoteStorageFileWriteAsyncComplete_t data; data.m_eResult = success ? k_EResultOK : k_EResultFail; - return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data)); + return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data), 0.1); } From bd921b09398273050f957a13e4c40a4b5fbc3933 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 5 Oct 2019 15:39:50 -0400 Subject: [PATCH 26/48] Add a way to disable all the networking functionality in the emulator. --- Readme_release.txt | 4 ++++ dll/network.cpp | 15 +++++++++++++-- dll/network.h | 2 +- dll/settings.h | 3 +++ dll/settings_parser.cpp | 5 +++++ dll/steam_client.cpp | 2 +- 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Readme_release.txt b/Readme_release.txt index c0d11e0..a136aeb 100644 --- a/Readme_release.txt +++ b/Readme_release.txt @@ -60,6 +60,10 @@ The steam appid can also be set using the SteamAppId or SteamGameId env variable Offline mode: Some games that connect to online servers might only work if the steam emu behaves like steam is in offline mode. If you need this create a offline.txt file in the steam_settings folder. +Disable networking: +If for some reason you want to disable all the networking functionality of the emu you can create a disable_networking.txt file in the steam_settings folder. This will of course break all the +networking functionality so games that use networking related functionality like lobbies or those that launch a server in the background will not work. + Custom Broadcast ips: If you want to set custom ips (or domains) which the emulator will send broadcast packets to, make a list of them, one on each line in: Goldberg SteamEmu Saves\settings\custom_broadcasts.txt If the custom ips/domains are specific for one game only you can put the custom_broadcasts.txt in the steam_settings\ folder. diff --git a/dll/network.cpp b/dll/network.cpp index 7b2628a..e726a5c 100644 --- a/dll/network.cpp +++ b/dll/network.cpp @@ -706,18 +706,26 @@ bool Networking::handle_low_level_udp(Common_Message *msg, IP_PORT ip_port) #define NUM_TCP_WAITING 128 -Networking::Networking(CSteamID id, uint32 appid, uint16 port, std::set *custom_broadcasts) +Networking::Networking(CSteamID id, uint32 appid, uint16 port, std::set *custom_broadcasts, bool disable_sockets) { - run_at_startup(); tcp_port = udp_port = port; own_ip = 0x7F000001; alive = true; last_run = std::chrono::high_resolution_clock::now(); this->appid = appid; + + if (disable_sockets) { + enabled = false; + udp_socket = -1; + tcp_socket = -1; + return; + } + if (custom_broadcasts) { std::transform(custom_broadcasts->begin(), custom_broadcasts->end(), std::back_inserter(this->custom_broadcasts), [](uint32 ip) {return htonl(ip);}); } + run_at_startup(); sock_t sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); PRINT_DEBUG("UDP socket: %u\n", sock); if (is_socket_valid(sock) && set_socket_nonblocking(sock)) { @@ -1054,6 +1062,7 @@ void Networking::Run() void Networking::addListenId(CSteamID id) { + if (!enabled) return; auto i = std::find(ids.begin(), ids.end(), id); if (i != ids.end()) { return; @@ -1087,6 +1096,8 @@ bool Networking::sendToIPPort(Common_Message *msg, uint32 ip, uint16 port, bool bool Networking::sendTo(Common_Message *msg, bool reliable, Connection *conn) { + if (!enabled) return false; + bool ret = false; CSteamID dest_id((uint64)msg->dest_id()); if (std::find(ids.begin(), ids.end(), dest_id) != ids.end()) { diff --git a/dll/network.h b/dll/network.h index bc0ce91..1a8c064 100644 --- a/dll/network.h +++ b/dll/network.h @@ -124,7 +124,7 @@ public: //NOTE: for all functions ips/ports are passed/returned in host byte order //ex: 127.0.0.1 should be passed as 0x7F000001 static std::set resolve_ip(std::string dns); - Networking(CSteamID id, uint32 appid, uint16 port, std::set *custom_broadcasts); + Networking(CSteamID id, uint32 appid, uint16 port, std::set *custom_broadcasts, bool disable_sockets); void addListenId(CSteamID id); void setAppID(uint32 appid); void Run(); diff --git a/dll/settings.h b/dll/settings.h index a5efb5b..cfb06b0 100644 --- a/dll/settings.h +++ b/dll/settings.h @@ -135,6 +135,9 @@ public: //controller struct Controller_Settings controller_settings; + + //networking + bool disable_networking = false; }; #endif diff --git a/dll/settings_parser.cpp b/dll/settings_parser.cpp index 42849d3..ca12e85 100644 --- a/dll/settings_parser.cpp +++ b/dll/settings_parser.cpp @@ -247,6 +247,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s } bool steam_offline_mode = false; + bool disable_networking = false; { std::string steam_settings_path = Local_Storage::get_game_settings_path(); @@ -255,6 +256,8 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s PRINT_DEBUG("steam settings path %s\n", p.c_str()); if (p == "offline.txt") { steam_offline_mode = true; + } else if (p == "disable_networking.txt") { + disable_networking = true; } } } @@ -265,6 +268,8 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s settings_server->set_port(port); settings_client->custom_broadcasts = custom_broadcasts; settings_server->custom_broadcasts = custom_broadcasts; + settings_client->disable_networking = disable_networking; + settings_server->disable_networking = disable_networking; { std::string dlc_config_path = Local_Storage::get_game_settings_path() + "DLC.txt"; diff --git a/dll/steam_client.cpp b/dll/steam_client.cpp index d81f90c..f7b5fe7 100644 --- a/dll/steam_client.cpp +++ b/dll/steam_client.cpp @@ -45,7 +45,7 @@ Steam_Client::Steam_Client() uint32 appid = create_localstorage_settings(&settings_client, &settings_server, &local_storage); std::string items_db_file_path = (Local_Storage::get_game_settings_path() + "items.json"); - network = new Networking(settings_server->get_local_steam_id(), appid, settings_server->get_port(), &(settings_server->custom_broadcasts)); + network = new Networking(settings_server->get_local_steam_id(), appid, settings_server->get_port(), &(settings_server->custom_broadcasts), settings_server->disable_networking); callback_results_client = new SteamCallResults(); callback_results_server = new SteamCallResults(); From 1427a4bcef1fc92f1a8aecb54aeae9577bce8498 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 5 Oct 2019 15:40:29 -0400 Subject: [PATCH 27/48] More accurate steam remote storage behavior. --- dll/steam_remote_storage.h | 12 +++++------- .../disable_networking.EXAMPLE.txt | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 files_example/steam_settings.EXAMPLE/disable_networking.EXAMPLE.txt diff --git a/dll/steam_remote_storage.h b/dll/steam_remote_storage.h index bc41d6e..f6a0c51 100644 --- a/dll/steam_remote_storage.h +++ b/dll/steam_remote_storage.h @@ -83,12 +83,11 @@ Steam_Remote_Storage(class Settings *settings, Local_Storage *local_storage, cla bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) { PRINT_DEBUG("Steam_Remote_Storage::FileWrite %s %u\n", pchFile, cubData); - std::lock_guard lock(global_mutex); - - if (!pvData || cubData < 0 || cubData > k_unMaxCloudFileChunkSize) { + if (!pchFile || cubData <= 0 || cubData > k_unMaxCloudFileChunkSize) { return false; } + std::lock_guard lock(global_mutex); int data_stored = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData); PRINT_DEBUG("Steam_Remote_Storage::Stored %i, %u\n", data_stored, data_stored == cubData); return data_stored == cubData; @@ -108,18 +107,17 @@ STEAM_CALL_RESULT( RemoteStorageFileWriteAsyncComplete_t ) SteamAPICall_t FileWriteAsync( const char *pchFile, const void *pvData, uint32 cubData ) { PRINT_DEBUG("Steam_Remote_Storage::FileWriteAsync\n"); - std::lock_guard lock(global_mutex); - - if (!pvData || cubData > k_unMaxCloudFileChunkSize) { + if (!pchFile || cubData > k_unMaxCloudFileChunkSize || cubData == 0) { return k_uAPICallInvalid; } + std::lock_guard lock(global_mutex); bool success = local_storage->store_data(REMOTE_STORAGE_FOLDER, pchFile, (char* )pvData, cubData) == cubData; RemoteStorageFileWriteAsyncComplete_t data; data.m_eResult = success ? k_EResultOK : k_EResultFail; - return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data), 0.1); + return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data), 0.01); } diff --git a/files_example/steam_settings.EXAMPLE/disable_networking.EXAMPLE.txt b/files_example/steam_settings.EXAMPLE/disable_networking.EXAMPLE.txt new file mode 100644 index 0000000..4cc106f --- /dev/null +++ b/files_example/steam_settings.EXAMPLE/disable_networking.EXAMPLE.txt @@ -0,0 +1 @@ +Rename this to: disable_networking.txt to disable all networking functionality. \ No newline at end of file From 736d1a9090d5f98c6e3aa437795877fe5452cd3e Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 5 Oct 2019 15:41:28 -0400 Subject: [PATCH 28/48] Make isteamutils call result functions respect callback delays. --- dll/base.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dll/base.h b/dll/base.h index 4b3453e..f549c1f 100644 --- a/dll/base.h +++ b/dll/base.h @@ -110,8 +110,12 @@ struct Steam_Call_Result { return check_timedout(created, STEAM_CALLRESULT_TIMEOUT); } + bool call_completed() { + return (!reserved) && check_timedout(created, run_in); + } + bool can_execute() { - return (!reserved) && (!to_delete) && check_timedout(created, run_in); + return (!to_delete) && call_completed(); } bool has_cb() { @@ -169,14 +173,14 @@ public: bool exists(SteamAPICall_t api_call) { auto cr = std::find_if(callresults.begin(), callresults.end(), [api_call](struct Steam_Call_Result const& item) { return item.api_call == api_call; }); if (cr == callresults.end()) return false; - if (cr->reserved) return false; + if (!cr->call_completed()) return false; return true; } bool callback_result(SteamAPICall_t api_call, void *copy_to, unsigned int size) { auto cb_result = std::find_if(callresults.begin(), callresults.end(), [api_call](struct Steam_Call_Result const& item) { return item.api_call == api_call; }); if (cb_result != callresults.end()) { - if (cb_result->reserved) return false; + if (!cb_result->call_completed()) return false; if (cb_result->result.size() > size) return false; memcpy(copy_to, &(cb_result->result[0]), cb_result->result.size()); From 0a29ed5a9a07ff92bd7d1d3dc7c8a5ce73529d6c Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Wed, 9 Oct 2019 17:36:36 -0400 Subject: [PATCH 29/48] Implement a few functions in steam networking utils. --- dll/steam_networking_sockets.h | 1 + dll/steam_networking_utils.h | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/dll/steam_networking_sockets.h b/dll/steam_networking_sockets.h index 818f2b9..f72f244 100644 --- a/dll/steam_networking_sockets.h +++ b/dll/steam_networking_sockets.h @@ -1045,6 +1045,7 @@ bool GetHostedDedicatedServerAddress001( SteamDatagramHostedAddress *pRouting ) /// directly share it with clients. virtual EResult GetHostedDedicatedServerAddress( SteamDatagramHostedAddress *pRouting ) { + PRINT_DEBUG("Steam_Networking_Sockets::GetHostedDedicatedServerAddress %p\n", pRouting); std::lock_guard lock(global_mutex); pRouting->SetDevAddress(network->getOwnIP(), 27054); return k_EResultOK; diff --git a/dll/steam_networking_utils.h b/dll/steam_networking_utils.h index 4a2a59e..96aff6b 100644 --- a/dll/steam_networking_utils.h +++ b/dll/steam_networking_utils.h @@ -28,6 +28,7 @@ public ISteamNetworkingUtils class RunEveryRunCB *run_every_runcb; std::chrono::time_point initialized_time = std::chrono::steady_clock::now(); FSteamNetworkingSocketsDebugOutput debug_function; + bool relay_initialized = false; public: static void steam_callback(void *object, Common_Message *msg) @@ -67,6 +68,7 @@ Steam_Networking_Utils(class Settings *settings, class Networking *network, clas bool InitializeRelayAccess() { PRINT_DEBUG("Steam_Networking_Utils::InitializeRelayAccess\n"); + relay_initialized = true; return true; } @@ -80,44 +82,71 @@ bool InitializeRelayAccess() /// more details, you can pass a non-NULL value. ESteamNetworkingAvailability GetRelayNetworkStatus( SteamRelayNetworkStatus_t *pDetails ) { - PRINT_DEBUG("Steam_Networking_Utils::GetRelayNetworkStatus\n"); + PRINT_DEBUG("Steam_Networking_Utils::GetRelayNetworkStatus %p\n", pDetails); + std::lock_guard lock(global_mutex); + + //TODO: check if this is how real steam returns it + SteamRelayNetworkStatus_t data = {}; + if (relay_initialized) { + data.m_eAvail = k_ESteamNetworkingAvailability_Current; + data.m_bPingMeasurementInProgress = 0; + data.m_eAvailAnyRelay = k_ESteamNetworkingAvailability_Current; + data.m_eAvailNetworkConfig = k_ESteamNetworkingAvailability_Current; + strcpy(data.m_debugMsg, "OK"); + } + + if (pDetails) { + *pDetails = data; + } + return k_ESteamNetworkingAvailability_Current; } float GetLocalPingLocation( SteamNetworkPingLocation_t &result ) { PRINT_DEBUG("Steam_Networking_Utils::GetLocalPingLocation\n"); + if (relay_initialized) { + result.m_data[2] = 123; + result.m_data[8] = 67; + return 2.0; + } + return -1; } int EstimatePingTimeBetweenTwoLocations( const SteamNetworkPingLocation_t &location1, const SteamNetworkPingLocation_t &location2 ) { PRINT_DEBUG("Steam_Networking_Utils::EstimatePingTimeBetweenTwoLocations\n"); - return k_nSteamNetworkingPing_Unknown ; + //return k_nSteamNetworkingPing_Unknown; + return 10; } int EstimatePingTimeFromLocalHost( const SteamNetworkPingLocation_t &remoteLocation ) { PRINT_DEBUG("Steam_Networking_Utils::EstimatePingTimeFromLocalHost\n"); + return 10; } void ConvertPingLocationToString( const SteamNetworkPingLocation_t &location, char *pszBuf, int cchBufSize ) { PRINT_DEBUG("Steam_Networking_Utils::ConvertPingLocationToString\n"); + strncpy(pszBuf, "fra=10+2", cchBufSize); } bool ParsePingLocationString( const char *pszString, SteamNetworkPingLocation_t &result ) { PRINT_DEBUG("Steam_Networking_Utils::ParsePingLocationString\n"); + return true; } bool CheckPingDataUpToDate( float flMaxAgeSeconds ) { PRINT_DEBUG("Steam_Networking_Utils::CheckPingDataUpToDate %f\n", flMaxAgeSeconds); + relay_initialized = true; return true; } @@ -125,6 +154,7 @@ bool CheckPingDataUpToDate( float flMaxAgeSeconds ) bool IsPingMeasurementInProgress() { PRINT_DEBUG("Steam_Networking_Utils::IsPingMeasurementInProgress\n"); + return false; } From c60a763f68f7ac961f5e653639dd2a7b02ad0eb0 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Thu, 10 Oct 2019 23:13:21 +0200 Subject: [PATCH 30/48] Don't overwrite achievement date Don't overwrite achievement date when setting the achievement and it was already set. --- dll/steam_user_stats.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index eee3247..811008b 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -249,7 +249,7 @@ bool SetAchievement( const char *pchName ) auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return item["name"].get() == pchName; }); - if (it != defined_achievements.end()) { + if (it != defined_achievements.end() && user_achievements[pchName]["earned"] == false) { user_achievements[pchName]["earned"] = true; user_achievements[pchName]["earned_time"] = static_cast(std::time(nullptr)); return true; From f15b2b045813f742cbe57df2acc62b03d5a8b9c6 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Fri, 11 Oct 2019 16:08:46 +0200 Subject: [PATCH 31/48] Steam returns true even if the achievement is already set --- dll/steam_user_stats.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index 811008b..a659fbb 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -249,9 +249,11 @@ bool SetAchievement( const char *pchName ) auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return item["name"].get() == pchName; }); - if (it != defined_achievements.end() && user_achievements[pchName]["earned"] == false) { - user_achievements[pchName]["earned"] = true; - user_achievements[pchName]["earned_time"] = static_cast(std::time(nullptr)); + if (it != defined_achievements.end()) { + if (user_achievements[pchName]["earned"] == false) { + user_achievements[pchName]["earned"] = true; + user_achievements[pchName]["earned_time"] = static_cast(std::time(nullptr)); + } return true; } } catch (...) {} From 8c45ab200317c266befeab17ccf07ee5cb6aa4ea Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 13 Oct 2019 12:26:22 +0200 Subject: [PATCH 32/48] Rework inventory loading More generic json loading allows to load a json from a specified folder rather than the "inventory" directory. Also changed achievements location to root diectory --- dll/local_storage.cpp | 31 +++++++++++++++++++++---------- dll/local_storage.h | 4 ++-- dll/steam_inventory.h | 2 +- dll/steam_user_stats.h | 4 ++-- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index 98bb284..93be15f 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -691,10 +691,17 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } -bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) +bool Local_Storage::load_json_file(std::string folder, std::string const&file, nlohmann::json& json) { - std::string inv_path = std::move(save_directory + appid + inventory_storage_folder + PATH_SEPARATOR + file); - std::ifstream inventory_file(inv_path); + if (!folder.empty() && folder.back() != *PATH_SEPARATOR) { + folder.append(PATH_SEPARATOR); + } + std::string inv_path = std::move(save_directory + appid + folder); + std::string full_path = inv_path + file; + + create_directory(inv_path); + + std::ifstream inventory_file(full_path); // If there is a file and we opened it if (inventory_file) { @@ -709,34 +716,38 @@ bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const& try { json = std::move(nlohmann::json::parse(buffer)); - PRINT_DEBUG("Loaded inventory \"%s\". Loaded %u items.\n", inv_path.c_str(), json.size()); + PRINT_DEBUG("Loaded json \"%s\". Loaded %u items.\n", full_path.c_str(), json.size()); return true; } catch (std::exception& e) { - PRINT_DEBUG("Error while parsing \"%s\" inventory json: %s\n", inv_path.c_str(), e.what()); + PRINT_DEBUG("Error while parsing \"%s\" json: %s\n", full_path.c_str(), e.what()); } } else { - PRINT_DEBUG("Couldn't open file \"%s\" to read inventory\n", inv_path.c_str()); + PRINT_DEBUG("Couldn't open file \"%s\" to read json\n", full_path.c_str()); } return false; } -bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) +bool Local_Storage::write_json_file(std::string folder, std::string const&file, nlohmann::json const& json) { - std::string inv_path = std::move(save_directory + appid + inventory_storage_folder); + if (!folder.empty() && folder.back() != *PATH_SEPARATOR) { + folder.append(PATH_SEPARATOR); + } + std::string inv_path = std::move(save_directory + appid + folder); + std::string full_path = inv_path + file; create_directory(inv_path); - std::ofstream inventory_file(inv_path + PATH_SEPARATOR + file, std::ios::trunc | std::ios::out); + std::ofstream inventory_file(full_path, std::ios::trunc | std::ios::out); if (inventory_file) { inventory_file << std::setw(2) << json; return true; } - PRINT_DEBUG("Couldn't open file \"%s\" to write inventory\n", inv_path.c_str()); + PRINT_DEBUG("Couldn't open file \"%s\" to write json\n", full_path.c_str()); return false; } diff --git a/dll/local_storage.h b/dll/local_storage.h index 38d676b..3c550bd 100644 --- a/dll/local_storage.h +++ b/dll/local_storage.h @@ -63,8 +63,8 @@ public: bool update_save_filenames(std::string folder); - bool load_inventory_file(nlohmann::json &json, std::string const&file); - bool write_inventory_file(nlohmann::json const& json, std::string const&file); + bool load_json_file(std::string folder, std::string const& file, nlohmann::json& json); + bool write_json_file(std::string folder, std::string const& file, nlohmann::json const& json); }; #endif diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index e116e65..ad90a4c 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -124,7 +124,7 @@ void read_items_db() void read_inventory_db() { // If we havn't got any inventory - if (!local_storage->load_inventory_file(user_items, items_user_file)) + if (!local_storage->load_json_file("inventory", items_user_file, user_items)) { // Try to load a default one std::string items_db_path = Local_Storage::get_game_settings_path() + items_default_file; diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index a659fbb..98337c3 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -93,7 +93,7 @@ void load_achievements_db() void load_achievements() { - local_storage->load_inventory_file(user_achievements, achievements_user_file); + local_storage->load_json_file("", achievements_user_file, user_achievements); } public: @@ -319,7 +319,7 @@ bool StoreStats() PRINT_DEBUG("StoreStats\n"); std::lock_guard lock(global_mutex); - local_storage->write_inventory_file(user_achievements, achievements_user_file); + local_storage->write_json_file("", achievements_user_file, user_achievements); UserStatsStored_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); From 22b52df2794752212d988afef168a53da5572a88 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 13 Oct 2019 11:19:18 +0000 Subject: [PATCH 33/48] Fix the disabled functions prototype --- dll/local_storage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index 93be15f..33ead80 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -128,12 +128,12 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } -bool Local_Storage::load_inventory_file(nlohmann::json& json, std::string const&file) +bool Local_Storage::load_json_file(std::string folder, std::string const&file, nlohmann::json& json) { return true; } -bool Local_Storage::write_inventory_file(nlohmann::json const& json, std::string const&file) +bool Local_Storage::write_json_file(std::string folder, std::string const&file, nlohmann::json const& json) { return true; } From 19c444de7f7db8af3ba0e2db9425ea34afceef89 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 13 Oct 2019 15:27:04 +0200 Subject: [PATCH 34/48] Remove the inventory folder --- dll/steam_inventory.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index ad90a4c..f92585b 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -124,7 +124,7 @@ void read_items_db() void read_inventory_db() { // If we havn't got any inventory - if (!local_storage->load_json_file("inventory", items_user_file, user_items)) + if (!local_storage->load_json_file("", items_user_file, user_items)) { // Try to load a default one std::string items_db_path = Local_Storage::get_game_settings_path() + items_default_file; From 4780c405d20a1190840ef2a18c1b197ec7e29a55 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Mon, 14 Oct 2019 15:08:59 +0000 Subject: [PATCH 35/48] default_items example --- .../steam_settings.EXAMPLE/default_items.EXAMPLE.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 files_example/steam_settings.EXAMPLE/default_items.EXAMPLE.json diff --git a/files_example/steam_settings.EXAMPLE/default_items.EXAMPLE.json b/files_example/steam_settings.EXAMPLE/default_items.EXAMPLE.json new file mode 100644 index 0000000..34db327 --- /dev/null +++ b/files_example/steam_settings.EXAMPLE/default_items.EXAMPLE.json @@ -0,0 +1,4 @@ +{ + "2001": 1, + "2002": 1 +} \ No newline at end of file From 04d376ce2501c18cb7ca435f7a02d80a4a4eba3a Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 16 Oct 2019 17:00:08 +0200 Subject: [PATCH 36/48] Fix the address being out of the range lower_bound < addr < upper_bound --- dll/base.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dll/base.cpp b/dll/base.cpp index 72ec0fa..fb7466a 100644 --- a/dll/base.cpp +++ b/dll/base.cpp @@ -158,17 +158,17 @@ std::string get_lib_path() { int i = 0; struct dirent *ep; dp = opendir (dir.c_str()); - unsigned long long int p = (unsigned long long int)&get_lib_path; + intptr_t p = (intptr_t)&get_lib_path; if (dp != NULL) { while ((ep = readdir (dp))) { if (memcmp(ep->d_name, ".", 2) != 0 && memcmp(ep->d_name, "..", 3) != 0) { char *upper = NULL; - unsigned long long int lower_bound = strtoull(ep->d_name, &upper, 16); + intptr_t lower_bound = strtoull(ep->d_name, &upper, 16); if (lower_bound) { ++upper; - unsigned long long int upper_bound = strtoull(upper, &upper, 16); + intptr_t upper_bound = strtoull(upper, &upper, 16); if (upper_bound && (lower_bound < p && p < upper_bound)) { std::string path = dir + PATH_SEPARATOR + ep->d_name; char link[PATH_MAX] = {}; From dbc4e7e08b1a380b330e5eaf46773f3ea6237e71 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Wed, 16 Oct 2019 17:31:46 +0000 Subject: [PATCH 37/48] Update base.cpp --- dll/base.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dll/base.cpp b/dll/base.cpp index fb7466a..32a0ab7 100644 --- a/dll/base.cpp +++ b/dll/base.cpp @@ -158,17 +158,17 @@ std::string get_lib_path() { int i = 0; struct dirent *ep; dp = opendir (dir.c_str()); - intptr_t p = (intptr_t)&get_lib_path; + uintptr_t p = (uintptr_t)&get_lib_path; if (dp != NULL) { while ((ep = readdir (dp))) { if (memcmp(ep->d_name, ".", 2) != 0 && memcmp(ep->d_name, "..", 3) != 0) { char *upper = NULL; - intptr_t lower_bound = strtoull(ep->d_name, &upper, 16); + uintptr_t lower_bound = strtoull(ep->d_name, &upper, 16); if (lower_bound) { ++upper; - intptr_t upper_bound = strtoull(upper, &upper, 16); + uintptr_t upper_bound = strtoull(upper, &upper, 16); if (upper_bound && (lower_bound < p && p < upper_bound)) { std::string path = dir + PATH_SEPARATOR + ep->d_name; char link[PATH_MAX] = {}; From 3982ad31e6b60f334461a07345e12a8a0a783c7b Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 19 Oct 2019 12:00:45 -0400 Subject: [PATCH 38/48] Generate game infos improvements. For some reason https links didn't work. Auto generate a default_item_json. --- generate_game_infos/generate_game_infos.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 0ff8f50..7cbcaf3 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -352,7 +352,7 @@ static void generate_achievements(CurlEasy &easy) static void generate_items(CurlEasy& easy) { - std::string url = "https://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; + std::string url = "http://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; url += steam_apikey; url += "&appid="; url += app_id; @@ -365,7 +365,7 @@ static void generate_items(CurlEasy& easy) nlohmann::json json = nlohmann::json::parse(easy.get_answer()); std::string digest = json["response"]["digest"]; - url = "https://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid="; + url = "http://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid="; url += app_id; url += "&digest="; url += digest; @@ -374,8 +374,12 @@ static void generate_items(CurlEasy& easy) easy.perform(); nlohmann::json item_json = nlohmann::json::object(); + nlohmann::json default_item_json = nlohmann::json::object(); + json = nlohmann::json::parse(easy.get_answer()); std::ofstream items_file("items.json", std::ios::trunc | std::ios::out); + std::ofstream default_items_file("default_items.json", std::ios::trunc | std::ios::out); + for (auto &i : json) { for (auto j = i.begin(); j != i.end(); ++j) @@ -408,9 +412,11 @@ static void generate_items(CurlEasy& easy) } } item_json[i["itemdefid"].get()] = i; + default_item_json[i["itemdefid"].get()] = 1; } items_file << std::setw(2) << item_json; + default_items_file << std::setw(2) << default_item_json; } catch (std::exception& e) { From 828e5d456c9b1d426eda303600e16267ad5194d9 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 19 Oct 2019 12:02:30 -0400 Subject: [PATCH 39/48] Inventory/achivements bug fixes/improvements/cleanups. --- Readme_release.txt | 1 + dll/local_storage.cpp | 30 +++++---- dll/local_storage.h | 1 + dll/steam_inventory.h | 143 +++++++++++++++-------------------------- dll/steam_user_stats.h | 99 +++++++++++++++++++--------- 5 files changed, 141 insertions(+), 133 deletions(-) diff --git a/Readme_release.txt b/Readme_release.txt index 46561b3..a2c1236 100644 --- a/Readme_release.txt +++ b/Readme_release.txt @@ -75,6 +75,7 @@ An example can be found in steam_settings.EXAMPLE that works with Killing Floor The items.json syntax is simple, you SHOULD validate your .json file before trying to run your game or you won't have any item in your inventory. Just look for "online json validator" on your web brower to valide your file. You can use https://steamdb.info/ to list items and attributes they have and put them into your .json. Keep in mind that some item are not valid to have in your inventory. For example, in PayDay2 all items below item_id 50000 will make your game crash. +items.json should contain all the item definitions for the game, default_items.json is the quantity of each item that you want a user to have initially in their inventory. By default the user will have no items. Leaderboards: By default the emulator assumes all leaderboards queried by the game (FindLeaderboard()) exist and creates them with the most common options (sort method descending, display type numeric) diff --git a/dll/local_storage.cpp b/dll/local_storage.cpp index 33ead80..f1b3d45 100644 --- a/dll/local_storage.cpp +++ b/dll/local_storage.cpp @@ -128,14 +128,19 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } +bool Local_Storage::load_json(std::string full_path, nlohmann::json& json) +{ + return false; +} + bool Local_Storage::load_json_file(std::string folder, std::string const&file, nlohmann::json& json) { - return true; + return false; } bool Local_Storage::write_json_file(std::string folder, std::string const&file, nlohmann::json const& json) { - return true; + return false; } std::vector Local_Storage::get_filenames_path(std::string path) @@ -691,16 +696,8 @@ bool Local_Storage::update_save_filenames(std::string folder) return true; } -bool Local_Storage::load_json_file(std::string folder, std::string const&file, nlohmann::json& json) +bool Local_Storage::load_json(std::string full_path, nlohmann::json& json) { - if (!folder.empty() && folder.back() != *PATH_SEPARATOR) { - folder.append(PATH_SEPARATOR); - } - std::string inv_path = std::move(save_directory + appid + folder); - std::string full_path = inv_path + file; - - create_directory(inv_path); - std::ifstream inventory_file(full_path); // If there is a file and we opened it if (inventory_file) @@ -730,6 +727,17 @@ bool Local_Storage::load_json_file(std::string folder, std::string const&file, n return false; } +bool Local_Storage::load_json_file(std::string folder, std::string const&file, nlohmann::json& json) +{ + if (!folder.empty() && folder.back() != *PATH_SEPARATOR) { + folder.append(PATH_SEPARATOR); + } + std::string inv_path = std::move(save_directory + appid + folder); + std::string full_path = inv_path + file; + + return load_json(full_path, json); +} + bool Local_Storage::write_json_file(std::string folder, std::string const&file, nlohmann::json const& json) { if (!folder.empty() && folder.back() != *PATH_SEPARATOR) { diff --git a/dll/local_storage.h b/dll/local_storage.h index 3c550bd..394fae2 100644 --- a/dll/local_storage.h +++ b/dll/local_storage.h @@ -63,6 +63,7 @@ public: bool update_save_filenames(std::string folder); + bool load_json(std::string full_path, nlohmann::json& json); bool load_json_file(std::string folder, std::string const& file, nlohmann::json& json); bool write_json_file(std::string folder, std::string const& file, nlohmann::json const& json); }; diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index f92585b..de0a9bc 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -60,9 +60,7 @@ private: bool inventory_loaded; bool call_definition_update; - bool call_inventory_update; - bool definition_update_called; - bool full_update_called; + bool item_definitions_loaded; struct Steam_Inventory_Requests* new_inventory_result(bool full_query=true, const SteamItemInstanceID_t* pInstanceIDs = NULL, uint32 unCountInstanceIDs = 0) { @@ -96,29 +94,7 @@ void read_items_db() { std::string items_db_path = Local_Storage::get_game_settings_path() + items_user_file; PRINT_DEBUG("Items file path: %s\n", items_db_path.c_str()); - std::ifstream inventory_file(items_db_path); - // If there is a file and we opened it - if (inventory_file) - { - inventory_file.seekg(0, std::ios::end); - size_t size = inventory_file.tellg(); - std::string buffer(size, '\0'); - inventory_file.seekg(0); - // Read it entirely, if the .json file gets too big, - // I should look into this and split reads into smaller parts. - inventory_file.read(&buffer[0], size); - inventory_file.close(); - - try - { - defined_items = std::move(nlohmann::json::parse(buffer)); - PRINT_DEBUG("Loaded inventory. Loaded %u items.\n", defined_items.size()); - } - catch (std::exception& e) - { - PRINT_DEBUG("Error while parsing inventory json: %s\n", e.what()); - } - } + local_storage->load_json(items_db_path, defined_items); } void read_inventory_db() @@ -129,29 +105,7 @@ void read_inventory_db() // Try to load a default one std::string items_db_path = Local_Storage::get_game_settings_path() + items_default_file; PRINT_DEBUG("Default items file path: %s\n", items_db_path.c_str()); - std::ifstream inventory_file(items_db_path); - // If there is a file and we opened it - if (inventory_file) - { - inventory_file.seekg(0, std::ios::end); - size_t size = inventory_file.tellg(); - std::string buffer(size, '\0'); - inventory_file.seekg(0); - // Read it entirely, if the .json file gets too big, - // I should look into this and split reads into smaller parts. - inventory_file.read(&buffer[0], size); - inventory_file.close(); - - try - { - user_items = std::move(nlohmann::json::parse(buffer)); - PRINT_DEBUG("Loaded default inventory. Loaded %u items.\n", user_items.size()); - } - catch (std::exception& e) - { - PRINT_DEBUG("Error while parsing inventory json: %s\n", e.what()); - } - } + local_storage->load_json(items_db_path, user_items); } } @@ -175,9 +129,7 @@ Steam_Inventory(class Settings *settings, class SteamCallResults *callback_resul user_items(nlohmann::json::object()), inventory_loaded(false), call_definition_update(false), - call_inventory_update(false), - definition_update_called(false), - full_update_called(false) + item_definitions_loaded(false) { this->run_every_runcb->add(&Steam_Inventory::run_every_runcb_cb, this); } @@ -230,6 +182,7 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, if (pOutItemsArray != nullptr) { + SteamItemDetails_t *items_array_base = pOutItemsArray; uint32 max_items = *punOutItemsArraySize; if (request->full_query) { @@ -249,29 +202,38 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, pOutItemsArray->m_unFlags = k_ESteamItemNoTrade; ++pOutItemsArray; } - *punOutItemsArraySize = std::min(*punOutItemsArraySize, static_cast(user_items.size())); } else { for (auto &itemid : request->instance_ids) { if (!max_items) break; - pOutItemsArray->m_iDefinition = itemid; - pOutItemsArray->m_itemId = itemid; - try - { - pOutItemsArray->m_unQuantity = user_items[itemid].get(); + auto it = user_items.find(std::to_string(itemid)); + if (it != user_items.end()) { + pOutItemsArray->m_iDefinition = itemid; + pOutItemsArray->m_itemId = itemid; + + try + { + pOutItemsArray->m_unQuantity = it->get(); + } + catch (...) + { + pOutItemsArray->m_unQuantity = 0; + } + pOutItemsArray->m_unFlags = k_ESteamItemNoTrade; + ++pOutItemsArray; + --max_items; } - catch (...) - { - pOutItemsArray->m_unQuantity = 0; - } - pOutItemsArray->m_unFlags = k_ESteamItemNoTrade; - ++pOutItemsArray; - --max_items; } } + + *punOutItemsArraySize = pOutItemsArray - items_array_base; } else if (punOutItemsArraySize != nullptr) { - *punOutItemsArraySize = user_items.size(); + if (request->full_query) { + *punOutItemsArraySize = user_items.size(); + } else { + *punOutItemsArraySize = std::count_if(request->instance_ids.begin(), request->instance_ids.end(), [this](auto item_id){ return user_items.find(std::to_string(item_id)) != user_items.end();}); + } } PRINT_DEBUG("GetResultItems good\n"); @@ -359,8 +321,6 @@ bool GetAllItems( SteamInventoryResult_t *pResultHandle ) std::lock_guard lock(global_mutex); struct Steam_Inventory_Requests* request = new_inventory_result(); - call_inventory_update = true; - if (pResultHandle != nullptr) *pResultHandle = request->inventory_result; @@ -383,7 +343,6 @@ bool GetItemsByID( SteamInventoryResult_t *pResultHandle, STEAM_ARRAY_COUNT( unC std::lock_guard lock(global_mutex); if (pResultHandle) { struct Steam_Inventory_Requests *request = new_inventory_result(false, pInstanceIDs, unCountInstanceIDs); - //call_inventory_update = true; *pResultHandle = request->inventory_result; return true; } @@ -613,7 +572,7 @@ bool LoadItemDefinitions() PRINT_DEBUG("LoadItemDefinitions\n"); std::lock_guard lock(global_mutex); - if (!definition_update_called) { + if (!item_definitions_loaded) { call_definition_update = true; } @@ -715,6 +674,7 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope { *punValueBufferSizeOut = 0; PRINT_DEBUG("Attr %s not found for item %d\n", pchPropertyName, iDefinition); + return false; } } else // Pass a NULL pointer for pchPropertyName to get a comma - separated list of available property names. @@ -750,8 +710,11 @@ bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPrope } } } + + return true; } - return true; + + return false; } @@ -877,39 +840,37 @@ bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventory void RunCallbacks() { - if (call_definition_update && !definition_update_called) { - definition_update_called = true; - read_items_db(); + if (call_definition_update || inventory_requests.size()) { + if (!item_definitions_loaded) { + read_items_db(); + item_definitions_loaded = true; + + //only gets called once + //also gets called when getting items + SteamInventoryDefinitionUpdate_t data = {}; + callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); + } - SteamInventoryDefinitionUpdate_t data = {}; - callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); call_definition_update = false; } - if (call_inventory_update) { + if (inventory_requests.size() && !inventory_loaded) { read_inventory_db(); inventory_loaded = true; - - call_definition_update = true; - call_inventory_update = false; } - if (definition_update_called && inventory_loaded) + if (inventory_loaded) { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); for (auto& r : inventory_requests) { if (!r.done && std::chrono::duration_cast>(now - r.time_created).count() > r.timeout) { if (r.full_query) { - if (!full_update_called) { - // SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems - // successfully returns a result which is newer / fresher than the last - // known result. - //TODO: should this always be returned for each get all item calls? - struct SteamInventoryFullUpdate_t data; - data.m_handle = r.inventory_result; - callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); - full_update_called = true; - } + // SteamInventoryFullUpdate_t callbacks are triggered when GetAllItems + // successfully returns a result which is newer / fresher than the last + // known result. + struct SteamInventoryFullUpdate_t data; + data.m_handle = r.inventory_result; + callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); } { diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index 98337c3..2a0e951 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -66,29 +66,7 @@ unsigned int find_leaderboard(std::string name) void load_achievements_db() { std::string file_path = Local_Storage::get_game_settings_path() + achievements_user_file; - std::ifstream achs_file(file_path); - - if (achs_file) - { - achs_file.seekg(0, std::ios::end); - size_t size = achs_file.tellg(); - std::string buffer(size, '\0'); - achs_file.seekg(0); - // Read it entirely, if the .json file gets too big, - // I should look into this and split reads into smaller parts. - achs_file.read(&buffer[0], size); - achs_file.close(); - - try { - defined_achievements = std::move(nlohmann::json::parse(buffer)); - } catch (std::exception &e) { - PRINT_DEBUG("Error while parsing json: \"%s\" : %s\n", file_path.c_str(), e.what()); - } - } - else - { - PRINT_DEBUG("Couldn't open file \"%s\" to read achievements definition\n", file_path.c_str()); - } + local_storage->load_json(file_path, defined_achievements); } void load_achievements() @@ -96,6 +74,11 @@ void load_achievements() local_storage->load_json_file("", achievements_user_file, user_achievements); } +void save_achievements() +{ + local_storage->write_json_file("", achievements_user_file, user_achievements); +} + public: Steam_User_Stats(Settings *settings, Local_Storage *local_storage, class SteamCallResults *callback_results, class SteamCallBacks *callbacks): settings(settings), @@ -223,6 +206,7 @@ bool GetAchievement( const char *pchName, bool *pbAchieved ) { PRINT_DEBUG("GetAchievement %s\n", pchName); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); try { auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName]( nlohmann::json &item ) { @@ -244,16 +228,19 @@ bool SetAchievement( const char *pchName ) { PRINT_DEBUG("SetAchievement %s\n", pchName); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); try { auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return item["name"].get() == pchName; }); if (it != defined_achievements.end()) { - if (user_achievements[pchName]["earned"] == false) { + if (user_achievements.find(pchName) == user_achievements.end() || user_achievements[pchName].value("earned", false) == false) { user_achievements[pchName]["earned"] = true; - user_achievements[pchName]["earned_time"] = static_cast(std::time(nullptr)); + user_achievements[pchName]["earned_time"] = std::chrono::duration_cast>(std::chrono::system_clock::now().time_since_epoch()).count(); + save_achievements(); } + return true; } } catch (...) {} @@ -265,6 +252,7 @@ bool ClearAchievement( const char *pchName ) { PRINT_DEBUG("ClearAchievement %s\n", pchName); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); try { auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { @@ -273,6 +261,7 @@ bool ClearAchievement( const char *pchName ) if (it != defined_achievements.end()) { user_achievements[pchName]["earned"] = false; user_achievements[pchName]["earned_time"] = static_cast(0); + save_achievements(); return true; } } catch (...) {} @@ -288,6 +277,7 @@ bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 { PRINT_DEBUG("GetAchievementAndUnlockTime\n"); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); try { auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { @@ -319,8 +309,6 @@ bool StoreStats() PRINT_DEBUG("StoreStats\n"); std::lock_guard lock(global_mutex); - local_storage->write_json_file("", achievements_user_file, user_achievements); - UserStatsStored_t data; data.m_nGameID = settings->get_local_game_id().ToUint64(); data.m_eResult = k_EResultOK; @@ -339,6 +327,7 @@ int GetAchievementIcon( const char *pchName ) { PRINT_DEBUG("GetAchievementIcon\n"); if (pchName == nullptr) return 0; + std::lock_guard lock(global_mutex); return 0; } @@ -353,13 +342,17 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc if (pchName == nullptr) return ""; if (pchKey == nullptr) return ""; + std::lock_guard lock(global_mutex); + if (strcmp (pchKey, "name") == 0) { try { auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - return it.value()["displayName"].get().c_str(); + static std::string display_name; + display_name = it.value()["displayName"].get(); + return display_name.c_str(); } } catch (...) {} } @@ -370,7 +363,9 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - return it.value()["description"].get().c_str(); + static std::string description; + description = it.value()["description"].get(); + return description.c_str(); } } catch (...) {} } @@ -381,7 +376,9 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - return it.value()["description"].get().c_str(); + static std::string hidden; + hidden = it.value()["hidden"].get(); + return hidden.c_str(); } } catch (...) {} } @@ -396,7 +393,41 @@ bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint { PRINT_DEBUG("IndicateAchievementProgress\n"); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); + try { + auto it = std::find_if(defined_achievements.begin(), defined_achievements.end(), [pchName](nlohmann::json& item) { + return static_cast(item["name"]) == pchName; + }); + auto ach = user_achievements.find(pchName); + if (it != defined_achievements.end()) { + bool achieved = false; + if ( ach != user_achievements.end()) { + bool achieved = ach->value("earned", false); + } + + UserAchievementStored_t data = {}; + data.m_nGameID = settings->get_local_game_id().ToUint64(); + data.m_bGroupAchievement = false; + strncpy(data.m_rgchAchievementName, pchName, k_cchStatNameMax); + + if (achieved) { + data.m_nCurProgress = 0; + data.m_nMaxProgress = 0; + } else { + user_achievements[pchName]["progress"] = nCurProgress; + user_achievements[pchName]["max_progress"] = nMaxProgress; + data.m_nCurProgress = nCurProgress; + data.m_nMaxProgress = nMaxProgress; + } + + save_achievements(); + callback_results->addCallResult(data.k_iCallback, &data, sizeof(data)); + return true; + } + } catch (...) {} + + return false; } @@ -405,6 +436,7 @@ bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint uint32 GetNumAchievements() { PRINT_DEBUG("GetNumAchievements\n"); + std::lock_guard lock(global_mutex); return defined_achievements.size(); } @@ -413,7 +445,9 @@ const char * GetAchievementName( uint32 iAchievement ) { PRINT_DEBUG("GetAchievementName\n"); try { - return defined_achievements[iAchievement]["name"].get().c_str(); + static std::string achievement_name; + achievement_name = defined_achievements[iAchievement]["name"].get(); + return achievement_name.c_str(); } catch (...) {} return ""; } @@ -482,6 +516,7 @@ bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchi { PRINT_DEBUG("GetUserAchievement %s\n", pchName); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); if (steamIDUser == settings->get_local_steam_id()) { return GetAchievement(pchName, pbAchieved); @@ -495,6 +530,7 @@ bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, { PRINT_DEBUG("GetUserAchievementAndUnlockTime %s\n", pchName); if (pchName == nullptr) return false; + std::lock_guard lock(global_mutex); if (steamIDUser == settings->get_local_steam_id()) { return GetAchievementAndUnlockTime(pchName, pbAchieved, punUnlockTime); @@ -507,6 +543,7 @@ bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool ResetAllStats( bool bAchievementsToo ) { PRINT_DEBUG("ResetAllStats\n"); + std::lock_guard lock(global_mutex); //TODO if (bAchievementsToo) { std::for_each(user_achievements.begin(), user_achievements.end(), [](nlohmann::json& v) { From 42d9217f00d4c152ca5d0359b6be559202e7ec8a Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 19 Oct 2019 12:06:39 -0400 Subject: [PATCH 40/48] Fix build issue. --- dll/steam_inventory.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index de0a9bc..895e49b 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -232,7 +232,7 @@ bool GetResultItems( SteamInventoryResult_t resultHandle, if (request->full_query) { *punOutItemsArraySize = user_items.size(); } else { - *punOutItemsArraySize = std::count_if(request->instance_ids.begin(), request->instance_ids.end(), [this](auto item_id){ return user_items.find(std::to_string(item_id)) != user_items.end();}); + *punOutItemsArraySize = std::count_if(request->instance_ids.begin(), request->instance_ids.end(), [this](SteamItemInstanceID_t item_id){ return user_items.find(std::to_string(item_id)) != user_items.end();}); } } From ef5693d9f811922e3bdb92507958c0f0b2c1cca8 Mon Sep 17 00:00:00 2001 From: Nemirtingas Date: Sun, 20 Oct 2019 13:46:25 +0200 Subject: [PATCH 41/48] Little improvements steam_user_stats: Use the value stored in the JSON object. steal_inventory: use 'empty' that is guaranteed to be constant in time. --- dll/steam_inventory.h | 4 ++-- dll/steam_user_stats.h | 12 +++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index 895e49b..32201e7 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -840,7 +840,7 @@ bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventory void RunCallbacks() { - if (call_definition_update || inventory_requests.size()) { + if (call_definition_update || !inventory_requests.empty()) { if (!item_definitions_loaded) { read_items_db(); item_definitions_loaded = true; @@ -854,7 +854,7 @@ void RunCallbacks() call_definition_update = false; } - if (inventory_requests.size() && !inventory_loaded) { + if (!inventory_requests.empty() && !inventory_loaded) { read_inventory_db(); inventory_loaded = true; } diff --git a/dll/steam_user_stats.h b/dll/steam_user_stats.h index 2a0e951..03a4137 100644 --- a/dll/steam_user_stats.h +++ b/dll/steam_user_stats.h @@ -350,9 +350,7 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - static std::string display_name; - display_name = it.value()["displayName"].get(); - return display_name.c_str(); + return it.value()["displayName"].get_ptr()->c_str(); } } catch (...) {} } @@ -363,9 +361,7 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - static std::string description; - description = it.value()["description"].get(); - return description.c_str(); + return it.value()["description"].get_ptr()->c_str(); } } catch (...) {} } @@ -376,9 +372,7 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc return static_cast(item["name"]) == pchName; }); if (it != defined_achievements.end()) { - static std::string hidden; - hidden = it.value()["hidden"].get(); - return hidden.c_str(); + return it.value()["hidden"].get_ptr()->c_str(); } } catch (...) {} } From 5b471e715a96de85b9716a7bd2f3864a73acae8c Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Fri, 25 Oct 2019 18:33:56 -0400 Subject: [PATCH 42/48] Fix generate game infos https. --- generate_game_infos/generate_game_infos.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/generate_game_infos/generate_game_infos.cpp b/generate_game_infos/generate_game_infos.cpp index 7cbcaf3..430bdd0 100644 --- a/generate_game_infos/generate_game_infos.cpp +++ b/generate_game_infos/generate_game_infos.cpp @@ -266,7 +266,7 @@ static bool create_directory(std::string const& strPath) static void generate_achievements(CurlEasy &easy) { - std::string url = "http://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; + std::string url = "https://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v2/?key="; url += steam_apikey; url += "&appid="; url += app_id; @@ -352,7 +352,7 @@ static void generate_achievements(CurlEasy &easy) static void generate_items(CurlEasy& easy) { - std::string url = "http://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; + std::string url = "https://api.steampowered.com/IInventoryService/GetItemDefMeta/v1?key="; url += steam_apikey; url += "&appid="; url += app_id; @@ -365,7 +365,7 @@ static void generate_items(CurlEasy& easy) nlohmann::json json = nlohmann::json::parse(easy.get_answer()); std::string digest = json["response"]["digest"]; - url = "http://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid="; + url = "https://api.steampowered.com/IGameInventory/GetItemDefArchive/v0001?appid="; url += app_id; url += "&digest="; url += digest; @@ -448,6 +448,7 @@ int main() CurlEasy easy; if (easy.init()) { + easy.skip_verifypeer(); std::cout << "Enter the game appid: "; std::cin >> app_id; std::cout << "Enter your webapi key: "; From 2986b01d0cf34cd900f772cf4294ad387c104cf4 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Fri, 25 Oct 2019 18:34:37 -0400 Subject: [PATCH 43/48] Set lobby member data should be available right away to getlobbymemberdata --- dll/steam_matchmaking.h | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dll/steam_matchmaking.h b/dll/steam_matchmaking.h index 7ca1df9..a21cb22 100644 --- a/dll/steam_matchmaking.h +++ b/dll/steam_matchmaking.h @@ -88,6 +88,7 @@ public ISteamMatchmaking std::vector chat_entries; std::vector data_requested; + std::map> self_lobby_member_data; Lobby *get_lobby(CSteamID id) { auto lobby = std::find_if(lobbies.begin(), lobbies.end(), [&id](Lobby const& item) { return item.room_id() == id.ConvertToUint64(); }); @@ -239,6 +240,7 @@ void remove_lobbies() while (g != std::end(lobbies)) { if (g->members().size() == 0 || (g->deleted() && (g->time_deleted() + LOBBY_DELETED_TIMEOUT < current_time))) { PRINT_DEBUG("REMOVING LOBBY %llu\n", g->room_id()); + self_lobby_member_data.erase(g->room_id()); g = lobbies.erase(g); } else { ++g; @@ -846,13 +848,22 @@ const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, con struct Lobby_Member *member = get_lobby_member(get_lobby(steamIDLobby), steamIDUser); const char *ret = ""; if (member) { - auto result = member->values().find(std::string(pchKey)); - if (result == member->values().end()) return ""; - PRINT_DEBUG("GetLobbyMemberData res %s\n", result->second.c_str()); - ret = result->second.c_str(); + if (steamIDUser == settings->get_local_steam_id()) { + auto result = self_lobby_member_data.find(steamIDLobby.ConvertToUint64()); + if (result != self_lobby_member_data.end()) { + auto value = result->second.find(std::string(pchKey)); + if (value != result->second.end()) { + ret = value->second.c_str(); + } + } + } else { + auto result = member->values().find(std::string(pchKey)); + if (result == member->values().end()) return ""; + ret = result->second.c_str(); + } } - + PRINT_DEBUG("GetLobbyMemberData res %s\n", ret); return ret; } @@ -879,6 +890,8 @@ void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char * (*message->mutable_map())[pchKey] = pchValue; send_owner_packet(steamIDLobby, message); } + + self_lobby_member_data[steamIDLobby.ConvertToUint64()][pchKey] = pchValue; } @@ -1348,6 +1361,7 @@ void Callback(Common_Message *msg) Lobby_Member *member = get_lobby_member(lobby, (uint64)msg->source_id()); if (member) { for (auto const &p : msg->lobby_messages().map()) { + PRINT_DEBUG("member data %s:%s\n", p.first.c_str(), p.second.c_str()); (*member->mutable_values())[p.first] = p.second; } From 1125f336751dc21c9e57331dd702976666d39d58 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Tue, 3 Dec 2019 12:52:12 -0500 Subject: [PATCH 44/48] Add steamclient loader based on the one Rat431 made for his ColdAPI steam emulator. --- Readme_experimental_steamclient.txt | 4 + build_win_release.bat | 2 + ...d_win_release_experimental_steamclient.bat | 16 ++ steamclient_loader/ColdClientLoader.cpp | 216 ++++++++++++++++++ steamclient_loader/ColdClientLoader.ini | 10 + 5 files changed, 248 insertions(+) create mode 100644 Readme_experimental_steamclient.txt create mode 100644 build_win_release_experimental_steamclient.bat create mode 100644 steamclient_loader/ColdClientLoader.cpp create mode 100644 steamclient_loader/ColdClientLoader.ini diff --git a/Readme_experimental_steamclient.txt b/Readme_experimental_steamclient.txt new file mode 100644 index 0000000..247ccd2 --- /dev/null +++ b/Readme_experimental_steamclient.txt @@ -0,0 +1,4 @@ +This is a build of the experimental version of my emu in steamclient mode with an included loader. See both the regular and experimental readmes for how to configure it. +Note that all emu config files should be put beside the steamclient dll. You do not need to put a steam_interfaces.txt file for the steamclient version of the emu. + +To use the loader, put both steamclient dlls and the loader in a folder and edit the config file. Make sure you put the right appid in the ini file. diff --git a/build_win_release.bat b/build_win_release.bat index 895303a..ac30a9e 100755 --- a/build_win_release.bat +++ b/build_win_release.bat @@ -2,6 +2,7 @@ cd /d "%~dp0" del /Q /S release\* rmdir /S /Q release\experimental +rmdir /S /Q release\experimental_steamclient rmdir /S /Q release\lobby_connect rmdir /S /Q release mkdir release @@ -18,5 +19,6 @@ cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cp copy Readme_release.txt release\Readme.txt xcopy /s files_example\* release\ call build_win_release_experimental.bat +call build_win_release_experimental_steamclient.bat call build_win_lobby_connect.bat call build_win_find_interfaces.bat diff --git a/build_win_release_experimental_steamclient.bat b/build_win_release_experimental_steamclient.bat new file mode 100644 index 0000000..1a1312e --- /dev/null +++ b/build_win_release_experimental_steamclient.bat @@ -0,0 +1,16 @@ +@echo off +cd /d "%~dp0" +mkdir release\experimental_steamclient +del /Q release\experimental_steamclient\* +call build_set_protobuf_directories.bat +"%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto +call build_env_x86.bat +cl dll/rtlgenrandom.c dll/rtlgenrandom.def +cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c "%PROTOBUF_X86_LIBRARY%" Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient.dll +"%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto +cl steamclient_loader/*.cpp advapi32.lib user32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient_loader.exe +copy steamclient_loader\ColdClientLoader.ini release\experimental_steamclient\ +call build_env_x64.bat +cl dll/rtlgenrandom.c dll/rtlgenrandom.def +cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c "%PROTOBUF_X64_LIBRARY%" Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient64.dll +copy Readme_experimental_steamclient.txt release\experimental_steamclient\Readme.txt diff --git a/steamclient_loader/ColdClientLoader.cpp b/steamclient_loader/ColdClientLoader.cpp new file mode 100644 index 0000000..a43363b --- /dev/null +++ b/steamclient_loader/ColdClientLoader.cpp @@ -0,0 +1,216 @@ +// My own modified version of ColdClientLoader originally written by Rat431 + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +// C RunTime Header Files +#include +#include +#include +#include + +bool IsNotRelativePathOrRemoveFileName(CHAR* output, bool Remove) +{ + int LG = lstrlenA(output); + for (int i = LG; i > 0; i--) { + if (output[i] == '\\') { + if(Remove) + RtlFillMemory(&output[i], LG - i, NULL); + return true; + } + } + return false; +} + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) +{ + CHAR CurrentDirectory[MAX_PATH] = { 0 }; + CHAR Client64Path[MAX_PATH] = { 0 }; + CHAR ClientPath[MAX_PATH] = { 0 }; + CHAR ExeFile[MAX_PATH] = { 0 }; + CHAR ExeRunDir[MAX_PATH] = { 0 }; + CHAR ExeCommandLine[300] = { 0 }; + CHAR AppId[128] = { 0 }; + + STARTUPINFOA info = { sizeof(info) }; + PROCESS_INFORMATION processInfo; + + int Length = GetModuleFileNameA(GetModuleHandleA(NULL), CurrentDirectory, sizeof(CurrentDirectory)) + 1; + for (int i = Length; i > 0; i--) { + if (CurrentDirectory[i] == '\\') { + lstrcpyA(&CurrentDirectory[i + 1], "ColdClientLoader.ini"); + break; + } + } + if (GetFileAttributesA(CurrentDirectory) == INVALID_FILE_ATTRIBUTES) { + MessageBoxA(NULL, "Couldn't find the configuration file(ColdClientLoader.ini).", "ColdClientLoader", MB_ICONERROR); + ExitProcess(NULL); + } + + GetPrivateProfileStringA("SteamClient", "SteamClient64Dll", "", Client64Path, MAX_PATH, CurrentDirectory); + GetPrivateProfileStringA("SteamClient", "SteamClientDll", "", ClientPath, MAX_PATH, CurrentDirectory); + GetPrivateProfileStringA("SteamClient", "Exe", NULL, ExeFile, MAX_PATH, CurrentDirectory); + GetPrivateProfileStringA("SteamClient", "ExeRunDir", NULL, ExeRunDir, MAX_PATH, CurrentDirectory); + GetPrivateProfileStringA("SteamClient", "ExeCommandLine", NULL, ExeCommandLine, 300, CurrentDirectory); + GetPrivateProfileStringA("SteamClient", "AppId", NULL, AppId, sizeof(AppId), CurrentDirectory); + + if (AppId[0]) { + SetEnvironmentVariableA("SteamAppId", AppId); + SetEnvironmentVariableA("SteamGameId", AppId); + } + + CHAR TMP[MAX_PATH] = { 0 }; + if (!IsNotRelativePathOrRemoveFileName(Client64Path, false)) { + ZeroMemory(TMP, sizeof(TMP)); + lstrcpyA(TMP, Client64Path); + ZeroMemory(Client64Path, sizeof(Client64Path)); + GetFullPathNameA(TMP, MAX_PATH, Client64Path, NULL); + } + if (!IsNotRelativePathOrRemoveFileName(ClientPath, false)) { + ZeroMemory(TMP, sizeof(TMP)); + lstrcpyA(TMP, ClientPath); + ZeroMemory(ClientPath, sizeof(ClientPath)); + GetFullPathNameA(TMP, MAX_PATH, ClientPath, NULL); + } + if (!IsNotRelativePathOrRemoveFileName(ExeFile, false)) { + ZeroMemory(TMP, sizeof(TMP)); + lstrcpyA(TMP, ExeFile); + ZeroMemory(ExeFile, sizeof(ExeFile)); + GetFullPathNameA(TMP, MAX_PATH, ExeFile, NULL); + } + if (!IsNotRelativePathOrRemoveFileName(ExeRunDir, false)) { + ZeroMemory(TMP, sizeof(TMP)); + lstrcpyA(TMP, ExeRunDir); + ZeroMemory(ExeRunDir, sizeof(ExeRunDir)); + GetFullPathNameA(TMP, MAX_PATH, ExeRunDir, NULL); + } + + if (GetFileAttributesA(Client64Path) == INVALID_FILE_ATTRIBUTES) { + MessageBoxA(NULL, "Couldn't find the requested SteamClient64Dll.", "ColdClientLoader", MB_ICONERROR); + ExitProcess(NULL); + } + + if (GetFileAttributesA(ClientPath) == INVALID_FILE_ATTRIBUTES) { + MessageBoxA(NULL, "Couldn't find the requested SteamClientDll.", "ColdClientLoader", MB_ICONERROR); + ExitProcess(NULL); + } + + if (GetFileAttributesA(ExeFile) == INVALID_FILE_ATTRIBUTES) { + MessageBoxA(NULL, "Couldn't find the requested Exe file.", "ColdClientLoader", MB_ICONERROR); + ExitProcess(NULL); + } + + if (ExeFile[0] != NULL && CreateProcessA(ExeFile, ExeCommandLine, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, ExeRunDir, &info, &processInfo)) + { + + } + else + { + MessageBoxA(NULL, "Unable to load the requested EXE file.", "ColdClientLoader", MB_ICONERROR); + ExitProcess(NULL); + } + HKEY Registrykey; + // Declare some variables to be used for Steam registry. + DWORD UserId = 0x03100004771F810D & 0xffffffff; + DWORD ProcessID = GetCurrentProcessId(); + + if (RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Valve\\Steam\\ActiveProcess", 0, KEY_ALL_ACCESS, &Registrykey) != ERROR_SUCCESS) + { + if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Valve\\Steam\\ActiveProcess", 0, 0, REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, NULL, &Registrykey, NULL) != ERROR_SUCCESS) + { + MessageBoxA(NULL, "Unable to patch Steam process informations on the Windows registry.", "ColdClientLoader", MB_ICONERROR); + TerminateProcess(processInfo.hProcess, NULL); + ExitProcess(NULL); + } + else + { + + // Set values to Windows registry. + RegSetValueExA(Registrykey, "ActiveUser", NULL, REG_DWORD, (LPBYTE)& UserId, sizeof(DWORD)); + RegSetValueExA(Registrykey, "pid", NULL, REG_DWORD, (LPBYTE)& ProcessID, sizeof(DWORD)); + + { + // Before saving to the registry check again if the path was valid and if the file exist + if (GetFileAttributesA(ClientPath) != INVALID_FILE_ATTRIBUTES) { + RegSetValueExA(Registrykey, "SteamClientDll", NULL, REG_SZ, (LPBYTE)ClientPath, (DWORD)lstrlenA(ClientPath) + 1); + } + else { + RegSetValueExA(Registrykey, "SteamClientDll", NULL, REG_SZ, (LPBYTE)"", (DWORD)lstrlenA(ClientPath) + 1); + } + if (GetFileAttributesA(Client64Path) != INVALID_FILE_ATTRIBUTES) { + RegSetValueExA(Registrykey, "SteamClientDll64", NULL, REG_SZ, (LPBYTE)Client64Path, (DWORD)lstrlenA(Client64Path) + 1); + } + else { + RegSetValueExA(Registrykey, "SteamClientDll64", NULL, REG_SZ, (LPBYTE)"", (DWORD)lstrlenA(Client64Path) + 1); + } + } + RegSetValueExA(Registrykey, "Universe", NULL, REG_SZ, (LPBYTE)"Public", (DWORD)lstrlenA("Public") + 1); + + // Close the HKEY Handle. + RegCloseKey(Registrykey); + + ResumeThread(processInfo.hThread); + WaitForSingleObject(processInfo.hThread, INFINITE); + CloseHandle(processInfo.hProcess); + CloseHandle(processInfo.hThread); + ExitProcess(NULL); + } + } + else + { + DWORD keyType = REG_SZ; + CHAR OrgSteamCDir[MAX_PATH] = { 0 }; + CHAR OrgSteamCDir64[MAX_PATH] = { 0 }; + DWORD Size1 = MAX_PATH; + DWORD Size2 = MAX_PATH; + + // Get original values to restore later. + RegQueryValueExA(Registrykey, "SteamClientDll", 0, &keyType, (LPBYTE)& OrgSteamCDir, &Size1); + RegQueryValueExA(Registrykey, "SteamClientDll64", 0, &keyType, (LPBYTE)& OrgSteamCDir64, &Size2); + + // Set values to Windows registry. + RegSetValueExA(Registrykey, "ActiveUser", NULL, REG_DWORD, (LPBYTE)& UserId, sizeof(DWORD)); + RegSetValueExA(Registrykey, "pid", NULL, REG_DWORD, (LPBYTE)& ProcessID, sizeof(DWORD)); + + + { + // Before saving to the registry check again if the path was valid and if the file exist + if (GetFileAttributesA(ClientPath) != INVALID_FILE_ATTRIBUTES) { + RegSetValueExA(Registrykey, "SteamClientDll", NULL, REG_SZ, (LPBYTE)ClientPath, (DWORD)lstrlenA(ClientPath) + 1); + } + else { + RegSetValueExA(Registrykey, "SteamClientDll", NULL, REG_SZ, (LPBYTE)"", (DWORD)lstrlenA(ClientPath) + 1); + } + if (GetFileAttributesA(Client64Path) != INVALID_FILE_ATTRIBUTES) { + RegSetValueExA(Registrykey, "SteamClientDll64", NULL, REG_SZ, (LPBYTE)Client64Path, (DWORD)lstrlenA(Client64Path) + 1); + } + else { + RegSetValueExA(Registrykey, "SteamClientDll64", NULL, REG_SZ, (LPBYTE)"", (DWORD)lstrlenA(Client64Path) + 1); + } + } + RegSetValueExA(Registrykey, "Universe", NULL, REG_SZ, (LPBYTE)"Public", (DWORD)lstrlenA("Public") + 1); + + // Close the HKEY Handle. + RegCloseKey(Registrykey); + + ResumeThread(processInfo.hThread); + WaitForSingleObject(processInfo.hThread, INFINITE); + CloseHandle(processInfo.hProcess); + CloseHandle(processInfo.hThread); + + if (RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Valve\\Steam\\ActiveProcess", 0, KEY_ALL_ACCESS, &Registrykey) == ERROR_SUCCESS) + { + // Restore the values. + RegSetValueExA(Registrykey, "SteamClientDll", NULL, REG_SZ, (LPBYTE)OrgSteamCDir, (DWORD)lstrlenA(OrgSteamCDir) + 1); + RegSetValueExA(Registrykey, "SteamClientDll64", NULL, REG_SZ, (LPBYTE)OrgSteamCDir64, (DWORD)lstrlenA(OrgSteamCDir64) + 1); + + // Close the HKEY Handle. + RegCloseKey(Registrykey); + } + ExitProcess(NULL); + } + + + return 1; +} diff --git a/steamclient_loader/ColdClientLoader.ini b/steamclient_loader/ColdClientLoader.ini new file mode 100644 index 0000000..bc65aa2 --- /dev/null +++ b/steamclient_loader/ColdClientLoader.ini @@ -0,0 +1,10 @@ +#My own modified version of ColdClientLoader originally by Rat431 +[SteamClient] +Exe=game.exe +ExeRunDir=. +ExeCommandLine= +#IMPORTANT: +AppId= + +SteamClientDll=steamclient.dll +SteamClient64Dll=steamclient64.dll From 10cd4cea80a883c3e89403e0657c0b037f80ce30 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Tue, 3 Dec 2019 13:39:17 -0500 Subject: [PATCH 45/48] Small code cleanup. --- .gitlab-ci.yml | 4 ++-- steamclient_loader/ColdClientLoader.cpp | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3ce4094..43c046c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,7 @@ build_steamos: build_windows: stage: build - image: fedora + image: fedora:30 script: - dnf -y install wine wget p7zip sed dos2unix @@ -107,7 +107,7 @@ build_cmake_linux: build_cmake_windows: stage: build - image: fedora + image: fedora:30 before_script: - dnf update -y diff --git a/steamclient_loader/ColdClientLoader.cpp b/steamclient_loader/ColdClientLoader.cpp index a43363b..9ddf8d7 100644 --- a/steamclient_loader/ColdClientLoader.cpp +++ b/steamclient_loader/ColdClientLoader.cpp @@ -100,11 +100,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance ExitProcess(NULL); } - if (ExeFile[0] != NULL && CreateProcessA(ExeFile, ExeCommandLine, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, ExeRunDir, &info, &processInfo)) - { - - } - else + if (!ExeFile[0] || !CreateProcessA(ExeFile, ExeCommandLine, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, ExeRunDir, &info, &processInfo)) { MessageBoxA(NULL, "Unable to load the requested EXE file.", "ColdClientLoader", MB_ICONERROR); ExitProcess(NULL); From ff566ec8106701374c197b44b1564c9d858556b0 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Tue, 3 Dec 2019 14:13:00 -0500 Subject: [PATCH 46/48] Check if downgrading image will fix build. --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 43c046c..8d1f87e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,7 @@ build_steamos: build_windows: stage: build - image: fedora:30 + image: fedora:29 script: - dnf -y install wine wget p7zip sed dos2unix @@ -107,7 +107,7 @@ build_cmake_linux: build_cmake_windows: stage: build - image: fedora:30 + image: fedora:29 before_script: - dnf update -y From 233835c5762df113492e87e13fef995176919854 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Tue, 3 Dec 2019 15:13:38 -0500 Subject: [PATCH 47/48] Use fedora wine for windows cmake build. --- .gitlab-ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8d1f87e..e3ddc48 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -110,10 +110,7 @@ build_cmake_windows: image: fedora:29 before_script: - - dnf update -y - - dnf install 'dnf-command(config-manager)' -y - - dnf config-manager --add-repo https://dl.winehq.org/wine-builds/fedora/30/winehq.repo - - dnf install wget p7zip winehq-devel samba-winbind-clients -y + - dnf -y install wine wget p7zip sed dos2unix - wget 'https://gitlab.com/Mr_Goldberg/goldberg_emulator/uploads/48db8f434a193aae872279dc4f5dde6a/sdk_standalone.7z' - 7za x sdk_standalone.7z -osdk_standalone - wget 'https://github.com/Kitware/CMake/releases/download/v3.15.0-rc1/cmake-3.15.0-rc1-win64-x64.zip' From 949a327b8a51b0b0bf74cecc61da3e45c4bba8d0 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Wed, 4 Dec 2019 08:44:14 -0500 Subject: [PATCH 48/48] Implement inventory functions. Fix CI build. --- .gitlab-ci.yml | 1 + dll/steam_inventory.h | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e3ddc48..e700c96 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -72,6 +72,7 @@ build_windows: - DLL_FILES="$(ls dll/*.cpp | tr "\n" " ")"; sed "s|dll/\*.cpp|$DLL_FILES|g" -i *.bat - DLL_FILES="$(ls detours/*.cpp | tr "\n" " ")"; sed "s|detours/\*.cpp|$DLL_FILES|g" -i *.bat - DLL_FILES="$(ls dll/*.proto | tr "\n" " " | sed "s/.proto/.pb.cc/g")"; sed "s|dll/\*.cc|$DLL_FILES|g" -i *.bat + - DLL_FILES="$(ls steamclient_loader/*.cpp | tr "\n" " ")"; sed "s|steamclient_loader/\*.cpp|$DLL_FILES|g" -i *.bat - export WINEDEBUG=-all - wine cmd /c build_win_debug_experimental.bat - wine cmd /c build_win_release.bat diff --git a/dll/steam_inventory.h b/dll/steam_inventory.h index 32201e7..3bd8f6e 100644 --- a/dll/steam_inventory.h +++ b/dll/steam_inventory.h @@ -757,7 +757,10 @@ STEAM_CALL_RESULT( SteamInventoryRequestPricesResult_t ) SteamAPICall_t RequestPrices() { PRINT_DEBUG("RequestPrices\n"); - return 0; + SteamInventoryRequestPricesResult_t data; + data.m_result = k_EResultOK; + memcpy(data.m_rgchCurrency, "USD", 4); + return callback_results->addCallResult(data.k_iCallback, &data, sizeof(data), 0.2); } @@ -765,6 +768,7 @@ SteamAPICall_t RequestPrices() uint32 GetNumItemsWithPrices() { PRINT_DEBUG("GetNumItemsWithPrices\n"); + return 0; } bool GetItemsWithPrices( STEAM_ARRAY_COUNT(unArrayLength) STEAM_OUT_ARRAY_COUNT(pArrayItemDefs, Items with prices) SteamItemDef_t *pArrayItemDefs, @@ -773,6 +777,7 @@ bool GetItemsWithPrices( STEAM_ARRAY_COUNT(unArrayLength) STEAM_OUT_ARRAY_COUNT( uint32 unArrayLength ) { PRINT_DEBUG("GetItemsWithPrices\n"); + return false; } // Returns item definition ids and their prices in the user's local currency. @@ -848,7 +853,7 @@ void RunCallbacks() //only gets called once //also gets called when getting items SteamInventoryDefinitionUpdate_t data = {}; - callbacks->addCBResult(data.k_iCallback, &data, sizeof(data)); + callbacks->addCBResult(data.k_iCallback, &data, sizeof(data), 0.05); } call_definition_update = false;