From f070cc0d42f29bb18af1c3522ffdfb04d27ef949 Mon Sep 17 00:00:00 2001 From: Crimson Hawk Date: Thu, 7 Mar 2024 03:17:07 +0000 Subject: [PATCH] push dev to alpha --- .ci/scripts/linux/upload.sh | 4 +- .gitlab-ci.yml | 45 +++++++++ .reuse/dep5 | 8 +- CMakeLists.txt | 16 +-- CMakeModules/CopyYuzuQt5Deps.cmake | 24 +++-- CONTRIBUTING.md | 5 +- README.md | 48 ++++----- ...yuzu.desktop => org.suyu_emu.suyu.desktop} | 12 +-- ...nfo.xml => org.suyu_emu.suyu.metainfo.xml} | 44 ++++----- ...uzu_emu.yuzu.xml => org.suyu_emu.suyu.xml} | 10 +- dist/qt_themes/default/icons/256x256/yuzu.png | Bin 4425 -> 12230 bytes dist/readme/suyu__Logo-Pill.svg | 9 ++ dist/suyu.ico | Bin 0 -> 10162 bytes dist/{yuzu.manifest => suyu.manifest} | 2 +- dist/suyu.svg | 4 + dist/yuzu.ico | Bin 23159 -> 0 bytes dist/yuzu.svg | 56 ++++++++++- src/common/settings.h | 2 +- src/core/crypto/key_manager.cpp | 91 ------------------ src/core/crypto/key_manager.h | 4 - src/dedicated_room/yuzu_room.rc | 8 +- src/yuzu/CMakeLists.txt | 8 +- src/yuzu/about_dialog.cpp | 16 +-- src/yuzu/about_dialog.h | 4 +- src/yuzu/configuration/configure_web.ui | 3 + src/yuzu/main.cpp | 11 +-- src/yuzu/main.ui | 8 +- src/yuzu/suyu.qrc | 12 +++ src/yuzu/{yuzu.rc => suyu.rc} | 8 +- src/yuzu/yuzu.qrc | 10 -- src/yuzu_cmd/CMakeLists.txt | 4 +- src/yuzu_cmd/{yuzu.rc => suyu.rc} | 8 +- 32 files changed, 258 insertions(+), 226 deletions(-) create mode 100644 .gitlab-ci.yml rename dist/{org.yuzu_emu.yuzu.desktop => org.suyu_emu.suyu.desktop} (66%) rename dist/{org.yuzu_emu.yuzu.metainfo.xml => org.suyu_emu.suyu.metainfo.xml} (51%) rename dist/{org.yuzu_emu.yuzu.xml => org.suyu_emu.suyu.xml} (82%) create mode 100644 dist/readme/suyu__Logo-Pill.svg create mode 100644 dist/suyu.ico rename dist/{yuzu.manifest => suyu.manifest} (95%) create mode 100644 dist/suyu.svg delete mode 100644 dist/yuzu.ico create mode 100644 src/yuzu/suyu.qrc rename src/yuzu/{yuzu.rc => suyu.rc} (64%) delete mode 100644 src/yuzu/yuzu.qrc rename src/yuzu_cmd/{yuzu.rc => suyu.rc} (60%) diff --git a/.ci/scripts/linux/upload.sh b/.ci/scripts/linux/upload.sh index fbb2d9c1b0..ef8115b336 100755 --- a/.ci/scripts/linux/upload.sh +++ b/.ci/scripts/linux/upload.sh @@ -3,6 +3,8 @@ # SPDX-FileCopyrightText: 2019 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later +# Modified by JuanCStar on 2024/03/06 + . .ci/scripts/common/pre-upload.sh APPIMAGE_NAME="yuzu-${RELEASE_NAME}-${GITDATE}-${GITREV}.AppImage" @@ -37,7 +39,7 @@ fi # Don't let AppImageLauncher ask to integrate EA if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then - echo "X-AppImage-Integrate=false" >> AppDir/org.yuzu_emu.yuzu.desktop + echo "X-AppImage-Integrate=false" >> AppDir/org.suyu_emu.suyu.desktop fi if [ "${RELEASE_NAME}" = "mainline" ]; then diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..2a47a72a60 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,45 @@ +# This file is a template, and might need editing before it works on your project. +# This is a sample GitLab CI/CD configuration file that should run without any modifications. +# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts, +# it uses echo commands to simulate the pipeline execution. +# +# A pipeline is composed of independent jobs that run scripts, grouped into stages. +# Stages run in sequential order, but jobs within stages run in parallel. +# +# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages +# +# You can copy and paste this template into a new `.gitlab-ci.yml` file. +# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword. +# +# To contribute improvements to CI/CD templates, please follow the Development guide at: +# https://docs.gitlab.com/ee/development/cicd/templates.html +# This specific template is located at: +# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml + +stages: # List of stages for jobs, and their order of execution + - build + +build-ubuntu: # This job runs in the build stage, which runs first. + stage: build + image: ubuntu:latest # Maybe replace with image with more required dependencies + before_script: + - apt update --yes + - apt install --yes cmake gcc g++ git + script: + - echo "Compiling the code..." + - git submodule update --init --recursive + - ls -la + # TODO: Add build instructions for linux + - echo "Compile complete." + +build-win: + stage: build + tags: + - shared-windows + - windows + - windows-1809 + script: + - echo "Compiling the code..." + - dir + # TODO: Add build instructions for windows + - echo "Compile complete." \ No newline at end of file diff --git a/.reuse/dep5 b/.reuse/dep5 index b9ae96d0b1..5b6eea8bfd 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -9,15 +9,15 @@ Files: dist/english_plurals/* dist/qt_themes/*/icons/48x48/sd_card.png dist/qt_themes/*/icons/index.theme dist/qt_themes/default/style.qss -Copyright: yuzu Emulator Project +Copyright: suyu Emulator Project License: GPL-2.0-or-later Files: dist/qt_themes/default/icons/256x256/yuzu.png dist/yuzu.bmp dist/yuzu.icns - dist/yuzu.ico - dist/yuzu.svg -Copyright: yuzu Emulator Project + dist/suyu.ico + dist/suyu.svg +Copyright: suyu Emulator Project License: GPL-2.0-or-later Files: dist/qt_themes/qdarkstyle*/LICENSE.* diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c35b22299..94a67a64f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2018 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later +# Modified by JuanCStar on 2024/03/06 + cmake_minimum_required(VERSION 3.22) project(yuzu) @@ -126,7 +128,7 @@ if (YUZU_USE_BUNDLED_VCPKG) set(VCPKG_DOWNLOADS_PATH ${PROJECT_SOURCE_DIR}/externals/vcpkg/downloads) set(NASM_VERSION "2.16.01") set(NASM_DESTINATION_PATH ${VCPKG_DOWNLOADS_PATH}/nasm-${NASM_VERSION}-win64.zip) - set(NASM_DOWNLOAD_URL "https://github.com/yuzu-mirror/ext-windows-bin/raw/master/nasm/nasm-${NASM_VERSION}-win64.zip") + set(NASM_DOWNLOAD_URL "https://gitlab.com/suyu-emu/ext-windows-bin/raw/master/nasm/nasm-${NASM_VERSION}-win64.zip") if (NOT EXISTS ${NASM_DESTINATION_PATH}) file(DOWNLOAD ${NASM_DOWNLOAD_URL} ${NASM_DESTINATION_PATH} SHOW_PROGRESS STATUS NASM_STATUS) @@ -620,7 +622,7 @@ if (NOT CLANG_FORMAT) message(STATUS "Clang format not found! Downloading...") set(CLANG_FORMAT "${PROJECT_BINARY_DIR}/externals/clang-format${CLANG_FORMAT_POSTFIX}.exe") file(DOWNLOAD - https://github.com/yuzu-mirror/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe + https://gitlab.com/suyu-emu/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe "${CLANG_FORMAT}" SHOW_PROGRESS STATUS DOWNLOAD_SUCCESS) if (NOT DOWNLOAD_SUCCESS EQUAL 0) @@ -720,13 +722,13 @@ endif() # https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html # https://www.freedesktop.org/software/appstream/docs/ if(ENABLE_QT AND UNIX AND NOT APPLE) - install(FILES "dist/org.yuzu_emu.yuzu.desktop" + install(FILES "dist/org.suyu_emu.suyu.desktop" DESTINATION "share/applications") - install(FILES "dist/yuzu.svg" + install(FILES "dist/suyu.svg" DESTINATION "share/icons/hicolor/scalable/apps" - RENAME "org.yuzu_emu.yuzu.svg") - install(FILES "dist/org.yuzu_emu.yuzu.xml" + RENAME "org.suyu_emu.suyu.svg") + install(FILES "dist/org.suyu_emu.suyu.xml" DESTINATION "share/mime/packages") - install(FILES "dist/org.yuzu_emu.yuzu.metainfo.xml" + install(FILES "dist/org.suyu_emu.suyu.metainfo.xml" DESTINATION "share/metainfo") endif() diff --git a/CMakeModules/CopyYuzuQt5Deps.cmake b/CMakeModules/CopyYuzuQt5Deps.cmake index b3a65c3476..614499a236 100644 --- a/CMakeModules/CopyYuzuQt5Deps.cmake +++ b/CMakeModules/CopyYuzuQt5Deps.cmake @@ -3,21 +3,25 @@ function(copy_yuzu_Qt5_deps target_dir) include(WindowsCopyFiles) + set(Qt5_BASE_PATH "${Qt5_DIR}/../../..") + if (NOT EXISTS "${Qt5_BASE_PATH}/bin") + set(Qt5_BASE_PATH "${Qt5_DIR}/../../qt5") + endif() if (MSVC) set(DLL_DEST "$/") - set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin") + set(Qt5_DLL_DIR "${Qt5_BASE_PATH}/bin") else() set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/") - set(Qt5_DLL_DIR "${Qt5_DIR}/../../../lib/") + set(Qt5_DLL_DIR "${Qt5_BASE_PATH}/lib/") endif() - set(Qt5_PLATFORMS_DIR "${Qt5_DIR}/../../../plugins/platforms/") - set(Qt5_PLATFORMTHEMES_DIR "${Qt5_DIR}/../../../plugins/platformthemes/") - set(Qt5_PLATFORMINPUTCONTEXTS_DIR "${Qt5_DIR}/../../../plugins/platforminputcontexts/") - set(Qt5_MEDIASERVICE_DIR "${Qt5_DIR}/../../../plugins/mediaservice/") - set(Qt5_XCBGLINTEGRATIONS_DIR "${Qt5_DIR}/../../../plugins/xcbglintegrations/") - set(Qt5_STYLES_DIR "${Qt5_DIR}/../../../plugins/styles/") - set(Qt5_IMAGEFORMATS_DIR "${Qt5_DIR}/../../../plugins/imageformats/") - set(Qt5_RESOURCES_DIR "${Qt5_DIR}/../../../resources/") + set(Qt5_PLATFORMS_DIR "${Qt5_BASE_PATH}/plugins/platforms/") + set(Qt5_PLATFORMTHEMES_DIR "${Qt5_BASE_PATH}/plugins/platformthemes/") + set(Qt5_PLATFORMINPUTCONTEXTS_DIR "${Qt5_BASE_PATH}/plugins/platforminputcontexts/") + set(Qt5_MEDIASERVICE_DIR "${Qt5_BASE_PATH}/plugins/mediaservice/") + set(Qt5_XCBGLINTEGRATIONS_DIR "${Qt5_BASE_PATH}/plugins/xcbglintegrations/") + set(Qt5_STYLES_DIR "${Qt5_BASE_PATH}/plugins/styles/") + set(Qt5_IMAGEFORMATS_DIR "${Qt5_BASE_PATH}/plugins/imageformats/") + set(Qt5_RESOURCES_DIR "${Qt5_BASE_PATH}/resources/") set(PLATFORMS ${DLL_DEST}plugins/platforms/) set(MEDIASERVICE ${DLL_DEST}mediaservice/) set(STYLES ${DLL_DEST}plugins/styles/) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1860f8cffc..c22a7531c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,4 +3,7 @@ SPDX-FileCopyrightText: 2018 yuzu Emulator Project SPDX-License-Identifier: GPL-2.0-or-later --> -**The Contributor's Guide has moved to [the yuzu wiki](https://github.com/yuzu-emu/yuzu/wiki/Contributing).** +Please check out the + + * [Conributors's guide](https://gitlab.com/suyu2/suyu/-/wikis/Contributing). + * [Merge request guidelines](https://gitlab.com/suyu-emu/suyu/-/wikis/Merge-requests) diff --git a/README.md b/README.md index cd7cc7a257..f5b27978ef 100644 --- a/README.md +++ b/README.md @@ -3,41 +3,31 @@ SPDX-FileCopyrightText: 2024 suyu emulator project SPDX-License-Identifier: GPL v3 --> -

