From 8cab965e4c306607717d47a737db091d7e766c7b Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Wed, 7 Jan 2026 02:21:30 -0600 Subject: [PATCH] Fixed some missing things --- CMakeLists.txt | 54 ++++++++++++++------ ExecutableResource.h | 16 ++++++ Resource.rc | 115 +++++++++++++++++++++++++++++++++++++++++++ Torch | 2 +- ghostship.ico | Bin 0 -> 4286 bytes ghostship.manifest | 37 ++++++++++++++ logo.png | Bin 12110 -> 590 bytes nx-logo.jpg | Bin 0 -> 8419 bytes properties.h | 14 ++++++ properties.h.in | 14 ++++++ 10 files changed, 235 insertions(+), 17 deletions(-) create mode 100644 ExecutableResource.h create mode 100644 Resource.rc create mode 100644 ghostship.ico create mode 100644 ghostship.manifest create mode 100644 nx-logo.jpg create mode 100644 properties.h create mode 100644 properties.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 2554e8f2..818f9680 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,24 @@ cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) # Set the project version and language -project(Ghostship VERSION 0.1.0 LANGUAGES C CXX ASM) +project(Ghostship VERSION 1.0.0 LANGUAGES C CXX ASM) +include(FetchContent) + +set(NATO_PHONETIC_ALPHABET + "Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel" + "India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa" + "Quebec" "Romeo" "Sierra" "Tango" "Uniform" "Victor" "Whiskey" + "Xray" "Yankee" "Zulu" +) + +# Get the patch version number from the project version +math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}") + +# Use the patch number to select the correct word +list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD) + +set(PROJECT_BUILD_NAME "Barnard ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE) +set(PROJECT_TEAM "Lywx" CACHE STRING "" FORCE) if(APPLE) enable_language(OBJCXX) @@ -32,11 +49,6 @@ set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endif() -if(NOT EXISTS ${CMAKE_BINARY_DIR}/config.yml) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "${CMAKE_BINARY_DIR}/config.yml") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/assets/" "${CMAKE_BINARY_DIR}/assets/") -endif() - if (MSVC) set(CPP "${CMAKE_C_COMPILER}" "/EP") else() @@ -107,6 +119,8 @@ if (UNIX AND NOT APPLE) find_package(OpenGL REQUIRED) endif() +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/properties.h.in ${CMAKE_CURRENT_SOURCE_DIR}/properties.h @ONLY) + # Include directories include_directories( ${CMAKE_CURRENT_SOURCE_DIR} @@ -228,7 +242,6 @@ endif() # Libultraship Integration # #==============================================================================# - add_subdirectory(libultraship ${CMAKE_CURRENT_SOURCE_DIR}/libultraship) add_dependencies(${PROJECT_NAME} libultraship) target_link_libraries(${PROJECT_NAME} PRIVATE libultraship) @@ -291,8 +304,10 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") "$<$:SDL2_net::SDL2_net-static>" ) elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") + find_package(SDL2) set(ADDITIONAL_LIBRARY_DEPENDENCIES -lglad + SDL2::SDL2 ) elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS") set(ADDITIONAL_LIBRARY_DEPENDENCIES @@ -336,6 +351,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}) @@ -504,6 +520,8 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") else() if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") set(CPU_OPTION -msse2 -mfpmath=sse) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + set(CPU_OPTION -mcpu=native) endif() target_compile_options(${PROJECT_NAME} PRIVATE @@ -534,6 +552,13 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") endif() endif() +add_custom_command( + TARGET ${PROJECT_NAME} POST_BUILD + COMMENT "Copying asset yamls..." + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "$/config.yml" + COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/assets/" "$/assets/" +) + if(NOT CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") include(ExternalProject) ExternalProject_Add(TorchExternal @@ -551,25 +576,22 @@ add_custom_target( ExtractAssets DEPENDS TorchExternal WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${TORCH_EXECUTABLE} o2r baserom.jp.z64 + COMMAND ${TORCH_EXECUTABLE} o2r baserom.us.z64 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/sm64.o2r" "${CMAKE_BINARY_DIR}/sm64.o2r" ) add_custom_target( - ExtractHeaders - DEPENDS TorchExternal - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${TORCH_EXECUTABLE} header -o baserom.jp.z64 -) - -add_custom_target( - GeneratePortOTR + GeneratePortO2R DEPENDS TorchExternal WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ${TORCH_EXECUTABLE} pack port ghostship.o2r o2r COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/ghostship.o2r" "${CMAKE_BINARY_DIR}/ghostship.o2r" ) +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + install(FILES "${CMAKE_BINARY_DIR}/ghostship.o2r" DESTINATION . COMPONENT ${PROJECT_NAME}) +endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") add_custom_target(CreateOSXIcons COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/ghostship.iconset diff --git a/ExecutableResource.h b/ExecutableResource.h new file mode 100644 index 00000000..8a193b3e --- /dev/null +++ b/ExecutableResource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Resource.rc +// +#define IDI_ICON1 111 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 113 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Resource.rc b/Resource.rc new file mode 100644 index 00000000..0fbd7982 --- /dev/null +++ b/Resource.rc @@ -0,0 +1,115 @@ +// Microsoft Visual C++ generated resource script. +// +#include "ExecutableResource.h" +#include "properties.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "ExecutableResource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version Info +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VER_FILEVERSION + PRODUCTVERSION VER_PRODUCTVERSION + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS_NT_WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", VER_COMPANYNAME_STR + VALUE "FileDescription", VER_FILEDESCRIPTION_STR + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", VER_INTERNALNAME_STR + VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR + VALUE "ProductName", VER_PRODUCTNAME_STR + VALUE "ProductVersion", VER_PRODUCTVERSION_str + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON "ghostship.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// RT_MANIFEST +// + +1 RT_MANIFEST "ghostship.manifest" + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Torch b/Torch index b5ed22ae..19b3ca70 160000 --- a/Torch +++ b/Torch @@ -1 +1 @@ -Subproject commit b5ed22ae838d252366e40b242a07639e0615acbe +Subproject commit 19b3ca70788dc5a9a0ea1fba62b4caa97674d6db diff --git a/ghostship.ico b/ghostship.ico new file mode 100644 index 0000000000000000000000000000000000000000..afb3c9cff6022a3f66a93dc7df89c6aba180b3a7 GIT binary patch literal 4286 zcmZQzU}RuqP*4ET3Jfa*7#PGD7#K7d7#I{77#JKFAmR)lAi%&N#0|k9E(q&M2>&0- zSXV;mKL}ID4?-k`1;}1QNvZ!J3}RF227L)p8rzTCe;~WfB~|`|Xj1$E@;3+*qeov# z9IyXKwVN0_A!>yFgY34@umjV261c(vmpED;krer_hm48LLm)Rm+=FHwk@{hF>WJ|F zN5(L5!e$fcKWy%i6am|*Eh_L|MNam=vb-D^gV-Q3kbA)Hz^0c9Vme}i|COaB|Ep>1 z{P#R|`@ip%H~)Pvzy9xe^wxhhEp4zINDbjIATI26#SvkpEy(jTEyRmAjT7rWLut|f`k*iu75uNRtM}jQ)WiQl zPyhc9eDwQ&z=NOv10VkS?{ogyf1fjt|NCBk1$K+q@jL(3w6y-~hzdf|CmG?cD=z%s zKuYw#hmq=keR0A6$}-ab-FBY&?|0+F|G-DT!1f0|{Qcki#J&HT7S{h&)inNVm|6Yz zI(+kg@azBJFapIBrRf3We^4AK3Jd;MmX(FX`;lA!{ceB$?{o3Re|2NC{~miU{r9{2 z_P^);tN*neT>g83|8Cn({nxa% z`|o?@71+;#&;S4TI(qBBwv#(JF1$}Y_^%=>1I{m0$rI4BMn_cOKPY{vX=?uW*mL23 z!2KWpeJ;QHA8_~Ef4}SR!093I@t^;`SKom1CZ%xz@;?fOx&xFSG>lFEdmg&}U)#a; zzsJ7I|21tL|NCBg`9J98e{jA8l@H|EkH~i@c0-AM^|o7oc*99QzF<#Q$4JYeDNlEN+n$`43848U{uX|2snbuVv!^_P_t_ z&){-E2b}&;%Nkgk!saiSn5C4~e^*VP{{~VL&~^=y8^GlOKe(*(I(GYiz{6kveXqR! z?|c< zl-5Ay5v(lqJaHE+2dWSBr6m5t>RVlL!T%t;-3?X1Wecc`0hxu4Vd9YXgb+9m;B68~ zVQ?MpO4|kB+Aa{V=015{XA18*EL14ea*wC^8rye5ZLG>mmoGCSjT>YRhz^+#W zEnQ&?M`F|<>w}~#?Diq66Zx+rDfeGb0-yQBs6jSU7@W5W+YQr$&u&uGK-7ZrG`w6P cGHnp=R)`&h)PvkWNDXb}A@L6y0~kmQ0HLo4B>(^b literal 0 HcmV?d00001 diff --git a/ghostship.manifest b/ghostship.manifest new file mode 100644 index 00000000..6f47a937 --- /dev/null +++ b/ghostship.manifest @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + diff --git a/logo.png b/logo.png index 56ddadf1a10f692e756aac3e2caa8ced823fef84..ed29996fa6fe70469d9e53ba1b75e8d2a428ed61 100644 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc7G?$phIKJpLm3ztI14-?iy0WW%|MuOKgW$K z1_lPf64!{5kj#>tRE7W-HwEXS)WnkfBFDHr8Vn2!!XQb<(vpn)BCu>oetu4|f}^|i z`EmmW1_s@#kcbkO)Z*l#%z~24{5%E*j+v)5G&MI|x~{LUe_h+d^Rn*A^XE0Md7nGa z%8)mocyyI3b{rMo^ zXu?em1_s7BPZ!6Kid%1Q-}XIhAi;KF4TH1+v-SoiC@S%a37xp=#KEnzuWkRl_lN4l z^Uhz6Uw^u^NQ?mt8ZsH>6&V;9{xaNi?yFd~Lx7QiA%tB*5EMRO1q^4HfAId~Vq{>L zAwJ<%%}q`Qh65H2PYx?C_juRHz`(GDKf+uhxI>hQfx$pdVYx!C;C;pG?`zw@QWoO# z=1&N6$a7?3V94MXkZ$?Yeq$R014A-H5u2)^10NH_iUs}-SxF!R^b+na=nVS&{GmHg?? wu6AUk9jKkJ$G~uagJJ50_czQTS}s^V;P*UOdgSB#o_8P-Pgg&ebxsLQ05ajbG5`Po literal 12110 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