From f500ac3a4a6ffcefe881536e06f4bf809de59c12 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Wed, 5 Mar 2025 18:31:53 -0600 Subject: [PATCH] Fixed some compilation errors --- CMakeLists.txt | 27 +++++++++++++++++++++++++++ nx-logo.jpg | Bin 0 -> 27576 bytes src/port/Engine.cpp | 14 ++++++++++++++ src/port/extractor/GameExtractor.cpp | 6 ++++-- src/port/ui/ImguiUI.cpp | 27 ++++++++++++++++----------- 5 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 nx-logo.jpg diff --git a/CMakeLists.txt b/CMakeLists.txt index f949fa0b..fb66a28c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,10 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment ve # Set the C++ standard and enable the MSVC parallel build option set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use") +set(PROJECT_TEAM "Lywx & YoshiCrystal") +set(PROJECT_VERSION_MAJOR 2) +set(PROJECT_VERSION_MINOR 0) +set(PROJECT_VERSION_PATCH 0) #add_compile_options(-fsanitize=address) #add_link_options(-fsanitize=address) @@ -69,6 +73,20 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") endif() endif() +################################################################################ +# Global configuration types +################################################################################ +if (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") +set(CMAKE_C_FLAGS_DEBUG "-g -ffast-math -DDEBUG") +set(CMAKE_CXX_FLAGS_DEBUG "-g -ffast-math -DDEBUG") +set(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG") +else() +set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") +set(CMAKE_OBJCXX_FLAGS_RELEASE "-O2 -DNDEBUG") +endif() + # Set game compilation version set(VERSION us) set(USE_NETWORKING OFF) @@ -309,8 +327,16 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") "Vorbis::vorbisfile" ) elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") + find_package(SDL2) + find_package(Vorbis REQUIRED) + link_libraries(Vorbis::vorbisfile) + find_package(Ogg REQUIRED) + link_libraries(Ogg::ogg) set(ADDITIONAL_LIBRARY_DEPENDENCIES -lglad + SDL2::SDL2 + "Ogg::ogg" + "Vorbis::vorbisfile" ) elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS") set(ADDITIONAL_LIBRARY_DEPENDENCIES @@ -360,6 +386,7 @@ nx_generate_nacp(${PROJECT_NAME}.nacp nx_create_nro(${PROJECT_NAME} NACP ${PROJECT_NAME}.nacp + ICON ${CMAKE_CURRENT_SOURCE_DIR}/nx-logo.jpg ) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro DESTINATION . COMPONENT ${PROJECT_NAME}) diff --git a/nx-logo.jpg b/nx-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d6fea2c71ff10a9adaad0bb9f4995203c67d12b GIT binary patch literal 27576 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 FCIDS@Pmurs literal 0 HcmV?d00001 diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index dcedb08d..e4d5b4bf 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -44,6 +44,10 @@ #include #include +#ifdef __SWITCH__ +#include +#endif + namespace fs = std::filesystem; extern "C" { @@ -59,6 +63,11 @@ std::vector MemoryPool; GameEngine* GameEngine::Instance; GameEngine::GameEngine() { +#ifdef __SWITCH__ + Ship::Switch::Init(Ship::PreInitPhase); + Ship::Switch::Init(Ship::PostInitPhase); +#endif + std::vector archiveFiles; const std::string main_path = Ship::Context::GetPathRelativeToAppDirectory("sf64.o2r"); const std::string assets_path = Ship::Context::GetPathRelativeToAppDirectory("starship.o2r"); @@ -159,9 +168,11 @@ GameEngine::GameEngine() { this->context->Init(archiveFiles, {}, 3, { 32000, 1024, 1680 }, window, controlDeck); +#ifndef __SWITCH__ Ship::Context::GetInstance()->GetLogger()->set_level( (spdlog::level::level_enum) CVarGetInteger("gDeveloperTools.LogLevel", 1)); Ship::Context::GetInstance()->GetLogger()->set_pattern("[%H:%M:%S.%e] [%s:%#] [%l] %v"); +#endif auto loader = context->GetResourceManager()->GetResourceLoader(); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, @@ -289,6 +300,9 @@ void GameEngine::Destroy() { free(ptr); } MemoryPool.clear(); +#ifdef __SWITCH__ + Ship::Switch::Exit(); +#endif } void GameEngine::StartFrame() const { diff --git a/src/port/extractor/GameExtractor.cpp b/src/port/extractor/GameExtractor.cpp index 4b325a33..f8392bc8 100644 --- a/src/port/extractor/GameExtractor.cpp +++ b/src/port/extractor/GameExtractor.cpp @@ -4,8 +4,10 @@ #include "Context.h" #include "spdlog/spdlog.h" -#include "portable-file-dialogs.h" #include +#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__SWITCH__) +#include "portable-file-dialogs.h" +#endif std::unordered_map mGameList = { { "d8b1088520f7c5f81433292a9258c1184afa1457", "Star Fox 64 (U) (V1.0)" }, @@ -21,7 +23,7 @@ std::unordered_map mGameList = { }; bool GameExtractor::SelectGameFromUI() { -#if !defined(__IOS__) || !defined(__ANDROID__) || !defined(__SWITCH__) +#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__SWITCH__) auto selection = pfd::open_file("Select a file", ".", { "N64 Roms", "*.z64" }).result(); if (selection.empty()) { diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index b870dded..22b5b167 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -14,6 +14,11 @@ #include "port/notification/notification.h" #include "utils/StringHelper.h" +#ifdef __SWITCH__ +#include +#include +#endif + extern "C" { #include "sys.h" #include @@ -192,20 +197,10 @@ void DrawSettingsMenu(){ UIWidgets::Spacer(0); -#ifndef __SWITCH__ UIWidgets::CVarCheckbox("Menubar Controller Navigation", "gControlNav", { .tooltip = "Allows controller navigation of the SOH menu bar (Settings, Enhancements,...)\nCAUTION: This will disable game inputs while the menubar is visible.\n\nD-pad to move between items, A to select, and X to grab focus on the menu bar" }); -#endif - // UIWidgets::CVarCheckbox("Show Inputs", "gInputEnabled", { - // .tooltip = "Shows currently pressed inputs on the bottom right of the screen" - // }); - if (CVarGetInteger("gInputEnabled", 0)) { - UIWidgets::CVarSliderFloat("Input Scale", "gInputScale", 1.0f, 3.0f, 1.0f, { - .tooltip = "Sets the on screen size of the displayed inputs from the Show Inputs setting", - .format = "%.1fx", - }); - } + UIWidgets::CVarCheckbox("Invert Y Axis", "gInvertYAxis",{ .tooltip = "Inverts the Y axis for controlling vehicles" }); @@ -648,6 +643,16 @@ void DrawDebugMenu() { Ship::Context::GetInstance()->GetLogger()->set_level((spdlog::level::level_enum)CVarGetInteger("gDeveloperTools.LogLevel", 1)); } +#ifdef __SWITCH__ + if (UIWidgets::CVarCombobox("Switch CPU Profile", "gSwitchPerfMode", SWITCH_CPU_PROFILES, { + .tooltip = "Switches the CPU profile to a different one", + .defaultIndex = (int)Ship::SwitchProfiles::STOCK + })) { + SPDLOG_INFO("Profile:: %s", SWITCH_CPU_PROFILES[CVarGetInteger("gSwitchPerfMode", (int)Ship::SwitchProfiles::STOCK)]); + Ship::Switch::ApplyOverclock(); + } +#endif + UIWidgets::WindowButton("Gfx Debugger", "gGfxDebuggerEnabled", GameUI::mGfxDebuggerWindow, { .tooltip = "Enables the Gfx Debugger window, allowing you to input commands, type help for some examples" });