This project DOES NOT support piracy, you are required to source your own games and keys, we make no money off this project (mainly so that Nintendo won't sue us lol)

+**Note**: We do not support or condone piracy in any form. In order to use Suyu, you'll need keys from your real Switch system, and games which you have legally obtained and paid for. We do not intend to make money or profit from this project. +We are in great need of developers. Please join our Discord server below if you can help out with the project. +This repo is based on Yuzu EA 4176. Please contribute if you can! -We are in great need of developers, join our discord server at https://discord.gg/2gQRBp44KT +
-This repo is created based on yuzu EA 4176. Please contribute - -

+


- suyu + suyu
suyu

-

suyu, pronounced "sue-you" is the afterlife the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra. +

suyu, pronounced "sue-you" (wink wink) is the continuation of the world's most popular, open-source, Nintendo Switch emulator, yuzu.
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.

-

- - Azure Mainline CI Build Status - - - Discord - -

-

Compatibility | Development | Building | + Pipelines Downloads | Support | License @@ -45,31 +35,27 @@ It is written in C++ with portability in mind, and we actively maintain builds f ## Status -We are trying to get the builds working. We are in need of developers. Join our discord to contribute. +We are trying to get the builds working. We are in need of developers. Join our Discord to contribute. + +**Note**: This README is a fork of the original project's README, most links are broken! ## Compatibility -W.I.P. - The emulator is capable of running most commercial games at full speed, provided you meet the [necessary hardware requirements](https://suyu-emu.org/help/quickstart/#hardware-requirements). -For a full list of games suyu supports, please visit our [Compatibility page](https://suyu-emu.org/game/). +For a full list of games suyu supports, please visit our [Compatibility page](https://gitlab.com/suyu-emu/suyu/-/wikis/Compatibility). -Check out our [website](https://suyu-emu.org/) for the latest news on exciting features, monthly progress reports, and more! +Check out our [website](https://suyu.dev) for the latest news on exciting features, monthly progress reports, and more! ## Development -W.I.P. - This project is completely free and open source, this project is made possible by many people who share the same interest. -Most of the development happens on GitHub. For development discussion, please join us on [Discord](https://discord.gg/2gQRBp44KT). +Most of the development happens on GitLab. For development discussion, please join us on [Discord](https://discord.gg/2gQRBp44KT). If you want to contribute, please take a look at the [Contributor's Guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing) and [Developer Information](https://gitlab.com/suyu-emu/suyu/-/wikis/Developer-Information). You can also contact any of the developers on Discord in order to know about the current state of the emulator. -If you want to contribute to the user interface translation project, please check out the [suyu project on transifex](https://www.transifex.com/suyu-emulator/suyu). We centralize translation work there, and periodically upstream translations. - ## Downloads * __Windows__: [Legacy Artifacts](https://github.com/pineappleea/pineapple-src/releases) @@ -77,14 +63,14 @@ If you want to contribute to the user interface translation project, please chec ## Building -* __Windows__: W.I.P. -* __Linux__: W.I.P. +* __Windows__: [Wiki page](https://gitlab.com/suyu-emu/suyu/-/wikis/Building-for-Windows) +* __Linux__: [Wiki page](https://gitlab.com/suyu-emu/suyu/-/wikis/Building-for-Linux) ## Support -This project is completely free and open source, this project is made possible by many people who share the same interest. Please join the discord server to contribute. +This project is completely free and open source, this project is made possible by many people who share the same interest. Please join the Discord server [here](https://discord.gg/2gQRBp44KT) to contribute. ## License diff --git a/dist/org.yuzu_emu.yuzu.desktop b/dist/org.suyu_emu.suyu.desktop similarity index 66% rename from dist/org.yuzu_emu.yuzu.desktop rename to dist/org.suyu_emu.suyu.desktop index 51e191a8e5..0f619d7e7e 100644 --- a/dist/org.yuzu_emu.yuzu.desktop +++ b/dist/org.suyu_emu.suyu.desktop @@ -1,16 +1,16 @@ -# SPDX-FileCopyrightText: 2018 yuzu Emulator Project +# SPDX-FileCopyrightText: 2018 yuzu Emulator Project & 2024 suyu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later [Desktop Entry] Version=1.0 Type=Application -Name=yuzu +Name=suyu GenericName=Switch Emulator Comment=Nintendo Switch video game console emulator -Icon=org.yuzu_emu.yuzu -TryExec=yuzu -Exec=yuzu %f +Icon=org.suyu_emu.suyu +TryExec=suyu +Exec=suyu %f Categories=Game;Emulator;Qt; MimeType=application/x-nx-nro;application/x-nx-nso;application/x-nx-nsp;application/x-nx-xci; Keywords=Nintendo;Switch; -StartupWMClass=yuzu +StartupWMClass=suyu diff --git a/dist/org.yuzu_emu.yuzu.metainfo.xml b/dist/org.suyu_emu.suyu.metainfo.xml similarity index 51% rename from dist/org.yuzu_emu.yuzu.metainfo.xml rename to dist/org.suyu_emu.suyu.metainfo.xml index cfd1741748..74c72ad977 100644 --- a/dist/org.yuzu_emu.yuzu.metainfo.xml +++ b/dist/org.suyu_emu.suyu.metainfo.xml @@ -1,19 +1,19 @@ - org.yuzu_emu.yuzu + org.suyu_emu.suyu CC0-1.0 - yuzu + suyu

Nintendo Switch emulator -

yuzu is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra.

+

suyu is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra.

The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.

-

For a full list of games yuzu support, please visit our Compatibility page.

+

For a full list of games suyu support, please visit our Compatibility page.

Check out our website for the latest news on exciting features, monthly progress reports, and more!

@@ -24,19 +24,19 @@ SPDX-License-Identifier: CC0-1.0 switch emulator - https://yuzu-emu.org/ - https://github.com/yuzu-emu/yuzu/issues - https://yuzu-emu.org/wiki/faq/ - https://yuzu-emu.org/wiki/home/ - https://yuzu-emu.org/donate/ - https://www.transifex.com/projects/p/yuzu + https://suyu-emu.org/ + https://gitlab.com/suyu-emu/suyu/issues + https://suyu-emu.org/wiki/faq/ + https://suyu-emu.org/wiki/home/ + https://suyu-emu.org/donate/ + https://www.transifex.com/projects/p/suyu https://community.citra-emu.org/ - https://github.com/yuzu-emu/yuzu - https://yuzu-emu.org/wiki/contributing/ - org.yuzu_emu.yuzu.desktop + https://gitlab.com/suyu-emu/suyu + https://suyu-emu.org/wiki/contributing/ + org.suyu_emu.suyu.desktop - yuzu - yuzu-cmd + suyu + suyu-cmd pointing @@ -50,13 +50,13 @@ SPDX-License-Identifier: CC0-1.0 16384 GPL-3.0-or-later - yuzu Emulator Team + suyu Emulator Team - https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/001-Super%20Mario%20Odyssey%20.png - https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/004-The%20Legend%20of%20Zelda%20Skyward%20Sword%20HD.png - https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/007-Pokemon%20Sword.png - https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/010-Hyrule%20Warriors%20Age%20of%20Calamity.png - https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/039-Pok%C3%A9mon%20Mystery%20Dungeon%20Rescue%20Team%20DX.png.png.png + https://raw.githubusercontent.com/suyu-emu/suyu-emu.github.io/master/images/screenshots/001-Super%20Mario%20Odyssey%20.png + https://raw.githubusercontent.com/suyu-emu/suyu-emu.github.io/master/images/screenshots/004-The%20Legend%20of%20Zelda%20Skyward%20Sword%20HD.png + https://raw.githubusercontent.com/suyu-emu/suyu-emu.github.io/master/images/screenshots/007-Pokemon%20Sword.png + https://raw.githubusercontent.com/suyu-emu/suyu-emu.github.io/master/images/screenshots/010-Hyrule%20Warriors%20Age%20of%20Calamity.png + https://raw.githubusercontent.com/suyu-emu/suyu-emu.github.io/master/images/screenshots/039-Pok%C3%A9mon%20Mystery%20Dungeon%20Rescue%20Team%20DX.png.png.png diff --git a/dist/org.yuzu_emu.yuzu.xml b/dist/org.suyu_emu.suyu.xml similarity index 82% rename from dist/org.yuzu_emu.yuzu.xml rename to dist/org.suyu_emu.suyu.xml index b774eb0c4e..c54c8bd8ec 100644 --- a/dist/org.yuzu_emu.yuzu.xml +++ b/dist/org.suyu_emu.suyu.xml @@ -1,7 +1,7 @@ @@ -9,7 +9,7 @@ SPDX-License-Identifier: GPL-2.0-or-later Nintendo Switch homebrew executable NRO - + @@ -17,7 +17,7 @@ SPDX-License-Identifier: GPL-2.0-or-later Nintendo Switch homebrew executable NSO - + @@ -25,7 +25,7 @@ SPDX-License-Identifier: GPL-2.0-or-later Nintendo Switch Package NSP - + @@ -33,7 +33,7 @@ SPDX-License-Identifier: GPL-2.0-or-later Nintendo Switch Card Image XCI - + diff --git a/dist/qt_themes/default/icons/256x256/yuzu.png b/dist/qt_themes/default/icons/256x256/yuzu.png index 238adeb895cefd7bd7cff85c6a2187ebcb93443a..8770696e307dd2207d437d1a296342a8a6b1ca60 100644 GIT binary patch literal 12230 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 U?iuuvx&QzG07*qoM6N<$f}iCfHvj+t literal 4425 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 diff --git a/dist/readme/suyu__Logo-Pill.svg b/dist/readme/suyu__Logo-Pill.svg new file mode 100644 index 0000000000..e34ab989c8 --- /dev/null +++ b/dist/readme/suyu__Logo-Pill.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dist/suyu.ico b/dist/suyu.ico new file mode 100644 index 0000000000000000000000000000000000000000..031f75df973abf0c0032851b317a1b68b896dc7f GIT binary patch literal 10162 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 le^52LbNh%Mf#D@mS}ncrNb$&TBBk2_hPq}tO diff --git a/dist/suyu.svg b/dist/suyu.svg new file mode 100644 index 0000000000..381d5a5a57 --- /dev/null +++ b/dist/suyu.svg @@ -0,0 +1,4 @@ + + + + diff --git a/dist/yuzu.ico b/dist/yuzu.ico deleted file mode 100644 index df3be8464fcb3c0fb10308472ed527dbcdc10d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23159 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 diff --git a/dist/yuzu.svg b/dist/yuzu.svg index 93171d1bf7..61553ff3a1 100644 --- a/dist/yuzu.svg +++ b/dist/yuzu.svg @@ -1 +1,55 @@ -Artboard 1 \ No newline at end of file + + + + + + + + + + + + + diff --git a/src/common/settings.h b/src/common/settings.h index 61969af2bf..a0f6cdb570 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -609,7 +609,7 @@ struct Values { Category::Network}; // WebService - Setting enable_telemetry{linkage, true, "enable_telemetry", Category::WebService}; + Setting enable_telemetry{linkage, false, "enable_telemetry", Category::WebService}; Setting web_api_url{linkage, "https://api.yuzu-emu.org", "web_api_url", Category::WebService}; Setting yuzu_username{linkage, std::string(), "yuzu_username", diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 43a3c5ffd6..c6215c8aad 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -648,17 +648,13 @@ void KeyManager::ReloadKeys() { if (Settings::values.use_dev_keys) { dev_mode = true; - LoadFromFile(yuzu_keys_dir / "dev.keys_autogenerated", false); LoadFromFile(yuzu_keys_dir / "dev.keys", false); } else { dev_mode = false; - LoadFromFile(yuzu_keys_dir / "prod.keys_autogenerated", false); LoadFromFile(yuzu_keys_dir / "prod.keys", false); } - LoadFromFile(yuzu_keys_dir / "title.keys_autogenerated", true); LoadFromFile(yuzu_keys_dir / "title.keys", true); - LoadFromFile(yuzu_keys_dir / "console.keys_autogenerated", false); LoadFromFile(yuzu_keys_dir / "console.keys", false); } @@ -844,40 +840,6 @@ Key256 KeyManager::GetBISKey(u8 partition_id) const { return out; } -template -void KeyManager::WriteKeyToFile(KeyCategory category, std::string_view keyname, - const std::array& key) { - const auto yuzu_keys_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::KeysDir); - - std::string filename = "title.keys_autogenerated"; - - if (category == KeyCategory::Standard) { - filename = dev_mode ? "dev.keys_autogenerated" : "prod.keys_autogenerated"; - } else if (category == KeyCategory::Console) { - filename = "console.keys_autogenerated"; - } - - const auto path = yuzu_keys_dir / filename; - const auto add_info_text = !Common::FS::Exists(path); - - Common::FS::IOFile file{path, Common::FS::FileAccessMode::Append, - Common::FS::FileType::TextFile}; - - if (!file.IsOpen()) { - return; - } - - if (add_info_text) { - void(file.WriteString( - "# This file is autogenerated by Yuzu\n" - "# It serves to store keys that were automatically generated from the normal keys\n" - "# If you are experiencing issues involving keys, it may help to delete this file\n")); - } - - void(file.WriteString(fmt::format("\n{} = {}", keyname, Common::HexToString(key)))); - LoadFromFile(path, category == KeyCategory::Title); -} - void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { if (s128_keys.find({id, field1, field2}) != s128_keys.end() || key == Key128{}) { return; @@ -886,46 +848,6 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { Key128 rights_id; std::memcpy(rights_id.data(), &field2, sizeof(u64)); std::memcpy(rights_id.data() + sizeof(u64), &field1, sizeof(u64)); - WriteKeyToFile(KeyCategory::Title, Common::HexToString(rights_id), key); - } - - auto category = KeyCategory::Standard; - if (id == S128KeyType::Keyblob || id == S128KeyType::KeyblobMAC || id == S128KeyType::TSEC || - id == S128KeyType::SecureBoot || id == S128KeyType::SDSeed || id == S128KeyType::BIS) { - category = KeyCategory::Console; - } - - const auto iter2 = std::find_if( - s128_file_id.begin(), s128_file_id.end(), [&id, &field1, &field2](const auto& elem) { - return std::tie(elem.second.type, elem.second.field1, elem.second.field2) == - std::tie(id, field1, field2); - }); - if (iter2 != s128_file_id.end()) { - WriteKeyToFile(category, iter2->first, key); - } - - // Variable cases - if (id == S128KeyType::KeyArea) { - static constexpr std::array kak_names = { - "key_area_key_application_{:02X}", - "key_area_key_ocean_{:02X}", - "key_area_key_system_{:02X}", - }; - WriteKeyToFile(category, fmt::format(fmt::runtime(kak_names.at(field2)), field1), key); - } else if (id == S128KeyType::Master) { - WriteKeyToFile(category, fmt::format("master_key_{:02X}", field1), key); - } else if (id == S128KeyType::Package1) { - WriteKeyToFile(category, fmt::format("package1_key_{:02X}", field1), key); - } else if (id == S128KeyType::Package2) { - WriteKeyToFile(category, fmt::format("package2_key_{:02X}", field1), key); - } else if (id == S128KeyType::Titlekek) { - WriteKeyToFile(category, fmt::format("titlekek_{:02X}", field1), key); - } else if (id == S128KeyType::Keyblob) { - WriteKeyToFile(category, fmt::format("keyblob_key_{:02X}", field1), key); - } else if (id == S128KeyType::KeyblobMAC) { - WriteKeyToFile(category, fmt::format("keyblob_mac_key_{:02X}", field1), key); - } else if (id == S128KeyType::Source && field1 == static_cast(SourceKeyType::Keyblob)) { - WriteKeyToFile(category, fmt::format("keyblob_key_source_{:02X}", field2), key); } s128_keys[{id, field1, field2}] = key; @@ -935,14 +857,6 @@ void KeyManager::SetKey(S256KeyType id, Key256 key, u64 field1, u64 field2) { if (s256_keys.find({id, field1, field2}) != s256_keys.end() || key == Key256{}) { return; } - const auto iter = std::find_if( - s256_file_id.begin(), s256_file_id.end(), [&id, &field1, &field2](const auto& elem) { - return std::tie(elem.second.type, elem.second.field1, elem.second.field2) == - std::tie(id, field1, field2); - }); - if (iter != s256_file_id.end()) { - WriteKeyToFile(KeyCategory::Standard, iter->first, key); - } s256_keys[{id, field1, field2}] = key; } @@ -1052,8 +966,6 @@ void KeyManager::DeriveBase() { // Decrypt keyblob if (keyblobs[i] == std::array{}) { keyblobs[i] = DecryptKeyblob(encrypted_keyblobs[i], key); - WriteKeyToFile<0x90>(KeyCategory::Console, fmt::format("keyblob_{:02X}", i), - keyblobs[i]); } Key128 package1; @@ -1183,7 +1095,6 @@ void KeyManager::DeriveETicket(PartitionDataManager& data, data.DecryptProdInfo(GetBISKey(0)); eticket_extended_kek = data.GetETicketExtendedKek(); - WriteKeyToFile(KeyCategory::Console, "eticket_extended_kek", eticket_extended_kek); DeriveETicketRSAKey(); PopulateTickets(); } @@ -1261,8 +1172,6 @@ void KeyManager::PopulateFromPartitionData(PartitionDataManager& data) { continue; } encrypted_keyblobs[i] = data.GetEncryptedKeyblob(i); - WriteKeyToFile<0xB0>(KeyCategory::Console, fmt::format("encrypted_keyblob_{:02X}", i), - encrypted_keyblobs[i]); } SetKeyWrapped(S128KeyType::Source, data.GetPackage2KeySource(), diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index 2250eccec1..005062345e 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -314,10 +314,6 @@ private: bool dev_mode; void LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys); - template - void WriteKeyToFile(KeyCategory category, std::string_view keyname, - const std::array& key); - void DeriveGeneralPurposeKeys(std::size_t crypto_revision); void DeriveETicketRSAKey(); diff --git a/src/dedicated_room/yuzu_room.rc b/src/dedicated_room/yuzu_room.rc index a08957684c..6e108f6032 100644 --- a/src/dedicated_room/yuzu_room.rc +++ b/src/dedicated_room/yuzu_room.rc @@ -1,6 +1,8 @@ -// SPDX-FileCopyrightText: 2017 Citra Emulator Project +// SPDX-FileCopyrightText: 2017 Citra Emulator Project & 2024 suyu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// // @@ -9,7 +11,7 @@ // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -YUZU_ICON ICON "../../dist/yuzu.ico" +SUYU_ICON ICON "../../dist/suyu.ico" ///////////////////////////////////////////////////////////////////////////// @@ -17,4 +19,4 @@ YUZU_ICON ICON "../../dist/yuzu.ico" // RT_MANIFEST // -0 RT_MANIFEST "../../dist/yuzu.manifest" +0 RT_MANIFEST "../../dist/suyu.manifest" diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 0259a8c293..0b48045f36 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -1,6 +1,8 @@ -# SPDX-FileCopyrightText: 2018 yuzu Emulator Project +# SPDX-FileCopyrightText: 2018 yuzu Emulator Project & 2024 Suyu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later +# Modified by JuanCStar on 2024/03/06 + set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) @@ -229,8 +231,8 @@ add_executable(yuzu vk_device_info.h compatdb.cpp compatdb.h - yuzu.qrc - yuzu.rc + suyu.qrc + suyu.rc ) if (YUZU_CRASH_DUMPS) diff --git a/src/yuzu/about_dialog.cpp b/src/yuzu/about_dialog.cpp index eeff543599..a7df9c3174 100644 --- a/src/yuzu/about_dialog.cpp +++ b/src/yuzu/about_dialog.cpp @@ -1,6 +1,8 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project & 2024 suyu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #include #include #include "common/scm_rev.h" @@ -13,19 +15,19 @@ AboutDialog::AboutDialog(QWidget* parent) const auto description = std::string(Common::g_scm_desc); const auto build_id = std::string(Common::g_build_id); - const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description); + const auto suyu_build = fmt::format("suyu Development Build | {}-{}", branch_name, description); const auto override_build = fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); - const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; + const auto suyu_build_version = override_build.empty() ? suyu_build : override_build; ui->setupUi(this); // Try and request the icon from Qt theme (Linux?) - const QIcon yuzu_logo = QIcon::fromTheme(QStringLiteral("org.yuzu_emu.yuzu")); - if (!yuzu_logo.isNull()) { - ui->labelLogo->setPixmap(yuzu_logo.pixmap(200)); + const QIcon suyu_logo = QIcon::fromTheme(QStringLiteral("org.suyu_emu.suyu")); + if (!suyu_logo.isNull()) { + ui->labelLogo->setPixmap(suyu_logo.pixmap(200)); } ui->labelBuildInfo->setText( - ui->labelBuildInfo->text().arg(QString::fromStdString(yuzu_build_version), + ui->labelBuildInfo->text().arg(QString::fromStdString(suyu_build_version), QString::fromUtf8(Common::g_build_date).left(10))); } diff --git a/src/yuzu/about_dialog.h b/src/yuzu/about_dialog.h index 3c4e71ee6c..e360ab4f44 100644 --- a/src/yuzu/about_dialog.h +++ b/src/yuzu/about_dialog.h @@ -1,6 +1,8 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project & 2024 suyu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #pragma once #include diff --git a/src/yuzu/configuration/configure_web.ui b/src/yuzu/configuration/configure_web.ui index 3ac3864bea..cfe6460520 100644 --- a/src/yuzu/configuration/configure_web.ui +++ b/src/yuzu/configuration/configure_web.ui @@ -2,6 +2,9 @@ ConfigureWeb + + false + 0 diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index c0c0a19b85..98f4ca42b1 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2014 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #include #include #include @@ -427,9 +429,6 @@ GMainWindow::GMainWindow(std::unique_ptr config_, bool has_broken_vulk game_list->LoadCompatibilityList(); game_list->PopulateAsync(UISettings::values.game_dirs); - // Show one-time "callout" messages to the user - ShowTelemetryCallout(); - // make sure menubar has the arrow cursor instead of inheriting from this ui->menubar->setCursor(QCursor()); statusBar()->setCursor(QCursor()); @@ -4551,10 +4550,10 @@ void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_vie const auto description = std::string(Common::g_scm_desc); const auto build_id = std::string(Common::g_build_id); - const auto yuzu_title = fmt::format("yuzu | {}-{}", branch_name, description); + const auto suyu_title = fmt::format("suyu | {}-{}", branch_name, description); const auto override_title = fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); - const auto window_title = override_title.empty() ? yuzu_title : override_title; + const auto window_title = override_title.empty() ? suyu_title : override_title; if (title_name.empty()) { setWindowTitle(QString::fromStdString(window_title)); @@ -5303,7 +5302,7 @@ int main(int argc, char* argv[]) { // Fix the Wayland appId. This needs to match the name of the .desktop file without the .desktop // suffix. - QGuiApplication::setDesktopFileName(QStringLiteral("org.yuzu_emu.yuzu")); + QGuiApplication::setDesktopFileName(QStringLiteral("org.suyu_emu.suyu")); #endif SetHighDPIAttributes(); diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index 85dc1f2f67..f21bc09890 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -11,11 +11,11 @@ - yuzu + suyu - - :/img/yuzu.ico:/img/yuzu.ico + + :/img/suyu.ico:/img/suyu.ico QTabWidget::Rounded @@ -477,7 +477,7 @@ - + diff --git a/src/yuzu/suyu.qrc b/src/yuzu/suyu.qrc new file mode 100644 index 0000000000..87038fc28d --- /dev/null +++ b/src/yuzu/suyu.qrc @@ -0,0 +1,12 @@ + + + + + ../../dist/suyu.ico + + diff --git a/src/yuzu/yuzu.rc b/src/yuzu/suyu.rc similarity index 64% rename from src/yuzu/yuzu.rc rename to src/yuzu/suyu.rc index 1fc74d0659..5390815ef2 100644 --- a/src/yuzu/yuzu.rc +++ b/src/yuzu/suyu.rc @@ -1,6 +1,8 @@ -// SPDX-FileCopyrightText: 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: 2018 yuzu Emulator Project & 2024 suyu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// // @@ -11,7 +13,7 @@ // remains consistent on all systems. // QT requires that the default application icon is named IDI_ICON1 -IDI_ICON1 ICON "../../dist/yuzu.ico" +IDI_ICON1 ICON "../../dist/suyu.ico" ///////////////////////////////////////////////////////////////////////////// @@ -19,4 +21,4 @@ IDI_ICON1 ICON "../../dist/yuzu.ico" // RT_MANIFEST // -0 RT_MANIFEST "../../dist/yuzu.manifest" +0 RT_MANIFEST "../../dist/suyu.manifest" diff --git a/src/yuzu/yuzu.qrc b/src/yuzu/yuzu.qrc deleted file mode 100644 index 855df05fd1..0000000000 --- a/src/yuzu/yuzu.qrc +++ /dev/null @@ -1,10 +0,0 @@ - - - - - ../../dist/yuzu.ico - - diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 13d4d5722f..8bedd8b9e3 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2018 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later +# Modified by JuanCStar on 2024/03/06 + # Credits to Samantas5855 and others for this function. function(create_resource file output filename) # Read hex data from file @@ -25,7 +27,7 @@ add_executable(yuzu-cmd sdl_config.cpp sdl_config.h yuzu.cpp - yuzu.rc + suyu.rc ) target_link_libraries(yuzu-cmd PRIVATE common core input_common frontend_common) diff --git a/src/yuzu_cmd/yuzu.rc b/src/yuzu_cmd/suyu.rc similarity index 60% rename from src/yuzu_cmd/yuzu.rc rename to src/yuzu_cmd/suyu.rc index e230cf6809..696fac7ed3 100644 --- a/src/yuzu_cmd/yuzu.rc +++ b/src/yuzu_cmd/suyu.rc @@ -1,6 +1,8 @@ -// SPDX-FileCopyrightText: 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: 2018 yuzu Emulator Project & 2024 suyu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// Modified by JuanCStar on 2024/03/06 + #include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// // @@ -9,7 +11,7 @@ // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -YUZU_ICON ICON "../../dist/yuzu.ico" +SUYU_ICON ICON "../../dist/suyu.ico" ///////////////////////////////////////////////////////////////////////////// @@ -17,4 +19,4 @@ YUZU_ICON ICON "../../dist/yuzu.ico" // RT_MANIFEST // -0 RT_MANIFEST "../../dist/yuzu.manifest" +0 RT_MANIFEST "../../dist/suyu.manifest"