Merge remote-tracking branch 'origin/main' into feature/easy-quick-spin

This commit is contained in:
MelonSpeedruns
2026-09-12 11:34:27 -04:00
1812 changed files with 63322 additions and 30045 deletions
+10 -5
View File
@@ -68,13 +68,18 @@ body:
required: true
- type: dropdown
id: game-region
id: game-disc
attributes:
label: Game Region
description: The game region you are playing on
label: Game Disc
description: The game disc you are playing on
options:
- NTSC-U (North America)
- PAL (Europe)
- GameCube NTSC-U (North America)
- GameCube PAL (Europe)
- GameCube NTSC-J (Japan)
- Wii NTSC-U (North America) Revision 0
- Wii NTSC-U (North America) Revision 2
- Wii PAL (Europe)
- Wii NTSC-J (Japan)
validations:
required: true
+17 -7
View File
@@ -76,10 +76,11 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: dusklight-${{env.DUSK_VERSION}}-linux-${{matrix.preset}}-${{matrix.artifact_arch}}
name: dusklight-${{env.APP_VERSION}}-linux-${{matrix.preset}}-${{matrix.artifact_arch}}
path: |
build/install/Dusklight-*.AppImage
build/install/debug.tar.*
build/install/sdk/
build-apple:
name: Build Apple (${{matrix.name}})
@@ -144,10 +145,11 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: dusklight-${{env.DUSK_VERSION}}-${{matrix.artifact_name}}
name: dusklight-${{env.APP_VERSION}}-${{matrix.artifact_name}}
path: |
build/install/Dusklight.app
build/install/debug.tar.*
build/install/sdk/
build-android:
name: Build Android (${{matrix.name}})
@@ -203,18 +205,24 @@ jobs:
- name: Build native library
run: cmake --build --preset ${{matrix.preset}} --target dusklight
- name: Stage stripped JNI library
run: ANDROID_STAGE_ABIS="${{matrix.abi}}" platforms/android/scripts/stage-jni-libs.sh
- name: Build bundled mods
run: cmake --build --preset ${{matrix.preset}} --target dusklight_mods
- name: Build APK
working-directory: platforms/android
run: ./gradlew :app:assembleRelease --rerun-tasks
- name: Stage artifacts
run: |
mkdir -p upload/sdk
cp build/*/stub-android-*.so upload/sdk/
cp platforms/android/app/build/outputs/apk/release/app-${{matrix.abi}}-release-unsigned.apk upload/
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: dusklight-${{env.DUSK_VERSION}}-android-${{matrix.artifact_arch}}
path: platforms/android/app/build/outputs/apk/release/app-${{matrix.abi}}-release-unsigned.apk
name: dusklight-${{env.APP_VERSION}}-android-${{matrix.artifact_arch}}
path: upload/
build-windows:
name: Build Windows (${{matrix.name}})
@@ -275,9 +283,11 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: dusklight-${{env.DUSK_VERSION}}-win32-msvc-${{matrix.artifact_arch}}
name: dusklight-${{env.APP_VERSION}}-win32-msvc-${{matrix.artifact_arch}}
path: |
build/install/*.exe
build/install/*.dll
build/install/res/
build/install/mods/
build/install/debug.7z
build/install/sdk/
+9
View File
@@ -1,3 +1,12 @@
[submodule "extern/aurora"]
path = extern/aurora
url = https://github.com/encounter/aurora.git
[submodule "extern/borealis"]
path = extern/borealis
url = https://github.com/encounter/borealis.git
[submodule "mods/randomizer"]
path = mods/randomizer
url = https://github.com/TwilitRealm/dusklight-randomizer.git
[submodule "mods/cosmetics"]
path = mods/cosmetics
url = https://github.com/TwilitRealm/dusklight-cosmetics
+188 -246
View File
@@ -5,10 +5,11 @@ if (NOT CMAKE_BUILD_TYPE)
"Build type options: Debug Release RelWithDebInfo MinSizeRel" FORCE)
endif ()
include(cmake/DetectVersion.cmake)
detect_version()
include(extern/borealis/cmake/DetectVersion.cmake)
borealis_detect_version()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
project(dusklight LANGUAGES C CXX VERSION ${DUSK_VERSION_STRING})
project(dusklight LANGUAGES C CXX VERSION ${BOREALIS_APP_VERSION})
if (APPLE)
enable_language(OBJC OBJCXX)
endif ()
@@ -32,6 +33,7 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(CMAKE_COLOR_DIAGNOSTICS ON)
# Folder-based instead of target-based organization
# in Visual Studio and Xcode generators
@@ -70,10 +72,13 @@ if (CMAKE_SYSTEM_NAME STREQUAL Linux)
endif ()
set(AURORA_ENABLE_DVD ON CACHE BOOL "Enable DVD API support" FORCE)
set(AURORA_ENABLE_CARD ON CACHE BOOL "Enable CARD API support" FORCE)
set(AURORA_ENABLE_THP ON CACHE BOOL "Enable THP decoder" FORCE)
set(AURORA_ENABLE_RMLUI ON CACHE BOOL "Enable RmlUi UI support" FORCE)
add_subdirectory(extern/aurora EXCLUDE_FROM_ALL)
target_compile_definitions(aurora_mtx PRIVATE MTX_USE_PS=1)
add_subdirectory(extern/borealis EXCLUDE_FROM_ALL)
add_subdirectory(libs/freeverb)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
@@ -84,12 +89,38 @@ endif ()
option(DUSK_BUILD_WARNINGS "Enable compiler warnings (off by default)")
option(DUSK_SELECTED_OPT "If on, selected parts of the project will be compiled with optimizations on Debug, intending to make the game run at 30 FPS. Note for MSVC: you will need to remove '/RTC1' from your debug flags in CMake.")
option(DUSK_MOVIE_SUPPORT "If on, compile against libjpeg-turbo to enable THP file decoding" ON)
option(DUSK_ENABLE_UPDATE_CHECKER "Enable update checking support" ON)
option(DUSK_ENABLE_SENTRY_NATIVE "Enable sentry-native crash reporting support" OFF)
option(DUSK_PACKAGE_INSTALL "Install Dusklight with a Linux-native file structure" OFF)
option(DUSK_GFX_DEBUG_GROUPS "Report debug groups to the native graphics API" ${DUSK_GFX_DEBUG_GROUPS_DEFAULT})
option(DUSK_ENABLE_CODE_MODS "Enable code mods" OFF)
option(DUSK_ENABLE_CODE_MODS "Enable code mods" ON)
set(DUSK_HAS_FUNCHOOK OFF)
if (DUSK_ENABLE_CODE_MODS AND (NOT APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"))
set(DUSK_HAS_FUNCHOOK ON)
endif ()
set(DUSK_HAS_FUNCHOOK ${DUSK_HAS_FUNCHOOK} CACHE INTERNAL "Enable funchook" FORCE)
set(_target_architectures ${CMAKE_OSX_ARCHITECTURES})
if (NOT _target_architectures)
set(_target_architectures ${CMAKE_SYSTEM_PROCESSOR})
endif ()
list(LENGTH _target_architectures _target_arch_count)
set(DUSK_HAS_PREPATCH OFF)
if (DUSK_ENABLE_CODE_MODS AND APPLE AND _target_arch_count EQUAL 1)
list(GET _target_architectures 0 _target_arch)
if (_target_arch STREQUAL "arm64")
set(DUSK_HAS_PREPATCH ON)
endif ()
endif ()
set(DUSK_HAS_PREPATCH ${DUSK_HAS_PREPATCH} CACHE INTERNAL "Enable symgen prepatch support" FORCE)
if (DUSK_ENABLE_CODE_MODS AND CMAKE_SYSTEM_NAME MATCHES "^(iOS|tvOS)$")
list(LENGTH CMAKE_OSX_ARCHITECTURES _mobile_arch_count)
if (NOT _mobile_arch_count EQUAL 1 OR NOT CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
message(FATAL_ERROR
"iOS/tvOS code mods require a single arm64 architecture; got "
"CMAKE_OSX_ARCHITECTURES='${CMAKE_OSX_ARCHITECTURES}'")
endif ()
endif ()
# Edit & Continue
if (MSVC)
@@ -102,86 +133,21 @@ if (MSVC)
endif ()
endif ()
if (DUSK_MOVIE_SUPPORT)
find_package(libjpeg-turbo 3.0 CONFIG QUIET)
if (libjpeg-turbo_FOUND)
message(STATUS "dusklight: Using system libjpeg-turbo")
else ()
message(STATUS "dusklight: Fetching libjpeg-turbo")
include(ExternalProject)
set(_jpeg_install_dir ${CMAKE_BINARY_DIR}/libjpeg-turbo-install)
if (WIN32)
set(_jpeg_lib ${_jpeg_install_dir}/lib/turbojpeg-static.lib)
else ()
set(_jpeg_lib ${_jpeg_install_dir}/lib/libturbojpeg.a)
endif ()
set(_jpeg_cmake_args
-DCMAKE_INSTALL_PREFIX=${_jpeg_install_dir}
-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/WindowsTargetProcessor.cmake
-DENABLE_SHARED=OFF
-DWITH_TURBOJPEG=ON
-DWITH_JAVA=OFF
)
if (CMAKE_TOOLCHAIN_FILE)
get_filename_component(_jpeg_toolchain_file "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE BASE_DIR "${CMAKE_SOURCE_DIR}")
list(APPEND _jpeg_cmake_args -DCMAKE_TOOLCHAIN_FILE=${_jpeg_toolchain_file})
endif ()
set(_jpeg_passthrough_vars
ANDROID_ABI
ANDROID_PLATFORM
CMAKE_BUILD_TYPE
CMAKE_C_COMPILER
CMAKE_C_COMPILER_LAUNCHER
CMAKE_MAKE_PROGRAM
CMAKE_MSVC_RUNTIME_LIBRARY
CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
CMAKE_OSX_ARCHITECTURES
CMAKE_OSX_DEPLOYMENT_TARGET
CMAKE_OSX_SYSROOT
DEPLOYMENT_TARGET
ENABLE_ARC
ENABLE_BITCODE
PLATFORM
)
foreach(_var IN LISTS _jpeg_passthrough_vars)
if (DEFINED ${_var})
list(APPEND _jpeg_cmake_args -D${_var}=${${_var}})
endif ()
endforeach ()
ExternalProject_Add(libjpeg-turbo-ext
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.1.0.tar.gz
URL_HASH SHA256=35fec2e1ddfb05ecf6d93e50bc57c1e54bc81c16d611ddf6eff73fff266d8285
CMAKE_ARGS ${_jpeg_cmake_args}
BUILD_BYPRODUCTS ${_jpeg_lib}
)
file(MAKE_DIRECTORY ${_jpeg_install_dir}/include)
add_library(libjpeg-turbo::turbojpeg-static STATIC IMPORTED GLOBAL)
set_target_properties(libjpeg-turbo::turbojpeg-static PROPERTIES
IMPORTED_LOCATION ${_jpeg_lib}
INTERFACE_INCLUDE_DIRECTORIES ${_jpeg_install_dir}/include
)
add_dependencies(libjpeg-turbo::turbojpeg-static libjpeg-turbo-ext)
endif ()
endif ()
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
# -Wno-multichar: Multi-character constants ('ABCD') are implementation-defined but all compilers
# (CW, GCC, Clang, MSVC) encode them identically in big-endian order.
# For >4-char literals (which GCC/Clang truncate to int), use the MULTI_CHAR() macro.
# -Wdeprecated-declarations: JSystem uses std::iterator, deprecated in C++17
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar -Wno-trigraphs -Wno-deprecated-declarations")
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_RPATH "$ORIGIN")
elseif (APPLE)
add_compile_options(-Wno-declaration-after-statement -Wno-non-pod-varargs)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_RPATH "$ORIGIN")
elseif (MSVC)
add_compile_options(
$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj>
$<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:C,CXX>:/FS>
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-multichar>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-trigraphs>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-declarations>
)
elseif (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
add_compile_options(
$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj>
$<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:C,CXX>:/FS>
)
if (NOT DUSK_BUILD_WARNINGS)
@@ -196,30 +162,34 @@ elseif (MSVC)
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/utf-8>)
endif ()
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_RPATH "$ORIGIN")
elseif (APPLE)
add_compile_options(-Wno-declaration-after-statement -Wno-non-pod-varargs)
set(CMAKE_INSTALL_RPATH "@loader_path")
set(CMAKE_BUILD_RPATH "@loader_path")
endif ()
include(FetchContent)
# Declare all dependencies first so CMake can download them in parallel
message(STATUS "dusklight: Fetching cxxopts")
FetchContent_Declare(cxxopts
URL https://github.com/jarro2783/cxxopts/archive/refs/tags/v3.3.1.tar.gz
URL_HASH SHA256=3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
)
message(STATUS "dusklight: Fetching nlohmann/json")
FetchContent_Declare(json
URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
)
message(STATUS "dusklight: Fetching miniz")
FetchContent_Declare(miniz
URL https://github.com/richgel999/miniz/releases/download/3.0.2/miniz-3.0.2.zip
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
EXCLUDE_FROM_ALL
)
message(STATUS "dusklight: Fetching PicoSHA2")
FetchContent_Declare(picosha2
URL https://github.com/okdshin/PicoSHA2/archive/refs/tags/v1.0.1.tar.gz
URL_HASH SHA256=9983136544234e573fe07cc1a22fdf978ad7979043e7be2e9082f6d4991ff8a8
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
EXCLUDE_FROM_ALL
)
set(_fetch_content_deps cxxopts json miniz)
if (DUSK_ENABLE_CODE_MODS)
set(_fetch_content_deps miniz picosha2)
if (DUSK_HAS_FUNCHOOK)
message(STATUS "dusklight: Fetching funchook")
# cmake/PatchFunchook.cmake patches funchook's cmake/capstone.cmake.in to inject a
# PATCH_COMMAND into capstone's inner ExternalProject. That PATCH_COMMAND runs
@@ -253,30 +223,12 @@ if (DUSK_ENABLE_CODE_MODS)
endif ()
FetchContent_MakeAvailable(${_fetch_content_deps})
if (DUSK_ENABLE_SENTRY_NATIVE)
message(STATUS "dusklight: Fetching sentry-native")
set(SENTRY_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(SENTRY_BACKEND crashpad CACHE STRING "" FORCE)
if (WIN32)
set(SENTRY_TRANSPORT winhttp CACHE STRING "" FORCE)
endif ()
set(SENTRY_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(SENTRY_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(SENTRY_BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(sentry_native
GIT_REPOSITORY https://github.com/getsentry/sentry-native.git
GIT_TAG 0.13.6
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
GIT_SUBMODULES_RECURSE TRUE
)
if (NOT sentry_native_POPULATED)
FetchContent_Populate(sentry_native)
set(_dusk_skip_install_rules ${CMAKE_SKIP_INSTALL_RULES})
set(CMAKE_SKIP_INSTALL_RULES ON)
add_subdirectory(${sentry_native_SOURCE_DIR} ${sentry_native_BINARY_DIR} EXCLUDE_FROM_ALL)
set(CMAKE_SKIP_INSTALL_RULES ${_dusk_skip_install_rules})
endif ()
if (DUSK_HAS_FUNCHOOK AND APPLE)
target_sources(funchook-static PRIVATE src/dusk/mods/loader/code_patch_macos.cpp)
target_include_directories(funchook-static PRIVATE src/dusk/mods/loader)
set_source_files_properties(src/dusk/mods/loader/code_patch_macos.cpp
TARGET_DIRECTORY funchook-static PROPERTIES
COMPILE_OPTIONS "-O2;-fno-sanitize=all;-fno-stack-protector")
endif ()
# Use signed char on ARM to match the original game (and x86)
@@ -285,8 +237,6 @@ if(_arch MATCHES "^(arm|aarch64)" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQU
add_compile_options(-fsigned-char)
endif()
configure_version_header()
include(files.cmake)
# TODO: version handling for res includes
@@ -299,87 +249,29 @@ set(DUSK_PRODUCT_NAME "Dusklight")
set(DUSK_COPYRIGHT "Copyright (C) Twilit Realm contributors")
source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${REL_FILES})
source_group("dusklight" FILES ${DUSK_FILES} ${DUSK_HTTP_BACKEND_FILES})
source_group("dusklight" FILES ${DUSK_FILES})
include(cmake/GameABIConfig.cmake)
find_package(Threads REQUIRED)
set(GAME_LIBS aurora::core aurora::gx aurora::gd aurora::si aurora::vi aurora::pad aurora::mtx aurora::os aurora::dvd
aurora::card freeverb cxxopts::cxxopts absl::flat_hash_map nlohmann_json::nlohmann_json TracyClient fmt::fmt
Threads::Threads zstd::libzstd dusklight_game_headers)
if (DUSK_ENABLE_CODE_MODS)
set(GAME_COMPILE_DEFS DUSK_BUILDING_GAME=1)
set(GAME_LIBS aurora::core aurora::gx aurora::gd aurora::si aurora::vi aurora::pad aurora::mtx aurora::os aurora::dvd aurora::thp
aurora::card borealis::http borealis::cli borealis::crash borealis::data borealis::disc borealis::discord borealis::file_select borealis::io borealis::log borealis::net borealis::presentation borealis::sentry borealis::update borealis::ws freeverb cxxopts::cxxopts absl::flat_hash_map nlohmann_json::nlohmann_json TracyClient fmt::fmt
Threads::Threads zstd::libzstd dusklight_game_headers picosha2 PNG::PNG)
if (DUSK_HAS_FUNCHOOK)
list(APPEND GAME_LIBS funchook-static)
endif ()
if (DUSK_ENABLE_SENTRY_NATIVE)
list(APPEND GAME_LIBS sentry)
list(APPEND GAME_COMPILE_DEFS DUSK_ENABLE_SENTRY_NATIVE=1 SENTRY_BUILD_STATIC=1)
endif ()
if (WIN32)
list(APPEND GAME_LIBS Ws2_32)
if (CMAKE_BUILD_TYPE STREQUAL Debug)
list(APPEND GAME_LIBS dbghelp)
list(APPEND GAME_COMPILE_DEFS DUSK_CRASH_DBGHELP=1)
endif ()
endif ()
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/no_backend.cpp)
if (DUSK_ENABLE_UPDATE_CHECKER)
list(APPEND GAME_COMPILE_DEFS DUSK_ENABLE_UPDATE_CHECKER=1)
if (WIN32)
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/winhttp.cpp)
list(APPEND GAME_LIBS winhttp)
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_WINHTTP=1)
message(STATUS "dusklight: Enabled update checker (WinHTTP)")
elseif (ANDROID)
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/android.cpp)
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_ANDROID=1)
message(STATUS "dusklight: Enabled update checker (Android)")
elseif (APPLE)
find_library(FOUNDATION_FRAMEWORK Foundation REQUIRED)
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/url_session.mm)
set_source_files_properties(src/dusk/http/url_session.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
list(APPEND GAME_LIBS ${FOUNDATION_FRAMEWORK})
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_URLSESSION=1)
message(STATUS "dusklight: Enabled update checker (NSURLSession)")
elseif (CMAKE_SYSTEM_NAME STREQUAL Linux)
find_package(CURL QUIET OPTIONAL_COMPONENTS HTTPS SSL)
if (CURL_FOUND AND CURL_HTTPS_FOUND AND CURL_SSL_FOUND)
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/curl.cpp)
list(APPEND GAME_LIBS CURL::libcurl)
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_LIBCURL=1)
message(STATUS "dusklight: Enabled update checker (libcurl)")
else ()
message(STATUS "dusklight: Disabled update checker (libcurl + HTTPS/SSL not found)")
endif ()
else ()
message(STATUS "dusklight: Disabled update checker (unsupported platform)")
endif ()
endif ()
list(APPEND DUSK_FILES ${DUSK_HTTP_BACKEND_SOURCE})
if (DUSK_MOVIE_SUPPORT)
if (TARGET libjpeg-turbo::turbojpeg-static)
list(APPEND GAME_LIBS libjpeg-turbo::turbojpeg-static)
else ()
list(APPEND GAME_LIBS libjpeg-turbo::turbojpeg)
endif ()
list(APPEND GAME_COMPILE_DEFS MOVIE_SUPPORT=1)
endif ()
set(DUSK_ENABLE_DISCORD_DEFAULT ON)
if (DEFINED DUSK_ENABLE_DISCORD_RPC AND NOT DEFINED DUSK_ENABLE_DISCORD)
set(DUSK_ENABLE_DISCORD_DEFAULT ${DUSK_ENABLE_DISCORD_RPC})
endif ()
option(DUSK_ENABLE_DISCORD "Enable Discord Rich Presence support" ${DUSK_ENABLE_DISCORD_DEFAULT})
if (DUSK_ENABLE_DISCORD AND NOT ANDROID AND NOT IOS AND NOT TVOS)
list(APPEND GAME_COMPILE_DEFS DUSK_DISCORD=1)
endif ()
if (DUSK_ENABLE_CODE_MODS)
list(APPEND GAME_COMPILE_DEFS DUSK_CODE_MODS=1)
endif ()
list(APPEND GAME_COMPILE_DEFS
DUSK_HAS_FUNCHOOK=$<BOOL:${DUSK_HAS_FUNCHOOK}>
DUSK_HAS_PREPATCH=$<BOOL:${DUSK_HAS_PREPATCH}>)
if (DUSK_PACKAGE_INSTALL)
include(GNUInstallDirs)
@@ -435,20 +327,31 @@ if (CMAKE_CXX_LINK_GROUP_USING_RESCAN_SUPPORTED OR CMAKE_LINK_GROUP_USING_RESCAN
set(JSYSTEM_LINK_LIBRARIES "$<LINK_GROUP:RESCAN,${JSYSTEM_LIBRARIES}>")
endif ()
set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES} ${miniz_SOURCE_DIR}/miniz.c)
if(ANDROID)
add_library(dusklight SHARED ${DUSK_FILES})
set_target_properties(dusklight PROPERTIES OUTPUT_NAME main)
else ()
add_executable(dusklight ${DUSK_FILES})
endif ()
set(_dusklight_all_files src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES})
set(DUSK_INTERNAL_FILES ${_dusklight_all_files})
list(FILTER DUSK_INTERNAL_FILES INCLUDE REGEX "^src/dusk/")
set(GAME_FILES ${_dusklight_all_files})
list(FILTER GAME_FILES EXCLUDE REGEX "^src/dusk/")
add_library(dusk_internal OBJECT ${DUSK_INTERNAL_FILES})
if (ENABLE_ASAN)
target_sources(dusklight PRIVATE src/dusk/asan_options.c)
target_sources(dusk_internal PRIVATE src/dusk/asan_options.c)
endif ()
target_compile_definitions(dusk_internal PRIVATE ${GAME_COMPILE_DEFS})
target_include_directories(dusk_internal PRIVATE ${miniz_SOURCE_DIR})
target_link_libraries(dusk_internal PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LIBRARIES})
target_precompile_headers(dusk_internal PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>")
if(ANDROID)
add_library(dusklight SHARED ${GAME_FILES} ${miniz_SOURCE_DIR}/miniz.c)
else ()
add_executable(dusklight ${GAME_FILES} ${miniz_SOURCE_DIR}/miniz.c)
endif ()
borealis_configure_android_application(dusklight)
target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS})
target_include_directories(dusklight PRIVATE ${miniz_SOURCE_DIR})
target_link_libraries(dusklight PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES})
target_link_libraries(dusklight PRIVATE dusk_internal aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES})
target_precompile_headers(dusklight PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>")
if (DUSK_ENABLE_CODE_MODS)
@@ -462,37 +365,89 @@ if (DUSK_ENABLE_CODE_MODS)
setup_symbol_manifest(dusklight)
endif ()
# Hook reliability: guaranteed patchable entries on the game ABI surface, and no identical-code folding.
if (MSVC)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:/hotpatch>)
# Hook reliability: prevent auto-inlining, guarantee patchable function entries,
# and disable identical-code folding for game functions.
if (DUSK_ENABLE_CODE_MODS)
set(DUSK_GAME_ABI_INLINE_OPTIONS)
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS
$<$<COMPILE_LANGUAGE:CXX>:-finline-hint-functions>)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
list(APPEND DUSK_GAME_ABI_INLINE_OPTIONS
$<$<COMPILE_LANGUAGE:CXX>:-flive-patching=inline-clone>
$<$<COMPILE_LANGUAGE:CXX>:-fno-inline-functions>
$<$<COMPILE_LANGUAGE:CXX>:-fno-inline-small-functions>
$<$<COMPILE_LANGUAGE:CXX>:-fno-inline-functions-called-once>
$<$<COMPILE_LANGUAGE:CXX>:-fno-early-inlining>
$<$<COMPILE_LANGUAGE:CXX>:-fno-ipa-cp>
$<$<COMPILE_LANGUAGE:CXX>:-fno-ipa-cp-clone>
$<$<COMPILE_LANGUAGE:CXX>:-fno-ipa-sra>
$<$<COMPILE_LANGUAGE:CXX>:-fno-partial-inlining>)
endif ()
endif ()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
target_link_options(dusklight PRIVATE /FUNCTIONPADMIN:16 /OPT:NOICF)
else ()
target_link_options(dusklight PRIVATE /FUNCTIONPADMIN /OPT:NOICF)
if (DUSK_GAME_ABI_INLINE_OPTIONS)
target_compile_options(dusklight PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS})
foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES)
target_compile_options(${jsystem_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS})
endforeach()
foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx
aurora_os aurora_pad aurora_si aurora_vi)
if (TARGET ${_sdk_lib})
get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED)
if (NOT _sdk_lib_imported)
target_compile_options(${_sdk_lib} PRIVATE ${DUSK_GAME_ABI_INLINE_OPTIONS})
endif ()
endif ()
endforeach ()
endif ()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:-fpatchable-function-entry=2,1>)
else ()
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:-fpatchable-function-entry=10,5>)
if (MSVC)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:/hotpatch>)
endif ()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
target_link_options(dusklight PRIVATE /FUNCTIONPADMIN:16 /OPT:NOICF)
else ()
target_link_options(dusklight PRIVATE /FUNCTIONPADMIN /OPT:NOICF)
endif ()
elseif (CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang|GNU)$")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)$" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:-fpatchable-function-entry=2,1>)
else ()
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:-fpatchable-function-entry=10,4>)
endif ()
endif ()
if (DEFINED DUSK_PATCHABLE_ENTRY_FLAG)
target_compile_options(dusklight PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG})
foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES)
target_compile_options(${jsystem_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG})
endforeach()
foreach(_sdk_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx
aurora_os aurora_pad aurora_si aurora_vi)
if (TARGET ${_sdk_lib})
get_target_property(_sdk_lib_imported ${_sdk_lib} IMPORTED)
if (NOT _sdk_lib_imported)
target_compile_options(${_sdk_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG})
endif ()
endif ()
endforeach ()
endif ()
endif ()
if (DEFINED DUSK_PATCHABLE_ENTRY_FLAG)
target_compile_options(dusklight PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG})
foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES)
target_compile_options(${jsystem_lib} PRIVATE ${DUSK_PATCHABLE_ENTRY_FLAG})
endforeach()
endif ()
if (WIN32)
target_link_libraries(dusklight PRIVATE Psapi)
endif ()
if (APPLE)
# Mods resolve game symbols from the executable at dlopen time.
target_link_options(dusklight PRIVATE -Wl,-export_dynamic)
elseif (UNIX AND NOT ANDROID)
include(cmake/AppleExports.cmake)
setup_apple_exports(dusklight)
elseif (ANDROID)
include(cmake/AndroidExports.cmake)
setup_android_exports(dusklight)
elseif (UNIX)
target_link_options(dusklight PRIVATE -rdynamic)
endif ()
@@ -506,12 +461,6 @@ if (TARGET crashpad_handler)
)
endif ()
if (ANDROID)
# SDLActivity loads SDL_main via dlsym on Android. Since aurora::main is a static
# archive, force an undefined reference so the linker keeps the SDL_main object.
target_link_options(dusklight PRIVATE "-Wl,-u,SDL_main")
endif ()
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
target_link_options(dusklight PRIVATE "-Wl,--build-id=sha1")
target_link_libraries(dusklight PRIVATE dl)
@@ -559,7 +508,15 @@ include(cmake/ModSDK.cmake)
if (DUSK_ENABLE_CODE_MODS AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
add_custom_target(dusklight_mods) # Aggregate target for all in-tree mods
add_subdirectory(tools/mod_template)
add_subdirectory(mods/luau_runtime)
add_subdirectory(mods/template_mod)
add_subdirectory(mods/ao_mod)
add_subdirectory(mods/shadow_mod)
add_subdirectory(mods/window_demo)
add_subdirectory(mods/flow_demo)
add_subdirectory(mods/custom_actor_demo)
add_subdirectory(mods/cosmetics)
add_subdirectory(mods/randomizer)
endif ()
if (APPLE)
@@ -593,8 +550,8 @@ if (APPLE)
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_BUNDLE_NAME ${DUSK_BUNDLE_NAME}
MACOSX_BUNDLE_GUI_IDENTIFIER ${DUSK_BUNDLE_IDENTIFIER}
MACOSX_BUNDLE_BUNDLE_VERSION ${DUSK_VERSION_STRING}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${DUSK_SHORT_VERSION_STRING}
MACOSX_BUNDLE_BUNDLE_VERSION ${BOREALIS_APP_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${BOREALIS_APP_SHORT_VERSION}
MACOSX_BUNDLE_INFO_PLIST ${DUSK_INFO_PLIST}
OUTPUT_NAME Dusklight
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
@@ -604,13 +561,13 @@ if (APPLE)
list(APPEND _apple_bundle_properties
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${DUSK_ENTITLEMENTS})
endif ()
if (NOT IOS AND NOT TVOS)
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
list(APPEND _apple_bundle_properties
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES")
endif ()
set_target_properties(dusklight PROPERTIES ${_apple_bundle_properties})
if (NOT IOS AND NOT TVOS AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
set(_sign_nested_commands)
if (TARGET crashpad_handler)
list(APPEND _sign_nested_commands
@@ -627,21 +584,6 @@ if (APPLE)
endif ()
endif ()
if (APPLE AND NOT IOS AND NOT TVOS)
find_library(APPKIT_FRAMEWORK AppKit REQUIRED)
target_sources(dusklight PRIVATE src/dusk/file_select_macos.mm)
set_source_files_properties(src/dusk/file_select_macos.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
target_link_libraries(dusklight PRIVATE ${APPKIT_FRAMEWORK})
endif ()
if (IOS)
find_library(UIKIT_FRAMEWORK UIKit REQUIRED)
find_library(UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK UniformTypeIdentifiers REQUIRED)
target_sources(dusklight PRIVATE src/dusk/ios/FileSelectDialog.m)
set_source_files_properties(src/dusk/ios/FileSelectDialog.m PROPERTIES COMPILE_FLAGS -fobjc-arc)
target_link_libraries(dusklight PRIVATE ${UIKIT_FRAMEWORK} ${UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK})
endif ()
include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake)
aurora_copy_runtime_dlls(dusklight)
+18 -43
View File
@@ -22,30 +22,18 @@
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL"
}
},
{
"name": "release",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL",
"CMAKE_INTERPROCEDURAL_OPTIMIZATION": {
"type": "BOOL",
"value": true
}
}
},
{
"name": "ci",
"hidden": true,
"cacheVariables": {
"CMAKE_C_COMPILER_LAUNCHER": "sccache",
"CMAKE_CXX_COMPILER_LAUNCHER": "sccache",
"DUSK_ENABLE_SENTRY_NATIVE": {
"BOREALIS_ENABLE_SENTRY": {
"type": "BOOL",
"value": true
},
"DUSK_SENTRY_DSN": "$env{SENTRY_DSN}",
"DUSK_SENTRY_ENVIRONMENT": "production",
"BOREALIS_SENTRY_DSN": "$env{SENTRY_DSN}",
"BOREALIS_SENTRY_ENVIRONMENT": "production",
"Rust_RUSTUP_INSTALL_MISSING_TARGET": {
"type": "BOOL",
"value": true
@@ -72,11 +60,7 @@
"type": "BOOL",
"value": false
},
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install",
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
}
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
@@ -163,10 +147,6 @@
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install",
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL",
"value": true
@@ -208,17 +188,13 @@
{
"name": "windows-arm64-msvc",
"displayName": "Windows ARM64 (MSVC)",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"inherits": [
"windows-msvc"
],
"architecture": {
"value": "arm64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [
@@ -270,11 +246,7 @@
"type": "BOOL",
"value": false
},
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install",
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
}
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
@@ -330,6 +302,10 @@
"type": "BOOL",
"value": false
},
"ENABLE_VISIBILITY": {
"type": "BOOL",
"value": true
},
"Rust_CARGO_TARGET": "aarch64-apple-ios",
"BUILD_SHARED_LIBS": {
"type": "BOOL",
@@ -370,6 +346,10 @@
"type": "BOOL",
"value": false
},
"ENABLE_VISIBILITY": {
"type": "BOOL",
"value": true
},
"Rust_CARGO_TARGET": "aarch64-apple-tvos",
"Rust_TOOLCHAIN": "nightly",
"BUILD_SHARED_LIBS": {
@@ -406,10 +386,6 @@
"type": "BOOL",
"value": false
},
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL",
"value": true
@@ -445,11 +421,10 @@
"hidden": true,
"inherits": [
"android-base",
"ci",
"release"
"ci"
],
"cacheVariables": {
"DUSK_ENABLE_SENTRY_NATIVE": {
"BOREALIS_ENABLE_SENTRY": {
"type": "BOOL",
"value": false
}
+7 -1
View File
@@ -14,6 +14,9 @@ Dusklight is a reverse-engineered reimplementation of Twilight Princess.
It aims to be as accurate as possible to the original while also providing new options, enhancements, and tools to customize your experience.
> [!IMPORTANT]
> Dusklight's official website is https://twilitrealm.dev/, any other website is not affiliated and may be promoting AI-generated misinformation.
# Setup
> [!IMPORTANT]
@@ -26,7 +29,10 @@ It aims to be as accurate as possible to the original while also providing new o
You must dump your own copy of the game. Please see [this article](https://wiki.dolphin-emu.org/index.php?title=Ripping_Games) for instructions. After dumping, you can use a program like [Dolphin](https://dolphin-emu.org/) or [nodtool](https://github.com/encounter/nod/releases) to convert the `.iso` to `.rvz` to save space.
Currently, only the GameCube USA and EUR releases are supported. Support for other versions of the game is planned in the future.
Dusklight currently supports all commercial discs except for Wii's Korean release.
> [!NOTE]
> Dusklight is based on the [Twilight Princess decompilation](https://github.com/zeldaret/tp), which is currently only matching for GameCube. As a result, even when playing Dusklight with a Wii disc, you will be presented with the GameCube version's HUD and certain other specificities.
### 2. Install Dusklight
+1 -1
View File
@@ -23,5 +23,5 @@ cp -r platforms/freedesktop/{16x16,32x32,48x48,64x64,128x128,256x256,512x512,102
cp platforms/freedesktop/dev.twilitrealm.dusk.desktop build/appdir/usr/share/applications
cd build/install
VERSION="$DUSK_VERSION" NO_STRIP=1 "$linuxdeploy" \
VERSION="$APP_VERSION" NO_STRIP=1 "$linuxdeploy" \
-l "$lib_dir/libusb-1.0.so" --appdir "$build_dir/appdir" --output appimage
+61
View File
@@ -0,0 +1,61 @@
include_guard(GLOBAL)
get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
# Android mod linking: symgen scans and filters the game's exports, generating a version script used for the executable
# link step, and generates a shared object stub that mods can link against without having to build the whole game.
function(setup_android_exports target)
include("${_dir}/SymbolManifest.cmake")
ensure_symgen(TRUE)
add_dependencies(${target} symgen)
set(_rsp_lines "$<TARGET_OBJECTS:${target}>")
foreach (_lib IN LISTS JSYSTEM_LIBRARIES)
list(APPEND _rsp_lines "$<TARGET_FILE:${_lib}>")
endforeach ()
list(JOIN _rsp_lines "\n" _rsp_content)
set(_rsp "${CMAKE_BINARY_DIR}/dusklight_exports_input.rsp")
file(GENERATE OUTPUT "${_rsp}" CONTENT "${_rsp_content}")
set(_sdk_args)
foreach (_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx
aurora_os aurora_pad aurora_si aurora_vi)
if (TARGET ${_lib})
list(APPEND _sdk_args --sdk-lib "$<TARGET_FILE:${_lib}>")
endif ()
endforeach ()
if (TARGET dawn::webgpu_dawn)
get_target_property(_dawn_type dawn::webgpu_dawn TYPE)
if (_dawn_type STREQUAL "STATIC_LIBRARY")
list(APPEND _sdk_args --sdk-lib "$<TARGET_FILE:dawn::webgpu_dawn>")
endif ()
endif ()
set(_vscript "${CMAKE_BINARY_DIR}/dusklight_exports.ver")
add_custom_command(TARGET ${target} PRE_LINK
COMMAND "${SYMGEN_EXE}" exports
"@${_rsp}"
--out "${_vscript}"
--format version-script
--exclude cmake_pch
--exclude miniz
# Resolved from the Java side; the SDL ones live in the statically-linked
# SDL archive, outside the provenance scan.
--extra-sym JNI_OnLoad
--extra-sym SDL_main
--extra-sym "Java_*"
${_sdk_args}
COMMENT "Generating dusklight exports"
VERBATIM)
target_link_options(${target} PRIVATE "-Wl,--version-script=${_vscript}")
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _arch)
set(_stub "${CMAKE_BINARY_DIR}/stub-android-${_arch}.so")
add_custom_command(TARGET ${target} POST_BUILD
COMMAND "${SYMGEN_EXE}" stub -f elf "$<TARGET_FILE:${target}>" -o "${_stub}"
--soname "$<TARGET_FILE_NAME:${target}>" --arch "${_arch}"
BYPRODUCTS "${_stub}"
COMMENT "Generating dusklight link stub"
VERBATIM)
install(FILES "${_stub}" DESTINATION sdk)
endfunction()
+88
View File
@@ -0,0 +1,88 @@
include_guard(GLOBAL)
get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
# Apple mod linking: symgen scans and filters the game's exports, generating an exports list used for the executable
# link step, and generates a MH_EXECUTE Mach-O stub that mods can link against without having to build the whole game.
function(setup_apple_exports target)
include("${_dir}/SymbolManifest.cmake")
ensure_symgen(TRUE)
set(_symgen "${SYMGEN_EXE}")
add_dependencies(${target} symgen)
set(_config_subdir "")
if (CMAKE_CONFIGURATION_TYPES)
set(_config_subdir "$<CONFIG>/")
endif ()
set(_rsp_lines "$<TARGET_OBJECTS:${target}>")
foreach (_lib IN LISTS JSYSTEM_LIBRARIES)
list(APPEND _rsp_lines "$<TARGET_FILE:${_lib}>")
endforeach ()
list(JOIN _rsp_lines "\n" _rsp_content)
set(_rsp "${CMAKE_BINARY_DIR}/${_config_subdir}dusklight_exports_input.rsp")
file(GENERATE OUTPUT "${_rsp}" CONTENT "${_rsp_content}")
set(_sdk_args)
foreach (_lib aurora_card aurora_core aurora_dvd aurora_gd aurora_gx aurora_mtx
aurora_os aurora_pad aurora_si aurora_vi)
if (TARGET ${_lib})
list(APPEND _sdk_args --sdk-lib "$<TARGET_FILE:${_lib}>")
endif ()
endforeach ()
# Dawn is linked statically on Apple; mods reach wgpu* through the executable.
if (TARGET dawn::webgpu_dawn)
get_target_property(_dawn_type dawn::webgpu_dawn TYPE)
if (_dawn_type STREQUAL "STATIC_LIBRARY")
list(APPEND _sdk_args --sdk-lib "$<TARGET_FILE:dawn::webgpu_dawn>")
endif ()
endif ()
set(_exp "${CMAKE_BINARY_DIR}/${_config_subdir}dusklight_exports.exp")
add_custom_command(TARGET ${target} PRE_LINK
COMMAND "${_symgen}" exports
"@${_rsp}"
--out "${_exp}"
--exclude cmake_pch
--exclude miniz
${_sdk_args}
COMMENT "Generating dusklight exports"
VERBATIM)
target_link_options(${target} PRIVATE -Xlinker -exported_symbols_list -Xlinker "${_exp}")
# Generate the stub executable mods link against via -bundle_loader.
set(_stub_args)
if (IOS)
set(_stub_platform "ios")
list(APPEND _stub_args --platform ios)
elseif (TVOS)
set(_stub_platform "tvos")
list(APPEND _stub_args --platform tvos)
else ()
set(_stub_platform "macos")
endif ()
if (CMAKE_OSX_DEPLOYMENT_TARGET)
list(APPEND _stub_args --min-os "${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif ()
if (CMAKE_OSX_ARCHITECTURES)
set(_archs "${CMAKE_OSX_ARCHITECTURES}")
else ()
set(_archs "${CMAKE_SYSTEM_PROCESSOR}")
endif ()
set(_arch_names "")
foreach (_arch IN LISTS _archs)
string(TOLOWER "${_arch}" _arch)
list(APPEND _stub_args --arch "${_arch}")
list(APPEND _arch_names "${_arch}")
endforeach ()
list(JOIN _arch_names "_" _arch_name)
set(_stub "${CMAKE_BINARY_DIR}/${_config_subdir}dusklight-stub")
add_custom_command(TARGET ${target} POST_BUILD
COMMAND "${_symgen}" stub -f macho "${_exp}" -o "${_stub}" ${_stub_args}
BYPRODUCTS "${_stub}"
COMMENT "Generating dusklight link stub"
VERBATIM)
install(FILES "${_stub}" DESTINATION sdk RENAME "stub-${_stub_platform}-${_arch_name}")
endfunction()
+10
View File
@@ -0,0 +1,10 @@
# Copies a mod asset directory for packaging, skipping dotfiles and dot-directories
# (.gitkeep, .DS_Store, ...). Usage: cmake -DSRC=<dir> -DDST=<dir> -P CopyModAssets.cmake
file(MAKE_DIRECTORY "${DST}")
file(GLOB_RECURSE _files RELATIVE "${SRC}" "${SRC}/*")
foreach (_file IN LISTS _files)
if (NOT _file MATCHES "(^|/)\\.")
get_filename_component(_dir "${_file}" DIRECTORY)
file(COPY "${SRC}/${_file}" DESTINATION "${DST}/${_dir}")
endif ()
endforeach ()
-121
View File
@@ -1,121 +0,0 @@
# Version detection shared by the main build and the mod SDK (sdk/CMakeLists.txt)
include_guard(GLOBAL)
get_filename_component(_DUSK_VERSION_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
set(DUSK_SENTRY_DSN "" CACHE STRING "Sentry DSN")
set(DUSK_SENTRY_ENVIRONMENT "development" CACHE STRING "Sentry environment")
set(DUSK_VERSION_OVERRIDE "" CACHE STRING "Override version string (skips git detection and format validation)")
macro(detect_version)
if (DUSK_VERSION_OVERRIDE)
set(DUSK_WC_DESCRIBE "${DUSK_VERSION_OVERRIDE}")
set(DUSK_VERSION_STRING "0.0.0.0")
set(DUSK_SHORT_VERSION_STRING "0.0.0")
set(DUSK_VERSION_CODE "1")
set(DUSK_WC_REVISION "")
set(DUSK_WC_BRANCH "")
set(DUSK_WC_DATE "")
message(STATUS "Dusklight version overridden to ${DUSK_WC_DESCRIBE}")
else ()
# obtain revision info from git
find_package(Git)
if (GIT_FOUND)
# make sure version information gets re-run when the current Git HEAD changes
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} rev-parse --git-path HEAD
OUTPUT_VARIABLE dusk_git_head_filename
OUTPUT_STRIP_TRAILING_WHITESPACE)
get_filename_component(dusk_git_head_filename "${dusk_git_head_filename}" ABSOLUTE BASE_DIR "${_DUSK_VERSION_ROOT}")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${dusk_git_head_filename}")
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} rev-parse --symbolic-full-name HEAD
OUTPUT_VARIABLE dusk_git_head_symbolic
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT}
COMMAND ${GIT_EXECUTABLE} rev-parse --git-path ${dusk_git_head_symbolic}
OUTPUT_VARIABLE dusk_git_head_symbolic_filename
OUTPUT_STRIP_TRAILING_WHITESPACE)
get_filename_component(dusk_git_head_symbolic_filename "${dusk_git_head_symbolic_filename}" ABSOLUTE BASE_DIR "${_DUSK_VERSION_ROOT}")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${dusk_git_head_symbolic_filename}")
# defines DUSK_WC_REVISION
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE DUSK_WC_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DUSK_WC_DESCRIBE
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} describe --tags --long --dirty --match "v*"
OUTPUT_VARIABLE DUSK_WC_DESCRIBE
OUTPUT_STRIP_TRAILING_WHITESPACE)
# remove the git hash, then collapse a clean "-0" suffix only
string(REGEX REPLACE "-[^-]+(-dirty|)$" "\\1" DUSK_WC_DESCRIBE "${DUSK_WC_DESCRIBE}")
string(REGEX REPLACE "-0$" "" DUSK_WC_DESCRIBE "${DUSK_WC_DESCRIBE}")
# defines DUSK_WC_BRANCH
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE DUSK_WC_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DUSK_WC_DATE
execute_process(WORKING_DIRECTORY ${_DUSK_VERSION_ROOT} COMMAND ${GIT_EXECUTABLE} log -1 --format=%ad
OUTPUT_VARIABLE DUSK_WC_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)
else ()
message(STATUS "Unable to find git, commit information will not be available")
endif ()
if (DUSK_WC_DESCRIBE MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)([-+].*)?$")
set(DUSK_SHORT_VERSION_STRING "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
set(_ver_major ${CMAKE_MATCH_1})
set(_ver_minor ${CMAKE_MATCH_2})
set(_ver_patch ${CMAKE_MATCH_3})
set(DUSK_VERSION_TWEAK "0")
if (DUSK_WC_DESCRIBE MATCHES "^v[0-9]+\\.[0-9]+\\.[0-9]+-([0-9]+)(-dirty)?$")
set(DUSK_VERSION_TWEAK "${CMAKE_MATCH_1}")
elseif (DUSK_WC_DESCRIBE MATCHES "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9A-Za-z.-]+-([0-9]+)(-dirty)?$")
set(DUSK_VERSION_TWEAK "${CMAKE_MATCH_1}")
endif ()
set(DUSK_VERSION_STRING "${DUSK_SHORT_VERSION_STRING}.${DUSK_VERSION_TWEAK}")
if (DUSK_VERSION_TWEAK GREATER 999)
set(_tweak 999)
else ()
set(_tweak ${DUSK_VERSION_TWEAK})
endif ()
# encoding: major*1e7 + minor*1e5 + patch*1e3 + tweak; collision-free for major<210, minor<100, patch<100, tweak<=999
math(EXPR DUSK_VERSION_CODE
"${_ver_major} * 10000000 + ${_ver_minor} * 100000 + ${_ver_patch} * 1000 + ${_tweak}")
else ()
set(DUSK_WC_DESCRIBE "UNKNOWN-VERSION")
set(DUSK_VERSION_STRING "0.0.0.0")
set(DUSK_SHORT_VERSION_STRING "0.0.0")
set(DUSK_VERSION_CODE "1")
endif ()
endif ()
# Add version information to CI environment variables
if (DEFINED ENV{GITHUB_ENV})
file(APPEND "$ENV{GITHUB_ENV}" "DUSK_VERSION=${DUSK_WC_DESCRIBE}\n")
file(APPEND "$ENV{GITHUB_ENV}" "DUSK_VERSION_CODE=${DUSK_VERSION_CODE}\n")
endif ()
message(STATUS "Dusklight version set to ${DUSK_WC_DESCRIBE}")
endmacro()
# Sets PLATFORM_NAME and configures version.h into the caller's binary dir.
macro(configure_version_header)
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
set(PLATFORM_NAME win32)
elseif (CMAKE_SYSTEM_NAME STREQUAL Darwin)
if (IOS)
set(PLATFORM_NAME ios)
elseif (TVOS)
set(PLATFORM_NAME tvos)
else ()
set(PLATFORM_NAME macos)
endif ()
else ()
string(TOLOWER CMAKE_SYSTEM_NAME PLATFORM_NAME)
endif ()
configure_file(${_DUSK_VERSION_ROOT}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
endmacro()
+46 -5
View File
@@ -9,19 +9,60 @@ if (ANDROID)
list(APPEND _game_compile_defs TARGET_ANDROID=1)
endif ()
set(_game_include_dirs
# Public game headers
set(_game_abi_include_dirs
${_game_root}/include
${_game_root}/src
${_game_root}/assets/GZ2E01 # TODO: make this dynamic if needed?
${_game_root}/assets/GZ2E01
${_game_root}/libs/JSystem/include
${_game_root}/libs
${_game_root}/extern/aurora/include/dolphin
${_game_root}/extern/aurora/include
${_game_root}/sdk/include
)
# Internal game headers
set(_game_include_dirs
${_game_abi_include_dirs}
${_game_root}/src
${_game_root}/extern
${CMAKE_CURRENT_BINARY_DIR}
)
# Interface target for mods and sub-projects to inherit game headers/defines.
# Mod API, including services
add_library(dusklight_mod_api INTERFACE)
target_include_directories(dusklight_mod_api INTERFACE ${_game_root}/sdk/include)
# Full internal headers used to build the game
add_library(dusklight_game_headers INTERFACE)
target_include_directories(dusklight_game_headers INTERFACE ${_game_include_dirs})
target_compile_definitions(dusklight_game_headers INTERFACE ${_game_compile_defs})
# Public game ABI for mods
add_library(dusklight_game_abi_headers INTERFACE)
target_include_directories(dusklight_game_abi_headers INTERFACE ${_game_abi_include_dirs})
target_compile_definitions(dusklight_game_abi_headers INTERFACE ${_game_compile_defs})
# Mod feature targets
add_library(dusklight_mod_feature_game INTERFACE)
target_link_libraries(dusklight_mod_feature_game INTERFACE
dusklight_mod_api
dusklight_game_abi_headers)
target_compile_definitions(dusklight_mod_feature_game INTERFACE DUSK_MOD_FEATURE_GAME=1)
# Game headers assume global.h comes first in the translation unit (it defines DUSK_GAME_DATA
# and friends); force-include it so mods don't depend on include order.
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
target_compile_options(dusklight_mod_feature_game INTERFACE
"$<$<COMPILE_LANGUAGE:CXX>:/FIglobal.h>")
else ()
target_compile_options(dusklight_mod_feature_game INTERFACE
"$<$<COMPILE_LANGUAGE:CXX>:SHELL:-include global.h>")
endif ()
target_sources(dusklight_mod_feature_game INTERFACE
${_game_root}/sdk/src/game_feature.cpp)
add_library(dusklight_mod_feature_webgpu INTERFACE)
target_link_libraries(dusklight_mod_feature_webgpu INTERFACE dusklight_mod_api)
target_compile_definitions(dusklight_mod_feature_webgpu INTERFACE DUSK_MOD_FEATURE_WEBGPU=1)
add_library(dusklight_mod_feature_fmt INTERFACE)
target_link_libraries(dusklight_mod_feature_fmt INTERFACE dusklight_mod_api)
target_compile_definitions(dusklight_mod_feature_fmt INTERFACE DUSK_MOD_FEATURE_FMT=1)
+5
View File
@@ -0,0 +1,5 @@
_mod_ctx
_mod_initialize
_mod_meta
_mod_shutdown
_mod_update
+10
View File
@@ -0,0 +1,10 @@
{
global:
mod_ctx;
mod_initialize;
mod_meta;
mod_shutdown;
mod_update;
local:
*;
};
+346 -89
View File
@@ -1,8 +1,11 @@
# add_mod(<target> SOURCES <file>... MOD_JSON <mod.json> [RES_DIR <res>] [OVERLAY_DIR <overlay>]
# add_mod(<target> [FEATURES <feature>...] SOURCES <file>... MOD_JSON <mod.json>
# [RUNTIME_LIBRARIES <file>...] [RES_DIR <res>] [OVERLAY_DIR <overlay>]
# [TEXTURES_DIR <textures>] [OUTPUT_DIR <dir>] [BUNDLE])
set(DUSK_MODS_OUTPUT_DIR "${CMAKE_BINARY_DIR}/mods" CACHE PATH "Directory to write mod packages into")
set(DUSKLIGHT_SDK_STUB_URL "https://github.com/encounter/dusklight/releases/download/sdk"
CACHE STRING "Base URL for game link stubs downloaded by out-of-tree mod builds")
function(_mod_lib_name out_var)
function(_mod_lib_info out_platform_var out_name_var)
set(_arch "${CMAKE_SYSTEM_PROCESSOR}")
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
list(LENGTH CMAKE_OSX_ARCHITECTURES _count)
@@ -10,20 +13,62 @@ function(_mod_lib_name out_var)
message(FATAL_ERROR "add_mod: universal binaries are not supported")
endif ()
set(_arch "${CMAKE_OSX_ARCHITECTURES}")
elseif (WIN32)
set(_arch_id "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
if (NOT _arch_id)
set(_arch_id "${CMAKE_C_COMPILER_ARCHITECTURE_ID}")
endif ()
if (_arch_id MATCHES "^ARM64(EC)?$")
set(_arch "arm64")
elseif (_arch_id STREQUAL "x64")
set(_arch "amd64")
elseif (_arch_id STREQUAL "X86")
set(_arch "x86")
endif ()
endif ()
string(TOLOWER "${CMAKE_SYSTEM_NAME}" _platform)
if (_platform STREQUAL "darwin")
set(_platform "macos")
endif ()
string(TOLOWER "${_arch}" _arch)
if (_arch MATCHES "^(i[3-6]86|x86)$")
set(_arch "x86")
endif ()
if (WIN32)
set(_ext ".dll")
elseif (APPLE)
set(_ext ".dylib")
else ()
set(_ext ".so")
endif ()
set(${out_var} "${_platform}-${_arch}${_ext}" PARENT_SCOPE)
set(${out_platform_var} "${_platform}-${_arch}" PARENT_SCOPE)
set(${out_name_var} "mod${_ext}" PARENT_SCOPE)
endfunction()
# For out-of-tree builds without a game binary: download the version-independent link stub
# (generated by symgen) for the target platform.
function(_mod_download_link_stub out_var)
_mod_lib_info(_platform _lib_name)
if (WIN32)
set(_asset "${_platform}.lib")
elseif (ANDROID)
set(_asset "stub-${_platform}.so")
else ()
set(_asset "stub-${_platform}")
endif ()
set(_stub "${CMAKE_BINARY_DIR}/dusklight-sdk-stubs/${_asset}")
if (NOT EXISTS "${_stub}")
message(STATUS "Mod SDK: downloading link stub ${_asset}")
file(DOWNLOAD "${DUSKLIGHT_SDK_STUB_URL}/${_asset}" "${_stub}.tmp" STATUS _status)
list(GET _status 0 _code)
if (NOT _code EQUAL 0)
list(GET _status 1 _error)
file(REMOVE "${_stub}.tmp")
message(FATAL_ERROR
"Mod SDK: failed to download ${DUSKLIGHT_SDK_STUB_URL}/${_asset}: ${_error}\n"
"Set DUSK_GAME_EXE to a game binary or link stub to skip the download.")
endif ()
file(RENAME "${_stub}.tmp" "${_stub}")
endif ()
set(${out_var} "${_stub}" PARENT_SCOPE)
endfunction()
function(_mod_resolve_source_path out_var path)
@@ -41,11 +86,62 @@ function(_mod_collect_assets out_var dir)
endif ()
file(GLOB_RECURSE _files CONFIGURE_DEPENDS LIST_DIRECTORIES false "${dir}/*")
set(${out_var} ${_files} PARENT_SCOPE)
# Dotfiles (.gitkeep, .DS_Store, ...) are not packaged; see CopyModAssets.cmake.
set(_assets "")
foreach (_file IN LISTS _files)
file(RELATIVE_PATH _rel "${dir}" "${_file}")
if (NOT _rel MATCHES "(^|/)\\.")
list(APPEND _assets "${_file}")
endif ()
endforeach ()
set(${out_var} ${_assets} PARENT_SCOPE)
endfunction()
function(_mod_add_webgpu_headers target_name)
if (NOT TARGET dawn::dawncpp_headers AND NOT TARGET dawn::webgpu_dawn)
include("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../extern/aurora/cmake/AuroraDependencyVersions.cmake")
set(AURORA_DAWN_PROVIDER "package" CACHE STRING "How to provide Dawn for the mod SDK")
include("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../extern/aurora/cmake/AuroraDawnProvider.cmake")
endif ()
if (TARGET dawn::dawncpp_headers)
target_link_libraries(${target_name} PRIVATE dawn::dawncpp_headers)
elseif (TARGET dawn::webgpu_dawn)
target_link_libraries(${target_name} PRIVATE dawn::webgpu_dawn)
else ()
message(FATAL_ERROR "add_mod: FEATURES webgpu could not provide WebGPU headers")
endif ()
endfunction()
function(_mod_add_fmt target_name)
if (NOT TARGET fmt::fmt-header-only)
find_package(fmt 11 CONFIG QUIET GLOBAL)
endif ()
if (NOT TARGET fmt::fmt-header-only)
include(FetchContent)
message(STATUS "Mod SDK: fetching fmt")
# Keep the fallback version in sync with extern/aurora/extern/CMakeLists.txt.
FetchContent_Declare(fmt
URL https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz
URL_HASH SHA256=ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
EXCLUDE_FROM_ALL)
FetchContent_MakeAvailable(fmt)
endif ()
if (NOT TARGET fmt::fmt-header-only)
message(FATAL_ERROR "add_mod: FEATURES fmt could not provide fmt::fmt-header-only")
endif ()
target_link_libraries(${target_name} PRIVATE fmt::fmt-header-only)
endfunction()
function(add_mod target_name)
cmake_parse_arguments(ARG "BUNDLE" "MOD_JSON;RES_DIR;OVERLAY_DIR;TEXTURES_DIR;OUTPUT_DIR" "SOURCES" ${ARGN})
cmake_parse_arguments(ARG "BUNDLE" "MOD_JSON;RES_DIR;OVERLAY_DIR;TEXTURES_DIR;OUTPUT_DIR"
"SOURCES;RUNTIME_LIBRARIES;FEATURES" ${ARGN})
if (ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "add_mod: unknown arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif ()
if (NOT ARG_MOD_JSON)
message(FATAL_ERROR "add_mod: MOD_JSON is required")
endif ()
@@ -54,80 +150,156 @@ function(add_mod target_name)
message(FATAL_ERROR "add_mod: MOD_JSON does not exist: ${_mod_json}")
endif ()
add_library(${target_name} SHARED ${ARG_SOURCES})
_mod_lib_name(_lib_name)
set_target_properties(${target_name} PROPERTIES
PREFIX ""
C_VISIBILITY_PRESET hidden
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
WINDOWS_EXPORT_ALL_SYMBOLS OFF)
target_compile_features(${target_name} PRIVATE cxx_std_20)
target_link_libraries(${target_name} PRIVATE dusklight_game_headers)
if (NOT TARGET dusklight)
# Apply global compile options for out-of-tree mod builds
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
target_compile_options(${target_name} PRIVATE
-Wno-multichar -Wno-trigraphs -Wno-deprecated-declarations)
elseif (APPLE)
target_compile_options(${target_name} PRIVATE
-Wno-declaration-after-statement -Wno-non-pod-varargs)
elseif (MSVC)
target_compile_options(${target_name} PRIVATE
"$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj>"
"$<$<COMPILE_LANGUAGE:C,CXX>:/utf-8>")
set(_supported_features fmt game webgpu)
set(_features "")
foreach (_feature IN LISTS ARG_FEATURES)
list(FIND _supported_features "${_feature}" _feature_index)
if (_feature_index EQUAL -1)
list(JOIN _supported_features ", " _supported_features_text)
message(FATAL_ERROR
"add_mod: unknown feature '${_feature}' (supported: ${_supported_features_text})")
endif ()
# Use signed char on ARM to match the original game (and x86)
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _mod_arch)
if (_mod_arch MATCHES "^(arm|aarch64)" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
target_compile_options(${target_name} PRIVATE -fsigned-char)
list(FIND _features "${_feature}" _duplicate_index)
if (NOT _duplicate_index EQUAL -1)
message(FATAL_ERROR "add_mod: duplicate feature '${_feature}'")
endif ()
list(APPEND _features "${_feature}")
endforeach ()
if (_features AND NOT ARG_SOURCES)
message(FATAL_ERROR "add_mod: FEATURES requires SOURCES")
endif ()
if (APPLE)
# Game symbols resolve against the host executable at dlopen time.
target_link_options(${target_name} PRIVATE -undefined dynamic_lookup)
elseif (ANDROID)
if (TARGET dusklight)
target_link_libraries(${target_name} PRIVATE dusklight)
elseif (DUSK_GAME_SOLIB)
target_link_libraries(${target_name} PRIVATE "${DUSK_GAME_SOLIB}")
else ()
message(FATAL_ERROR "add_mod: DUSK_GAME_SOLIB is not set (libmain.so)")
set(_has_lib FALSE)
set(_needs_host_link FALSE)
set(_lib_platform "")
set(_lib_name "")
if (ARG_SOURCES)
set(_has_lib TRUE)
add_library(${target_name} MODULE ${ARG_SOURCES})
_mod_lib_info(_lib_platform _lib_name)
set_target_properties(${target_name} PROPERTIES
PREFIX ""
C_VISIBILITY_PRESET hidden
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
WINDOWS_EXPORT_ALL_SYMBOLS OFF)
target_compile_features(${target_name} PRIVATE cxx_std_20)
target_link_libraries(${target_name} PRIVATE dusklight_mod_api)
if (APPLE)
set(_mod_exports "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ModExports.exp")
target_link_options(${target_name} PRIVATE
-Xlinker -exported_symbols_list -Xlinker "${_mod_exports}")
set_property(TARGET ${target_name} APPEND PROPERTY LINK_DEPENDS "${_mod_exports}")
elseif (UNIX)
set(_mod_exports "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ModExports.ver")
target_link_options(${target_name} PRIVATE
"-Wl,--version-script=${_mod_exports}"
-Wl,--no-undefined-version)
set_property(TARGET ${target_name} APPEND PROPERTY LINK_DEPENDS "${_mod_exports}")
endif ()
elseif (UNIX)
target_link_options(${target_name} PRIVATE -Wl,--allow-shlib-undefined)
elseif (WIN32)
# Link against the generated import library (game ABI surface). Function calls
# resolve through import thunks. Data is toolchain dependent:
# - clang-cl: lld's mingw mode auto-imports data references, fixed up at load by
# the mod SDK's pseudo-relocation runtime (pseudo_reloc.cpp).
# - cl (MSVC): only DUSK_GAME_DATA-annotated data is reachable. Un-annotated
# references fail to link.
if (NOT DUSK_GAME_IMPLIB)
message(FATAL_ERROR "add_mod: DUSK_GAME_IMPLIB is not set.")
endif ()
target_link_libraries(${target_name} PRIVATE "${DUSK_GAME_IMPLIB}")
set_target_properties(${target_name} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
target_compile_definitions(${target_name} PRIVATE _ITERATOR_DEBUG_LEVEL=0)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${target_name} PRIVATE "$<$<COMPILE_LANGUAGE:C,CXX>:/clang:-mcmodel=large>")
target_sources(${target_name} PRIVATE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../sdk/pseudo_reloc.cpp")
# lld mingw mode rewrites /DEFAULTLIB directives to -l style and skips %LIB%, so
# the CRT libraries and search paths are spelled out explicitly.
target_link_options(${target_name} PRIVATE -lldmingw /nodefaultlib /INCREMENTAL:NO)
target_link_libraries(${target_name} PRIVATE
msvcrt.lib msvcprt.lib vcruntime.lib ucrt.lib
oldnames.lib uuid.lib kernel32.lib user32.lib)
set(_lib_dirs "$ENV{LIB}")
if ("${_lib_dirs}" STREQUAL "")
message(FATAL_ERROR "add_mod: %LIB% is empty; configure from a VS dev shell")
foreach (_feature IN LISTS _features)
target_link_libraries(${target_name} PRIVATE dusklight_mod_feature_${_feature})
if (_feature STREQUAL "webgpu")
_mod_add_webgpu_headers(${target_name})
endif ()
if (_feature STREQUAL "fmt")
_mod_add_fmt(${target_name})
endif ()
if (_feature STREQUAL "game" OR _feature STREQUAL "webgpu")
set(_needs_host_link TRUE)
endif ()
endforeach ()
if (NOT TARGET dusklight)
# Apply global compile options for out-of-tree mod builds
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
target_compile_options(${target_name} PRIVATE
-Wno-multichar -Wno-trigraphs -Wno-deprecated-declarations)
elseif (APPLE)
target_compile_options(${target_name} PRIVATE
-Wno-declaration-after-statement -Wno-non-pod-varargs)
elseif (MSVC)
target_compile_options(${target_name} PRIVATE
"$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj>"
"$<$<COMPILE_LANGUAGE:C,CXX>:/utf-8>")
endif ()
# Use signed char on ARM to match the original game (and x86)
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _mod_arch)
if (_mod_arch MATCHES "^(arm|aarch64)" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
target_compile_options(${target_name} PRIVATE -fsigned-char)
endif ()
foreach (_libdir IN LISTS _lib_dirs)
target_link_options(${target_name} PRIVATE "/libpath:${_libdir}")
endforeach ()
endif ()
if (APPLE)
if (_needs_host_link)
if (TARGET dusklight)
set(_game_exe "$<TARGET_FILE:dusklight>")
add_dependencies(${target_name} dusklight)
elseif (DUSK_GAME_EXE)
_mod_resolve_source_path(_game_exe "${DUSK_GAME_EXE}")
else ()
_mod_download_link_stub(_game_exe)
endif ()
target_link_options(${target_name} PRIVATE
-Xlinker -bundle_loader -Xlinker "${_game_exe}")
set_property(TARGET ${target_name} APPEND PROPERTY LINK_DEPENDS "${_game_exe}")
endif ()
set_target_properties(${target_name} PROPERTIES
BUILD_RPATH "@loader_path"
INSTALL_RPATH "@loader_path")
elseif (ANDROID)
if (_needs_host_link)
if (TARGET dusklight)
target_link_libraries(${target_name} PRIVATE dusklight)
else ()
if (DUSK_GAME_EXE)
_mod_resolve_source_path(_game_lib "${DUSK_GAME_EXE}")
else ()
_mod_download_link_stub(_game_lib)
endif ()
target_link_libraries(${target_name} PRIVATE "${_game_lib}")
endif ()
endif ()
set_target_properties(${target_name} PROPERTIES
BUILD_RPATH "$ORIGIN"
INSTALL_RPATH "$ORIGIN")
elseif (UNIX)
if (_needs_host_link)
target_link_options(${target_name} PRIVATE -Wl,--allow-shlib-undefined)
endif ()
set_target_properties(${target_name} PROPERTIES
BUILD_RPATH "$ORIGIN"
INSTALL_RPATH "$ORIGIN")
elseif (WIN32)
# Mods link against the game's import library (sdk/windows-<arch>.lib, generated by
# setup_windows_exports); cl and clang-cl both consume it in MSVC mode. Function
# calls resolve through import thunks; game data is reachable only through
# __declspec(dllimport), i.e. DUSK_GAME_DATA-annotated declarations.
if (_needs_host_link)
if (TARGET dusklight)
if (NOT DUSK_GAME_IMPLIB)
message(FATAL_ERROR
"add_mod: DUSK_GAME_IMPLIB is not set (see setup_windows_exports)")
endif ()
set(_game_lib "${DUSK_GAME_IMPLIB}")
elseif (DUSK_GAME_EXE)
_mod_resolve_source_path(_game_lib "${DUSK_GAME_EXE}")
if (NOT _game_lib MATCHES "\\.lib$")
message(FATAL_ERROR
"add_mod: DUSK_GAME_EXE must be an import library on Windows "
"(sdk/windows-<arch>.lib)")
endif ()
else ()
_mod_download_link_stub(_game_lib)
endif ()
target_link_libraries(${target_name} PRIVATE "${_game_lib}")
endif ()
endif ()
endif ()
if (ARG_RUNTIME_LIBRARIES AND NOT _has_lib)
message(FATAL_ERROR "add_mod: RUNTIME_LIBRARIES requires SOURCES")
endif ()
set(_output_dir "${DUSK_MODS_OUTPUT_DIR}")
@@ -137,18 +309,52 @@ function(add_mod target_name)
set(_stage "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_stage")
set(_out "${_output_dir}/${target_name}.dusk")
set(_zip_args "${_lib_name}" mod.json)
set(_zip_args mod.json)
set(_package_deps "${_mod_json}")
set(_package_inputs "${_mod_json}")
set(_extra_cmds "")
set(_lib_copy_cmd "")
set(_lib_strip_cmd "")
set(_target_depend "")
if (_has_lib)
list(APPEND _zip_args lib)
set(_lib_copy_cmd
COMMAND ${CMAKE_COMMAND} -E make_directory "${_stage}/lib/${_lib_platform}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:${target_name}>" "${_stage}/lib/${_lib_platform}/${_lib_name}")
if (UNIX AND NOT APPLE)
set(_lib_strip_cmd COMMAND "${CMAKE_STRIP}" --strip-unneeded
"${_stage}/lib/${_lib_platform}/${_lib_name}")
endif ()
set(_target_depend ${target_name})
endif ()
string(TOLOWER "${_lib_name}" _lib_name_key)
set(_runtime_lib_name_keys "${_lib_name_key}")
foreach (_runtime_lib IN LISTS ARG_RUNTIME_LIBRARIES)
_mod_resolve_source_path(_runtime_lib_path "${_runtime_lib}")
if (NOT EXISTS "${_runtime_lib_path}" OR IS_DIRECTORY "${_runtime_lib_path}")
message(FATAL_ERROR "add_mod: runtime library does not exist or is not a file: ${_runtime_lib_path}")
endif ()
get_filename_component(_runtime_lib_name "${_runtime_lib_path}" NAME)
string(TOLOWER "${_runtime_lib_name}" _runtime_lib_name_key)
list(FIND _runtime_lib_name_keys "${_runtime_lib_name_key}" _runtime_lib_name_index)
if (NOT _runtime_lib_name_index EQUAL -1)
message(FATAL_ERROR "add_mod: duplicate runtime library filename: ${_runtime_lib_name}")
endif ()
list(APPEND _runtime_lib_name_keys "${_runtime_lib_name_key}")
list(APPEND _package_deps "${_runtime_lib_path}")
list(APPEND _package_inputs "${_runtime_lib_path}")
list(APPEND _lib_copy_cmd COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${_runtime_lib_path}" "${_stage}/lib/${_lib_platform}/${_runtime_lib_name}")
endforeach ()
if (ARG_RES_DIR)
_mod_resolve_source_path(_res_dir "${ARG_RES_DIR}")
_mod_collect_assets(_res_deps "${_res_dir}")
list(APPEND _package_deps ${_res_deps})
list(APPEND _package_inputs "${_res_dir}" ${_res_deps})
list(APPEND _zip_args res)
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} -E copy_directory
"${_res_dir}" "${_stage}/res")
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} "-DSRC=${_res_dir}"
"-DDST=${_stage}/res" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/CopyModAssets.cmake")
endif ()
if (ARG_OVERLAY_DIR)
_mod_resolve_source_path(_overlay_dir "${ARG_OVERLAY_DIR}")
@@ -156,8 +362,8 @@ function(add_mod target_name)
list(APPEND _package_deps ${_overlay_deps})
list(APPEND _package_inputs "${_overlay_dir}" ${_overlay_deps})
list(APPEND _zip_args overlay)
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} -E copy_directory
"${_overlay_dir}" "${_stage}/overlay")
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} "-DSRC=${_overlay_dir}"
"-DDST=${_stage}/overlay" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/CopyModAssets.cmake")
endif ()
if (ARG_TEXTURES_DIR)
_mod_resolve_source_path(_textures_dir "${ARG_TEXTURES_DIR}")
@@ -165,8 +371,8 @@ function(add_mod target_name)
list(APPEND _package_deps ${_textures_deps})
list(APPEND _package_inputs "${_textures_dir}" ${_textures_deps})
list(APPEND _zip_args textures)
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} -E copy_directory
"${_textures_dir}" "${_stage}/textures")
list(APPEND _extra_cmds COMMAND ${CMAKE_COMMAND} "-DSRC=${_textures_dir}"
"-DDST=${_stage}/textures" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/CopyModAssets.cmake")
endif ()
set(_bundle_cmds "")
@@ -177,6 +383,7 @@ function(add_mod target_name)
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_IDS "${_mod_id}")
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_STAGES "${_stage}")
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_PACKAGES "${_out}")
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_LIB_PLATFORMS "${_lib_platform}")
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_LIB_NAMES "${_lib_name}")
set(_bundle_cmds
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bundled_mods"
@@ -194,12 +401,13 @@ function(add_mod target_name)
add_custom_command(OUTPUT "${_out}"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${_stage}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_stage}" "${_output_dir}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:${target_name}>" "${_stage}/${_lib_name}"
${_lib_copy_cmd}
${_lib_strip_cmd}
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_mod_json}" "${_stage}/mod.json"
${_extra_cmds}
COMMAND ${CMAKE_COMMAND} -E chdir "${_stage}" ${CMAKE_COMMAND} -E tar cvf "${_out}" --format=zip ${_zip_args}
${_bundle_cmds}
DEPENDS ${target_name} ${_package_deps} "${_package_inputs_file}"
DEPENDS ${_target_depend} ${_package_deps} "${_package_inputs_file}"
COMMENT "Packaging ${target_name} -> ${_out}"
COMMAND_EXPAND_LISTS
VERBATIM
@@ -215,9 +423,10 @@ endfunction()
# user cache).
# - Linux: pre-extracted stage dirs into <install>/mods so native libs dlopen in place from
# read-only installs.
# - macOS: pre-extracted stage dirs into the installed app's Contents/Resources/mods, dylibs
# ad-hoc signed in place, then the whole bundle re-signed.
# - iOS/tvOS: assets into <app>/mods/<id> and the dylib into Frameworks/<id>.dylib.
# - macOS: pre-extracted stage dirs into the installed app's Contents/Resources/mods, native
# libs ad-hoc signed in place, then the whole bundle re-signed.
# - iOS/tvOS: assets into <app>/mods/<id>, the mod library into Frameworks/<id>.so,
# and runtime libraries alongside it.
# - Android: nothing here; gradle packs ${CMAKE_BINARY_DIR}/bundled_mods into APK assets.
function(install_bundled_mods)
get_property(_targets GLOBAL PROPERTY DUSK_BUNDLED_MOD_TARGETS)
@@ -226,6 +435,7 @@ function(install_bundled_mods)
endif ()
get_property(_ids GLOBAL PROPERTY DUSK_BUNDLED_MOD_IDS)
get_property(_stages GLOBAL PROPERTY DUSK_BUNDLED_MOD_STAGES)
get_property(_lib_platforms GLOBAL PROPERTY DUSK_BUNDLED_MOD_LIB_PLATFORMS)
get_property(_lib_names GLOBAL PROPERTY DUSK_BUNDLED_MOD_LIB_NAMES)
list(LENGTH _targets _count)
math(EXPR _last "${_count} - 1")
@@ -241,20 +451,67 @@ function(install_bundled_mods)
list(GET _targets ${_i} _target)
list(GET _ids ${_i} _id)
list(GET _stages ${_i} _stage)
list(GET _lib_platforms ${_i} _lib_platform)
list(GET _lib_names ${_i} _lib_name)
install(DIRECTORY "${_stage}/" DESTINATION "${_bundle_dir}/mods/${_id}"
PATTERN "${_lib_name}" EXCLUDE)
PATTERN "lib" EXCLUDE)
install(PROGRAMS "$<TARGET_FILE:${_target}>"
DESTINATION "${_bundle_dir}/Frameworks" RENAME "${_id}.dylib")
DESTINATION "${_bundle_dir}/Frameworks" RENAME "${_id}.so")
install(DIRECTORY "${_stage}/lib/${_lib_platform}/"
DESTINATION "${_bundle_dir}/Frameworks"
PATTERN "${_lib_name}" EXCLUDE)
endforeach ()
if (DUSK_HAS_PREPATCH)
set(_prepatch_executable "${_bundle_dir}/Dusklight")
set(_prepatch_mod_args "")
foreach (_id IN LISTS _ids)
string(APPEND _prepatch_mod_args
" \"${_bundle_dir}/Frameworks/${_id}.so\"")
endforeach ()
install(CODE "
execute_process(
COMMAND \"${SYMGEN_EXE}\" prepatch
--binary \"${_prepatch_executable}\"
--report \"${CMAKE_BINARY_DIR}/prepatch-report-$<CONFIG>.json\"
${_prepatch_mod_args}
COMMAND_ERROR_IS_FATAL ANY)")
endif ()
else ()
foreach (_i RANGE ${_last})
list(GET _ids ${_i} _id)
list(GET _stages ${_i} _stage)
list(GET _lib_platforms ${_i} _lib_platform)
list(GET _lib_names ${_i} _lib_name)
install(DIRECTORY "${_stage}/" DESTINATION "${_bundle_dir}/Contents/Resources/mods/${_id}")
install(CODE "execute_process(COMMAND /usr/bin/codesign --force --sign - \"${_bundle_dir}/Contents/Resources/mods/${_id}/${_lib_name}\" COMMAND_ERROR_IS_FATAL ANY)")
install(CODE "
file(GLOB _mod_libs \"${_bundle_dir}/Contents/Resources/mods/${_id}/lib/${_lib_platform}/*\")
foreach (_mod_lib IN LISTS _mod_libs)
if (NOT IS_DIRECTORY \"\${_mod_lib}\")
execute_process(COMMAND /usr/bin/codesign --force --sign - \"\${_mod_lib}\" COMMAND_ERROR_IS_FATAL ANY)
endif ()
endforeach ()")
endforeach ()
if (DUSK_HAS_PREPATCH)
set(_prepatch_executable "${_bundle_dir}/Contents/MacOS/Dusklight")
set(_prepatch_mod_args "")
foreach (_i RANGE ${_last})
list(GET _ids ${_i} _id)
list(GET _lib_platforms ${_i} _lib_platform)
list(GET _lib_names ${_i} _lib_name)
string(APPEND _prepatch_mod_args
" \"${_bundle_dir}/Contents/Resources/mods/${_id}/lib/${_lib_platform}/${_lib_name}\"")
endforeach ()
install(CODE "
execute_process(
COMMAND \"${SYMGEN_EXE}\" prepatch
--binary \"${_prepatch_executable}\"
--report \"${CMAKE_BINARY_DIR}/prepatch-report-$<CONFIG>.json\"
${_prepatch_mod_args}
COMMAND_ERROR_IS_FATAL ANY)")
endif ()
if (TARGET crashpad_handler)
install(CODE "execute_process(COMMAND /usr/bin/codesign --force --sign - \"${_bundle_dir}/Contents/MacOS/$<TARGET_FILE_NAME:crashpad_handler>\" COMMAND_ERROR_IS_FATAL ANY)")
endif ()
install(CODE "execute_process(COMMAND /usr/bin/codesign --force --sign - --entitlements \"${DUSK_ENTITLEMENTS}\" \"${_bundle_dir}\" COMMAND_ERROR_IS_FATAL ANY)")
endif ()
return ()
+49 -53
View File
@@ -2,59 +2,55 @@ file(READ "${SOURCE_DIR}/cmake/capstone.cmake.in" _content)
# Insert PATCH_COMMAND before CONFIGURE_COMMAND in the ExternalProject_Add.
# Bracket args prevent cmake from substituting ${...} while writing this file.
string(REPLACE
" CONFIGURE_COMMAND \"\""
[=[ PATCH_COMMAND "${CMAKE_COMMAND}" -DDIR=${CMAKE_CURRENT_BINARY_DIR}/capstone-src -P "${CAPSTONE_FIX_SCRIPT}"
if (NOT _content MATCHES "CAPSTONE_FIX_SCRIPT")
string(REPLACE
" CONFIGURE_COMMAND \"\""
[=[ PATCH_COMMAND "${CMAKE_COMMAND}" -DDIR=${CMAKE_CURRENT_BINARY_DIR}/capstone-src -P "${CAPSTONE_FIX_SCRIPT}"
CONFIGURE_COMMAND ""]=]
_content "${_content}")
file(WRITE "${SOURCE_DIR}/cmake/capstone.cmake.in" "${_content}")
file(READ "${SOURCE_DIR}/src/funchook_unix.c" _unix_content)
# macOS rejects the POSIX mprotect RWX/RW transition for executable image pages on arm64.
# Use Mach VM_PROT_COPY for the short patch window, then restore RX permissions.
if (NOT _unix_content MATCHES "VM_PROT_READ \\| VM_PROT_WRITE \\| VM_PROT_COPY")
string(REPLACE
[=[ rv = mprotect(mstate->addr, mstate->size, prot);]=]
[=[#ifdef __APPLE__
kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)mstate->addr,
(vm_size_t)mstate->size, FALSE,
VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
if (kr == KERN_SUCCESS) {
funchook_log(funchook, " unprotect memory %p (size=%"PRIuPTR", prot=read,write,copy) <- %p (size=%"PRIuPTR")\n",
mstate->addr, mstate->size, start, len);
return 0;
}
funchook_set_error_message(funchook, "Failed to unprotect memory %p (size=%"PRIuPTR", prot=read,write,copy) <- %p (size=%"PRIuPTR", error=%s)",
mstate->addr, mstate->size, start, len,
mach_error_string(kr));
return FUNCHOOK_ERROR_MEMORY_FUNCTION;
#endif
rv = mprotect(mstate->addr, mstate->size, prot);]=]
_unix_content "${_unix_content}")
string(REPLACE
[=[ char errbuf[128];
int rv = mprotect(mstate->addr, mstate->size, PROT_READ | PROT_EXEC);]=]
[=[ char errbuf[128];
#ifdef __APPLE__
kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)mstate->addr,
(vm_size_t)mstate->size, FALSE,
VM_PROT_READ | VM_PROT_EXECUTE);
if (kr == KERN_SUCCESS) {
funchook_log(funchook, " protect memory %p (size=%"PRIuPTR", prot=read,exec)\n",
mstate->addr, mstate->size);
return 0;
}
funchook_set_error_message(funchook, "Failed to protect memory %p (size=%"PRIuPTR", prot=read,exec, error=%s)",
mstate->addr, mstate->size,
mach_error_string(kr));
return FUNCHOOK_ERROR_MEMORY_FUNCTION;
#endif
int rv = mprotect(mstate->addr, mstate->size, PROT_READ | PROT_EXEC);]=]
_unix_content "${_unix_content}")
_content "${_content}")
file(WRITE "${SOURCE_DIR}/cmake/capstone.cmake.in" "${_content}")
endif ()
file(WRITE "${SOURCE_DIR}/src/funchook_unix.c" "${_unix_content}")
file(READ "${SOURCE_DIR}/src/funchook.c" _content)
if (NOT _content MATCHES "commit_code_patch")
string(REPLACE "#include \"funchook_internal.h\""
"#include \"funchook_internal.h\"\n#ifdef __APPLE__\n#include \"code_patch_macos.hpp\"\n#endif"
_content "${_content}")
foreach(_operation install uninstall)
if (_operation STREQUAL "install")
set(_expected old_code)
set(_replacement new_code)
else ()
set(_expected new_code)
set(_replacement old_code)
endif ()
set(_original " mem_state_t mstate;
int rv = funchook_unprotect_begin(funchook, &mstate, entry->target_func, JUMP32_BYTE_SIZE);
if (rv != 0) {
return rv;
}
memcpy(entry->target_func, entry->${_replacement}, JUMP32_BYTE_SIZE);
rv = funchook_unprotect_end(funchook, &mstate);
if (rv != 0) {
return rv;
}
flush_instruction_cache(entry->target_func, JUMP32_BYTE_SIZE);")
string(FIND "${_content}" "${_original}" _position)
if (_position EQUAL -1)
message(FATAL_ERROR "Funchook ${_operation} patch site changed")
endif ()
string(REPLACE "${_original}" "#ifdef __APPLE__
int rv = commit_code_patch(entry->target_func, entry->${_expected},
entry->${_replacement}, JUMP32_BYTE_SIZE);
if (rv != 0) {
funchook_set_error_message(funchook, \"Code patch commit failed (Mach error %d)\", rv);
return FUNCHOOK_ERROR_MEMORY_FUNCTION;
}
#else
${_original}
#endif" _content "${_content}")
endforeach ()
file(WRITE "${SOURCE_DIR}/src/funchook.c" "${_content}")
endif ()
+43 -15
View File
@@ -2,40 +2,50 @@ include_guard(GLOBAL)
get_filename_component(_SYMBOL_MANIFEST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
set(_SYMGEN_VERSION "1.1.0")
set(_SYMGEN_VERSION "1.3.4")
set(_SYMGEN_RELEASE_BASE_URL "https://github.com/encounter/symgen/releases/download/v${_SYMGEN_VERSION}")
set(SYMGEN_PATH "" CACHE FILEPATH "Path to a symgen executable; empty downloads the pinned release")
mark_as_advanced(SYMGEN_PATH)
function(symgen_host_asset out_name)
function(symgen_host_asset out_name out_hash)
string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" _host_processor)
set(_asset "")
set(_asset_hash "")
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
if (_host_processor MATCHES "^(arm64|aarch64)$")
set(_asset "symgen-macos-arm64")
set(_asset_hash "SHA256=983ef6278d30bee38f240f451ca736fd294da0e5705ee15029accac5c7a33829")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-macos-x86_64")
set(_asset_hash "SHA256=b6ab1720a4f04fadcf291f42d133e2ee68ef2e9a75d143e51584929e808af8a2")
endif ()
elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
if (_host_processor MATCHES "^(aarch64|arm64)$")
set(_asset "symgen-linux-aarch64")
set(_asset_hash "SHA256=ba84486ff1ceb753973e6213c9bc5f195b5ff6f220f5d3322fd861966cdc791c")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-linux-x86_64")
set(_asset_hash "SHA256=8b81a00a2ef8f5dd4b59adba1badfaca57e472bf272516bc12c4625cefb37718")
elseif (_host_processor MATCHES "^(i[3-6]86|x86)$")
set(_asset "symgen-linux-i686")
set(_asset_hash "SHA256=01aa85d84148a6806fdf69839dea7e962e6ac46956aed63b9ecb7d596f179f93")
endif ()
elseif (CMAKE_HOST_WIN32)
if (_host_processor MATCHES "^(arm64|aarch64)$")
set(_asset "symgen-windows-arm64.exe")
set(_asset_hash "SHA256=e116099f859177d7e29fc3444d67083596330e5c4fb3a0461b21402c89249d96")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-windows-x86_64.exe")
set(_asset_hash "SHA256=57ef1c2f563e33fa4915c40194c4ced540f985c48d9cf081047c6bbcb585fa37")
elseif (_host_processor MATCHES "^(i[3-6]86|x86)$")
set(_asset "symgen-windows-x86.exe")
set(_asset_hash "SHA256=cc0ba337c798d3f63d8acbb2d16d531d0c2da878fbdd2b6307702334ec880528")
endif ()
endif ()
set(${out_name} "${_asset}" PARENT_SCOPE)
set(${out_hash} "${_asset_hash}" PARENT_SCOPE)
endfunction()
function(ensure_symgen required)
@@ -54,7 +64,7 @@ function(ensure_symgen required)
return()
endif ()
else ()
symgen_host_asset(_asset)
symgen_host_asset(_asset _asset_hash)
if (_asset STREQUAL "")
if (required)
message(FATAL_ERROR "symgen: no prebuilt binary for host "
@@ -75,7 +85,8 @@ function(ensure_symgen required)
file(DOWNLOAD "${_url}" "${_symgen}"
TLS_VERIFY ON
STATUS _download_status
SHOW_PROGRESS)
SHOW_PROGRESS
EXPECTED_HASH "${_asset_hash}")
list(GET _download_status 0 _download_code)
if (NOT _download_code EQUAL 0)
list(GET _download_status 1 _download_message)
@@ -106,20 +117,37 @@ function(setup_symbol_manifest target)
endif ()
add_dependencies(${target} symgen)
if (WIN32)
set(_input --pdb "$<TARGET_PDB_FILE:${target}>")
set(_out "$<TARGET_FILE_DIR:${target}>/dusklight.symdb")
else ()
set(_input --binary "$<TARGET_FILE:${target}>")
if (APPLE)
set(_out "$<TARGET_BUNDLE_CONTENT_DIR:${target}>/Resources/dusklight.symdb")
else ()
set(_out "$<TARGET_FILE_DIR:${target}>/dusklight.symdb")
# Reserve an ELF program-header entry when the linker supports it (mold).
# symgen can replace the PT_NULL entry without relocating the table, keeping later post-link tools safe.
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
include(CheckLinkerFlag)
check_linker_flag(CXX "LINKER:--spare-program-headers=1" _linker_supports_spare_program_headers)
if (_linker_supports_spare_program_headers)
target_link_options(${target} PRIVATE "LINKER:--spare-program-headers=1")
endif ()
endif ()
if (WIN32)
set(_input --pdb "$<TARGET_PDB_FILE:${target}>")
else ()
set(_input --binary "$<TARGET_FILE:${target}>")
endif ()
if (APPLE)
# Room for the symbol manifest and several prepatch arenas.
target_link_options(${target} PRIVATE "LINKER:-headerpad,0x1000")
# ld64 may update an existing output, which breaks our symdb insertion. Remove it first.
add_custom_command(TARGET ${target} PRE_LINK
COMMAND "${CMAKE_COMMAND}" -E rm -f "$<TARGET_FILE:${target}>"
VERBATIM)
endif ()
# The manifest is embedded into the image as a new section, located at runtime through
# the descriptor manifest.cpp reserves. On Apple platforms this command must stay
# attached before the ad-hoc codesign POST_BUILD command: the patch removes any existing
# signature.
add_custom_command(TARGET ${target} POST_BUILD
COMMAND "${SYMGEN_EXE}" manifest ${_input} --out "${_out}"
COMMENT "Generating symbol manifest"
COMMAND "${SYMGEN_EXE}" manifest ${_input} --embed "$<TARGET_FILE:${target}>"
COMMENT "Embedding symbol manifest"
VERBATIM)
endfunction()
+27 -15
View File
@@ -6,9 +6,16 @@ get_filename_component(_DUSK_WINDOWS_EXPORTS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FIL
# import library mods link against. symgen scans the built objects, filters by source, and
# writes a .def used by the main link and import library generation.
function(setup_windows_exports target)
if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(WARNING "dusklight: Windows code-mod exports are x64-only for now; skipping")
return()
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _implib_arch)
if (_implib_arch STREQUAL "arm64")
set(_dlltool_machine "arm64")
set(_lib_machine "arm64")
elseif (_implib_arch MATCHES "^(amd64|x86_64)$")
set(_dlltool_machine "i386:x86-64")
set(_lib_machine "x64")
else ()
message(FATAL_ERROR
"dusklight: no Windows mod linking support for ${CMAKE_SYSTEM_PROCESSOR}")
endif ()
include("${_DUSK_WINDOWS_EXPORTS_CMAKE_DIR}/SymbolManifest.cmake")
@@ -37,19 +44,27 @@ function(setup_windows_exports target)
endif ()
endforeach ()
set(_forward_args)
if (TARGET dawn::webgpu_dawn)
get_target_property(_dawn_type dawn::webgpu_dawn TYPE)
if (_dawn_type STREQUAL "SHARED_LIBRARY")
list(APPEND _forward_args
--forward-dll "$<TARGET_FILE:dawn::webgpu_dawn>"
--forward-sym-prefix wgpu)
endif ()
endif ()
# Generate curated exports list from the main binary
set(_def "${CMAKE_BINARY_DIR}/${_config_subdir}dusklight_exports.def")
add_custom_command(TARGET ${target} PRE_LINK
# TODO: src/dusk/ is NOT excluded: inline code in game headers
# currently call into it (e.g. dusk::frame_interp::lookup_replacement).
COMMAND "${_symgen}" def
--rsp "${_rsp}"
"@${_rsp}"
--out "${_def}"
--exclude cmake_pch
--exclude miniz
--exclude asan_options
--max-exports 58000
${_sdk_args}
${_forward_args}
COMMENT "Generating dusklight exports"
VERBATIM)
target_link_options(${target} PRIVATE "/DEF:${_def}")
@@ -59,11 +74,11 @@ function(setup_windows_exports target)
get_filename_component(_compiler_dir "${CMAKE_CXX_COMPILER}" DIRECTORY)
find_program(DUSK_LLVM_DLLTOOL llvm-dlltool HINTS "${_compiler_dir}")
if (DUSK_LLVM_DLLTOOL)
set(_implib_cmd "${DUSK_LLVM_DLLTOOL}" -d "${_def}" -D dusklight.exe -m i386:x86-64
-l "${_implib}")
set(_implib_cmd "${DUSK_LLVM_DLLTOOL}" -d "${_def}" -D dusklight.exe
-m "${_dlltool_machine}" -l "${_implib}")
else ()
set(_implib_cmd "${CMAKE_AR}" /nologo "/def:${_def}" /machine:x64 /name:dusklight.exe
"/out:${_implib}")
set(_implib_cmd "${CMAKE_AR}" /nologo "/def:${_def}" "/machine:${_lib_machine}"
/name:dusklight.exe "/out:${_implib}")
endif ()
add_custom_command(TARGET ${target} POST_BUILD
COMMAND ${_implib_cmd}
@@ -71,9 +86,6 @@ function(setup_windows_exports target)
COMMENT "Generating dusklight import library"
VERBATIM)
set(DUSK_GAME_IMPLIB "${_implib}" CACHE INTERNAL "Import library for Windows mod linking")
set(DUSK_GAME_DEF "${_def}" CACHE INTERNAL "Curated export .def for the game executable")
# Ship the import library as sdk/dusklight.lib in the install tree: mods may use it to
# compile against Dusklight without having to build the whole game. (See DUSK_GAME_IMPLIB)
install(FILES "${_implib}" DESTINATION sdk RENAME dusklight.lib)
install(FILES "${_implib}" DESTINATION sdk RENAME "windows-${_implib_arch}.lib")
endfunction()
+7 -1
View File
@@ -5,7 +5,13 @@
- A Windows, Linux, or macOS device
- iOS device connected to computer via USB
- Dusklight IPA file (download the latest `Dusklight-vX.X.X-ios-arm64.ipa` from the [releases page](https://github.com/TwilitRealm/dusklight/releases))
- Legally acquired game disc - `GZ2E01` (Gamecube USA) or `GZ2PE01` (Gamecube PAL)
- Legally acquired game disc:
- `GZ2E01` (GameCube USA)
- `GZ2P01` (GameCube PAL)
- `GZ2J01` (GameCube JPN)
- `RZDE01` (Wii USA Rev. 0 *or* Rev. 2)
- `RZDP01` (Wii PAL)
- `RZDJ01` (Wii JPN)
## 1. Install iloader
+1082 -198
View File
File diff suppressed because it is too large Load Diff
+1 -1
Vendored Submodule
+1
Submodule extern/borealis added at 0bdba6c50a
+170 -104
View File
@@ -244,7 +244,7 @@ set(DOLZEL_FILES
src/CaptureScreen.cpp
)
if(DEBUG)
list(APPEND DOLZEL_FILES src/d/d_event_debug.cpp)
list(APPEND DOLZEL_FILES src/d/d_event_debug.cpp)
endif(DEBUG)
set(Z2AUDIOLIB_FILES
@@ -1404,117 +1404,223 @@ set(REL_FILES
)
set(DOLPHIN_FILES
libs/dolphin/src/gf/GFGeometry.cpp
libs/dolphin/src/gf/GFLight.cpp
libs/dolphin/src/gf/GFPixel.cpp
libs/dolphin/src/gf/GFTev.cpp
libs/dolphin/src/gf/GFGeometry.cpp
libs/dolphin/src/gf/GFLight.cpp
libs/dolphin/src/gf/GFPixel.cpp
libs/dolphin/src/gf/GFTev.cpp
)
set(DUSK_FILES
include/dusk/action_bindings.h
include/dusk/endian_gx.hpp
include/dusk/config.hpp
include/dusk/dvd_asset.hpp
include/dusk/scope_guard.hpp
src/dusk/dvd_asset.cpp
include/helpers/batch.hpp
include/helpers/bits.hpp
include/helpers/endian_gx.hpp
src/d/actor/d_a_alink_dusk.cpp
src/dusk/android_frame_rate.hpp
src/dusk/android_frame_rate.cpp
src/dusk/OSContext.cpp
src/dusk/OSMutex.cpp
src/dusk/OSReport.cpp
src/dusk/OSThread.cpp
src/dusk/achievements.cpp
src/dusk/action_bindings.cpp
src/dusk/action_bindings.h
src/dusk/archive.cpp
src/dusk/archive.hpp
src/dusk/asserts.cpp
src/dusk/batch.cpp
src/dusk/batch.hpp
src/dusk/autosave.cpp
src/dusk/config.cpp
src/dusk/crash_handler.cpp
src/dusk/crash_reporting.cpp
src/dusk/config.hpp
src/dusk/data.cpp
src/dusk/data.hpp
src/dusk/endian.cpp
src/dusk/discord_presence.cpp
src/dusk/dvd_asset.cpp
src/dusk/dvd_asset.hpp
src/dusk/extras.c
src/dusk/file_select.cpp
src/dusk/file_select.hpp
src/dusk/frame_interpolation.cpp
src/dusk/commands.cpp
src/dusk/commands.hpp
src/dusk/game_clock.cpp
src/dusk/hash.hpp
src/dusk/game_mode.cpp
src/dusk/gamepad_color.cpp
src/dusk/globals.cpp
src/dusk/gyro.cpp
include/dusk/menu_pointer.h
src/dusk/menu_pointer.cpp
src/dusk/mouse.cpp
src/dusk/gamepad_color.cpp
src/dusk/autosave.cpp
src/dusk/http/http.hpp
src/dusk/io.cpp
src/dusk/layout.cpp
src/dusk/logging.cpp
src/dusk/settings.cpp
src/dusk/speedrun.cpp
src/dusk/string.cpp
src/dusk/stubs.cpp
include/dusk/texture_replacements.hpp
src/dusk/texture_replacements.cpp
src/dusk/touch_camera.cpp
src/dusk/update_check.cpp
src/dusk/update_check.hpp
src/dusk/game_combos.cpp
src/dusk/trigger_viewer.cpp
#src/dusk/m_Do_ext_dusk.cpp
src/dusk/imgui/ImGuiConfig.hpp
src/dusk/imgui/ImGuiConsole.hpp
src/dusk/imgui/ImGuiConsole.cpp
src/dusk/imgui/ImGuiEngine.cpp
src/dusk/imgui/ImGuiEngine.hpp
src/dusk/hq_minimap.cpp
src/dusk/imgui/ImGuiActorSpawner.cpp
src/dusk/imgui/ImGuiBloomWindow.cpp
src/dusk/imgui/ImGuiBloomWindow.hpp
src/dusk/imgui/ImGuiCameraOverlay.cpp
src/dusk/imgui/ImGuiConfig.hpp
src/dusk/imgui/ImGuiConsole.cpp
src/dusk/imgui/ImGuiConsole.hpp
src/dusk/imgui/ImGuiControllerOverlay.cpp
src/dusk/imgui/ImGuiEngine.cpp
src/dusk/imgui/ImGuiEngine.hpp
src/dusk/imgui/ImGuiHeapOverlay.cpp
src/dusk/imgui/ImGuiMenuTools.cpp
src/dusk/imgui/ImGuiMenuTools.hpp
src/dusk/imgui/ImGuiActorSpawner.cpp
src/dusk/imgui/ImGuiProcessOverlay.cpp
src/dusk/imgui/ImGuiCameraOverlay.cpp
src/dusk/imgui/ImGuiHeapOverlay.cpp
src/dusk/imgui/ImGuiControllerOverlay.cpp
src/dusk/imgui/ImGuiStubLog.cpp
src/dusk/imgui/ImGuiSaveEditor.cpp
src/dusk/imgui/ImGuiStateShare.hpp
src/dusk/imgui/ImGuiStateShare.cpp
src/dusk/imgui/ImGuiStateShare.hpp
src/dusk/imgui/ImGuiStubLog.cpp
src/dusk/interp/camera.cpp
src/dusk/interp/dual_buffer.cpp
src/dusk/interp/frame_interpolation.cpp
src/dusk/interp/line.cpp
src/dusk/io.cpp
src/dusk/iso_validate.cpp
src/dusk/language.cpp
src/dusk/language.hpp
src/dusk/layout.cpp
src/dusk/livesplit.cpp
src/dusk/logging.cpp
src/dusk/menu_pointer.cpp
src/dusk/menu_pointer.h
src/dusk/mods/loader/bundle_disk.cpp
src/dusk/mods/loader/bundle_zip.cpp
src/dusk/mods/loader/context.cpp
src/dusk/mods/loader/depgraph.cpp
src/dusk/mods/loader/depgraph.hpp
src/dusk/mods/loader/loader.cpp
src/dusk/mods/loader/loader.hpp
src/dusk/mods/loader/manifest.cpp
src/dusk/mods/loader/manifest.hpp
src/dusk/mods/loader/natives.cpp
src/dusk/mods/loader/natives.hpp
src/dusk/mods/loader/packages.cpp
src/dusk/mods/loader/packages.hpp
src/dusk/mods/loader/native_module.cpp
src/dusk/mods/loader/native_module.hpp
src/dusk/mods/loader/prepatch.cpp
src/dusk/mods/loader/prepatch.hpp
src/dusk/mods/catalog.cpp
src/dusk/mods/catalog.hpp
src/dusk/mods/queue.cpp
src/dusk/mods/queue.hpp
src/dusk/mods/item.hpp
src/dusk/mods/item_actor.cpp
src/dusk/mods/item_checks.cpp
src/dusk/mods/item_gives.cpp
src/dusk/mods/log_buffer.cpp
src/dusk/mods/log_buffer.hpp
src/dusk/mods/manifest.cpp
src/dusk/mods/manifest.hpp
src/dusk/mods/svc/actor.cpp
src/dusk/mods/svc/camera.cpp
src/dusk/mods/svc/config.cpp
src/dusk/mods/svc/config.hpp
src/dusk/mods/svc/file.cpp
src/dusk/mods/svc/game.cpp
src/dusk/mods/svc/gfx.cpp
src/dusk/mods/svc/flow.cpp
src/dusk/mods/svc/hook.cpp
src/dusk/mods/svc/host.cpp
src/dusk/mods/svc/http.cpp
src/dusk/mods/svc/net.cpp
src/dusk/mods/svc/net.hpp
src/dusk/mods/svc/websocket.cpp
src/dusk/mods/svc/item.cpp
src/dusk/mods/svc/item.hpp
src/dusk/mods/svc/log.cpp
src/dusk/mods/svc/overlay.cpp
src/dusk/mods/svc/registry.cpp
src/dusk/mods/svc/registry.hpp
src/dusk/mods/svc/resource.cpp
src/dusk/mods/svc/texture.cpp
src/dusk/mods/svc/ui.cpp
src/dusk/mods/svc/ui.hpp
src/dusk/mods/svc/game_mode.cpp
src/dusk/mods/svc/window.cpp
src/dusk/mods/svc/window.hpp
src/dusk/mods/svc/save.cpp
src/dusk/mods/svc/save.hpp
src/dusk/mods/svc/stage.cpp
src/dusk/mods/svc/stage.hpp
src/dusk/mouse.cpp
src/dusk/presentation.cpp
src/dusk/presentation.hpp
src/dusk/scope_guard.hpp
src/dusk/settings.cpp
src/dusk/speedrun.cpp
src/dusk/stubs.cpp
src/dusk/texture_replacements.cpp
src/dusk/texture_replacements.hpp
src/dusk/touch_camera.cpp
src/dusk/ui/achievements.cpp
src/dusk/ui/achievements.hpp
src/dusk/ui/command_console.cpp
src/dusk/ui/command_console.hpp
src/dusk/ui/bool_button.cpp
src/dusk/ui/bool_button.hpp
src/dusk/ui/button.cpp
src/dusk/ui/button.hpp
src/dusk/ui/color_input.cpp
src/dusk/ui/color_input.hpp
src/dusk/ui/component.cpp
src/dusk/ui/component.hpp
src/dusk/ui/controls.hpp
src/dusk/ui/controller_config.cpp
src/dusk/ui/controller_config.hpp
src/dusk/ui/controls.hpp
src/dusk/ui/document.cpp
src/dusk/ui/document.hpp
src/dusk/ui/drop_install_modal.cpp
src/dusk/ui/drop_install_modal.hpp
src/dusk/ui/editor.cpp
src/dusk/ui/editor.hpp
src/dusk/ui/event.cpp
src/dusk/ui/event.hpp
src/dusk/ui/graphics_tuner.cpp
src/dusk/ui/graphics_tuner.hpp
src/dusk/ui/input.cpp
src/dusk/ui/input.hpp
src/dusk/ui/group_button.cpp
src/dusk/ui/group_button.hpp
src/dusk/ui/file_button.cpp
src/dusk/ui/file_button.hpp
src/dusk/ui/icon_provider.cpp
src/dusk/ui/icon_provider.hpp
src/dusk/ui/input.cpp
src/dusk/ui/input.hpp
src/dusk/ui/logs_window.cpp
src/dusk/ui/logs_window.hpp
src/dusk/ui/list.cpp
src/dusk/ui/list.hpp
src/dusk/ui/menu_bar.cpp
src/dusk/ui/menu_bar.hpp
src/dusk/ui/mod_browser.cpp
src/dusk/ui/mod_browser.hpp
src/dusk/ui/queue_window.cpp
src/dusk/ui/queue_window.hpp
src/dusk/ui/package_row.cpp
src/dusk/ui/package_row.hpp
src/dusk/ui/mod_texture_provider.cpp
src/dusk/ui/mod_texture_provider.hpp
src/dusk/ui/remote_texture_provider.cpp
src/dusk/ui/remote_texture_provider.hpp
src/dusk/ui/runtime_image.cpp
src/dusk/ui/runtime_image.hpp
src/dusk/ui/mod_window.cpp
src/dusk/ui/mod_window.hpp
src/dusk/ui/modal.cpp
src/dusk/ui/modal.hpp
src/dusk/ui/mods_window.cpp
src/dusk/ui/mods_window.hpp
src/dusk/ui/nav_types.hpp
src/dusk/ui/nav_group.cpp
src/dusk/ui/nav_group.hpp
src/dusk/ui/context_menu.cpp
src/dusk/ui/context_menu.hpp
src/dusk/ui/icon_button.cpp
src/dusk/ui/icon_button.hpp
src/dusk/ui/tooltip.cpp
src/dusk/ui/tooltip.hpp
src/dusk/ui/number_button.cpp
src/dusk/ui/number_button.hpp
src/dusk/ui/overlay.cpp
src/dusk/ui/overlay.hpp
src/dusk/ui/pane.cpp
src/dusk/ui/pane.hpp
src/dusk/ui/menu_bar.cpp
src/dusk/ui/menu_bar.hpp
src/dusk/ui/mods_window.cpp
src/dusk/ui/mods_window.hpp
src/dusk/ui/popover.cpp
src/dusk/ui/popover.hpp
src/dusk/ui/prelaunch.cpp
src/dusk/ui/prelaunch.hpp
src/dusk/ui/preset.cpp
@@ -1529,10 +1635,10 @@ set(DUSK_FILES
src/dusk/ui/string_button.hpp
src/dusk/ui/tab_bar.cpp
src/dusk/ui/tab_bar.hpp
src/dusk/ui/touch_controls_common.cpp
src/dusk/ui/touch_controls_common.hpp
src/dusk/ui/touch_controls.cpp
src/dusk/ui/touch_controls.hpp
src/dusk/ui/touch_controls_common.cpp
src/dusk/ui/touch_controls_common.hpp
src/dusk/ui/touch_controls_editor.cpp
src/dusk/ui/touch_controls_editor.hpp
src/dusk/ui/ui.cpp
@@ -1541,50 +1647,10 @@ set(DUSK_FILES
src/dusk/ui/warp.hpp
src/dusk/ui/window.cpp
src/dusk/ui/window.hpp
src/dusk/achievements.cpp
src/dusk/iso_validate.cpp
src/dusk/livesplit.cpp
src/dusk/offset_ptr.cpp
src/dusk/OSContext.cpp
src/dusk/OSReport.cpp
src/dusk/OSThread.cpp
src/dusk/OSMutex.cpp
src/dusk/mods/log_buffer.cpp
src/dusk/mods/log_buffer.hpp
src/dusk/mods/manifest.cpp
src/dusk/mods/manifest.hpp
src/dusk/mods/loader/bundle_disk.cpp
src/dusk/mods/loader/bundle_zip.cpp
src/dusk/mods/loader/context.cpp
src/dusk/mods/loader/depgraph.cpp
src/dusk/mods/loader/depgraph.hpp
src/dusk/mods/loader/loader.cpp
src/dusk/mods/loader/loader.hpp
src/dusk/mods/loader/native_module.cpp
src/dusk/mods/loader/native_module.hpp
src/dusk/mods/svc/config.cpp
src/dusk/mods/svc/config.hpp
src/dusk/mods/svc/game.cpp
src/dusk/mods/svc/hook.cpp
src/dusk/mods/svc/host.cpp
src/dusk/mods/svc/log.cpp
src/dusk/mods/svc/overlay.cpp
src/dusk/mods/svc/resource.cpp
src/dusk/mods/svc/texture.cpp
src/dusk/mods/svc/ui.cpp
src/dusk/mods/svc/ui.hpp
src/dusk/mods/svc/registry.cpp
src/dusk/mods/svc/registry.hpp
src/dusk/discord.cpp
src/dusk/discord.hpp
src/dusk/discord_presence.cpp
src/dusk/version.cpp
src/dusk/action_bindings.cpp
)
set(DUSK_HTTP_BACKEND_FILES
src/dusk/http/no_backend.cpp
src/dusk/http/curl.cpp
src/dusk/http/winhttp.cpp
src/dusk/http/url_session.mm
src/dusk/utilities.cpp
src/helpers/batch.cpp
src/helpers/endian.cpp
src/helpers/offset_ptr.cpp
src/helpers/string.cpp
)
+19 -28
View File
@@ -2,6 +2,7 @@
description = "Dusklight native PC port of the Twilight Princess decompilation";
inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
inputs.self.submodules = true;
outputs =
{ self, nixpkgs }:
@@ -58,21 +59,6 @@
hasNodPrebuilt = nodPrebuiltInfo ? ${system};
aurora = builtins.pathExists "${self}/extern/aurora/CMakeLists.txt";
needSubmodules = ''
dusklight: The aurora submodule is not vendored. Add submodules=1 to build.
As a flake input:
dusklight.url = "git+https://github.com/TwilitRealm/dusklight?ref=main&submodules=1";
nix command:
nix run 'git+https://github.com/TwilitRealm/dusklight?submodules=1'
Local checkout:
nix run '.?submodules=1#dusklight'
'';
dawn = pkgs.fetchzip {
url = "https://github.com/encounter/dawn/releases/download/${dawnVersion}/dawn-${dawnInfo.${system}.triple}.tar.gz";
@@ -140,6 +126,14 @@
JSON = pkgs.nlohmann_json.src;
XXHASH = pkgs.xxhash.src;
ZSTD = pkgs.zstd.src;
MINIZ = pkgs.fetchzip {
url = "https://github.com/richgel999/miniz/releases/download/3.0.2/miniz-3.0.2.zip";
hash = "sha256-DXysXkQEmoDAMMg1F8KexkwpXNyiHNzLJqXR9SMEkxk=";
stripRoot = false;
};
FMT = pkgs.fetchzip {
url = "https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz";
hash = "sha256-ZmI1Dv0ZabPlxa02OpERI47jp7zFfjpeWCy1WyuPYZ0=";
@@ -165,19 +159,16 @@
};
dusklight =
if !aurora then
throw needSubmodules
else
pkgs.stdenv.mkDerivation {
pname = "dusklight";
version = versionSuffix;
src = ./.;
pkgs.stdenv.mkDerivation {
pname = "dusklight";
version = versionSuffix;
src = ./.;
postUnpack = ''
chmod -R u+w "$sourceRoot"
substituteInPlace "$sourceRoot/extern/aurora/CMakeLists.txt" \
--replace-warn "add_subdirectory(tests)" ""
'';
postUnpack = ''
chmod -R u+w "$sourceRoot"
substituteInPlace "$sourceRoot/extern/aurora/CMakeLists.txt" \
--replace-warn "add_subdirectory(tests)" ""
'';
nativeBuildInputs = [
pkgs.cmake
@@ -237,7 +228,7 @@
ninjaFlags = [ "dusklight" ];
cmakeFlags = [
"-DDUSK_VERSION_OVERRIDE=${versionSuffix}"
"-DBOREALIS_APP_VERSION_OVERRIDE=${versionSuffix}"
"-DFETCHCONTENT_FULLY_DISCONNECTED=ON"
"-DAURORA_DAWN_PROVIDER=package"
"-DAURORA_DAWN_LINKAGE=static"
+3 -3
View File
@@ -88,9 +88,9 @@ struct DynamicModuleControl : DynamicModuleControlBase {
/* 0x24 */ s32 mSize;
/* 0x28 */ mDoDvdThd_callback_c* mAsyncLoadCallback;
static u32 sAllocBytes;
static JKRArchive* sArchive;
static JKRFileCache* sFileCache;
static DUSK_GAME_DATA u32 sAllocBytes;
static DUSK_GAME_DATA JKRArchive* sArchive;
static DUSK_GAME_DATA JKRFileCache* sFileCache;
};
#endif /* DYNAMICLINK_H */
+1 -1
View File
@@ -12,6 +12,6 @@ struct cAPI_Interface {
/* 0x14 */ cAPIGph_Mthd blankingOffMtd;
};
extern cAPI_Interface g_cAPI_Interface;
DUSK_GAME_EXTERN cAPI_Interface g_cAPI_Interface;
#endif /* C_API_H */
+5 -5
View File
@@ -24,11 +24,11 @@ private:
s16 mAngle;
public:
const static cSAngle _0;
const static cSAngle _1;
const static cSAngle _90;
const static cSAngle _180;
const static cSAngle _270;
const static DUSK_GAME_DATA cSAngle _0;
const static DUSK_GAME_DATA cSAngle _1;
const static DUSK_GAME_DATA cSAngle _90;
const static DUSK_GAME_DATA cSAngle _180;
const static DUSK_GAME_DATA cSAngle _270;
#ifdef __MWERKS__
cSAngle() {}
~cSAngle() {}
-1
View File
@@ -5,7 +5,6 @@
#include "f_pc/f_pc_base.h"
#include "SSystem/SComponent/c_bg_s_grp_pass_chk.h"
#include "SSystem/SComponent/c_bg_s_poly_pass_chk.h"
#include "dusk/endian.h"
struct cBgD_Vtx_t : public Vec {};
+1 -1
View File
@@ -435,7 +435,7 @@ public:
cM3dGAab& GetWorkAab() { return mAab; }
static cXyz m_virtual_center;
static DUSK_GAME_DATA cXyz m_virtual_center;
};
STATIC_ASSERT(0x20 == sizeof(cCcD_ShapeAttr));
+1 -1
View File
@@ -9,7 +9,7 @@ struct counter_class {
u32 mTimer;
};
extern counter_class g_Counter;
DUSK_GAME_EXTERN counter_class g_Counter;
void cCt_Counter(int resetCounter1);
+1 -1
View File
@@ -102,6 +102,6 @@ void MtxPosition(cXyz DUSK_CONST*, cXyz*);
void MtxPush(void);
void MtxPull(void);
extern Mtx* calc_mtx;
DUSK_GAME_EXTERN Mtx* calc_mtx;
#endif
+1 -1
View File
@@ -20,7 +20,7 @@ struct cM3d_Range {
};
#define G_CM3D_F_INF (1000000000.0f)
extern const f32 G_CM3D_F_ABS_MIN;
DUSK_GAME_EXTERN const f32 G_CM3D_F_ABS_MIN;
static void cM3d_InDivPos1(const Vec*, const Vec*, f32, Vec*);
void cM3d_InDivPos2(const Vec*, const Vec*, f32, Vec*);
-1
View File
@@ -2,7 +2,6 @@
#define C_M3D_G_TRI_H_
#include "SSystem/SComponent/c_m3d_g_pla.h"
#include "dusk/endian.h"
class cM3dGCyl;
+1 -1
View File
@@ -6,7 +6,7 @@
class JKRHeap;
struct cMl {
static JKRHeap* Heap;
static DUSK_GAME_DATA JKRHeap* Heap;
static void init(JKRHeap*);
static void* memalignB(int, u32);
static void free(void*);
+1 -1
View File
@@ -9,7 +9,7 @@ struct SVec {
class csXyz : public SVec {
public:
static const csXyz Zero;
static DUSK_GAME_DATA const csXyz Zero;
~csXyz() {}
csXyz() {}
csXyz(s16, s16, s16);
+8 -8
View File
@@ -14,14 +14,14 @@ struct cXy {
};
struct cXyz : Vec {
static const cXyz Zero;
static const cXyz BaseX;
static const cXyz BaseY;
static const cXyz BaseZ;
static const cXyz BaseXY;
static const cXyz BaseXZ;
static const cXyz BaseYZ;
static const cXyz BaseXYZ;
static DUSK_GAME_DATA const cXyz Zero;
static DUSK_GAME_DATA const cXyz BaseX;
static DUSK_GAME_DATA const cXyz BaseY;
static DUSK_GAME_DATA const cXyz BaseZ;
static DUSK_GAME_DATA const cXyz BaseXY;
static DUSK_GAME_DATA const cXyz BaseXZ;
static DUSK_GAME_DATA const cXyz BaseYZ;
static DUSK_GAME_DATA const cXyz BaseXYZ;
#ifdef __MWERKS__
cXyz() {}
~cXyz() {}
-1
View File
@@ -13,7 +13,6 @@ public:
bool update(s32 chan);
void bzeroBuffer(s32 chan);
private:
/* 0x00 */ s16* mBuffer[4];
};
-1
View File
@@ -41,7 +41,6 @@ public:
static bool checkRadioSensitivity(s32 chan);
static bool isSubmitPlayByRadioSensitivity(s32 chan);
private:
};
#endif /* Z2AUDIOCS_SPKSPEAKERCTRL_H */
-1
View File
@@ -28,7 +28,6 @@ public:
inline SpkData* getData(void) const { return mData; }
inline SpkMixingBuffer* getMixingBuffer(void) const { return mMixingBuffer; }
private:
/* 0x00 */ JKRHeap* mHeap;
/* 0x04 */ SpkData* mData;
/* 0x08 */ SpkMixingBuffer* mMixingBuffer;
-1
View File
@@ -31,7 +31,6 @@ public:
return (SpkTableParams*)mEntryOffset + num;
}
// private:
/* 0x00 */ bool mIsInitialized;
/* 0x04 */ s32 mNumOfSound;
/* 0x08 */ u32 mEntryOffset;
-1
View File
@@ -25,7 +25,6 @@ public:
inline const void* getResource(void) const { return mWaveData; }
inline void* getResource(void) { return mWaveData; }
private:
/* 0x00 */ void* mWaveData;
};
+2 -2
View File
@@ -256,7 +256,7 @@ inline Z2Audience* Z2GetAudience() {
return JASGlobalInstance<Z2Audience>::getInstance();
}
extern s8 data_80451358;
extern s8 data_80451359;
DUSK_GAME_EXTERN s8 data_80451358;
DUSK_GAME_EXTERN s8 data_80451359;
#endif /* Z2AUDIENCE_H */
+1 -1
View File
@@ -34,7 +34,7 @@ public:
bool isResetting() { return mResettingFlag; }
static Z2AudioMgr* getInterface() { return mAudioMgrPtr; }
static Z2AudioMgr* mAudioMgrPtr;
static DUSK_GAME_DATA Z2AudioMgr* mAudioMgrPtr;
/* 0x0514 */ virtual bool startSound(JAISoundID soundID, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr);
/* 0x0518 */ bool mResettingFlag;
+2 -2
View File
@@ -42,8 +42,8 @@ f32 getParamByExp(f32 value, f32 inMin, f32 inMax, f32 exponent, f32 outMin, f32
f32 getRandom(f32 magnitude, f32 exponent, f32 bias);
f32 getRandom_0_1();
extern const f32 cEqualCSlope;
extern const f32 cEqualPSlope;
DUSK_GAME_EXTERN const f32 cEqualCSlope;
DUSK_GAME_EXTERN const f32 cEqualPSlope;
} // namespace Z2Calc
#endif /* Z2CALC_H */
-1
View File
@@ -67,7 +67,6 @@ public:
void playVoice(int);
virtual Z2SoundHandlePool* startCreatureVoice(JAISoundID soundID, s8 reverb);
private:
/* 0xA0 */ s8 mCitizenID;
/* 0xA1 */ s8 field_0xa1;
/* 0xA2 */ bool mLinkSearch;
+1 -1
View File
@@ -175,7 +175,7 @@ struct Z2EnvSeMgr : public JASGlobalInstance<Z2EnvSeMgr> {
STATIC_ASSERT(sizeof(Z2EnvSeMgr) == 0x30C);
extern Z2EnvSeMgr g_mEnvSeMgr;
DUSK_GAME_EXTERN Z2EnvSeMgr g_mEnvSeMgr;
inline Z2EnvSeMgr* Z2GetEnvSeMgr() {
return JASGlobalInstance<Z2EnvSeMgr>::getInstance();
+1 -4
View File
@@ -57,13 +57,12 @@ public:
void setUsingIronBall(bool isUsingIronBall) { mUsingIronBall = isUsingIronBall; }
void setMarkState(u8 state) { mMarkState = state; }
static Z2CreatureLink* mLinkPtr;
static DUSK_GAME_DATA Z2CreatureLink* mLinkPtr;
static Z2CreatureLink* getLink() { return mLinkPtr; }
friend class Z2LinkSoundStarter;
friend struct Z2RideSoundStarter;
private:
/* 0x90 Z2LinkSoundStarter */
/* 0x94 */ Z2SoundObjSimple mKantera;
/* 0xB4 */ Vec field_0xb4;
@@ -123,7 +122,6 @@ public:
virtual void deleteObject();
private:
/* 0x90 */ // Z2RideSoundStarter mSoundStarter;
/* 0x98 */ bool mLinkRiding;
}; // Size: 0x9C
@@ -136,7 +134,6 @@ public:
Z2SoundHandlePool* startFireSound(u16);
Z2SoundHandlePool* startSound(JAISoundID soundID, u32 mapinfo, s8 reverb);
private:
/* 0x20 */ f32 field_0x20;
};
+52 -52
View File
@@ -4,72 +4,72 @@
#include <types.h>
struct Z2Param {
static f32 DISTANCE_MAX;
static f32 MAX_VOLUME_DISTANCE;
static f32 DOLBY_CENTER_VALUE;
static f32 DOLBY_FLONT_DISTANCE_MAX;
static f32 DOLBY_BEHIND_DISTANCE_MAX;
static f32 DISTANCE_FX_PARAM;
static f32 SONIC_SPEED;
static f32 VOL_BGM_DEFAULT;
static f32 VOL_SE_SYSTEM_DEFAULT;
static f32 VOL_SE_LINK_VOICE_DEFAULT;
static f32 VOL_SE_LINK_MOTION_DEFAULT;
static f32 VOL_SE_LINK_FOOTNOTE_DEFAULT;
static f32 VOL_SE_CHAR_VOICE_DEFAULT;
static f32 VOL_SE_CHAR_MOVE_DEFAULT;
static f32 VOL_SE_OBJECT_DEFAULT;
static f32 VOL_SE_ATMOSPHERE_DEFAULT;
static f32 VOL_BGM_TALKING;
static f32 VOL_SE_SYSTEM_TALKING;
static f32 VOL_SE_LINK_VOICE_TALKING;
static f32 VOL_SE_LINK_MOTION_TALKING;
static f32 VOL_SE_LINK_FOOTNOTE_TALKING;
static f32 VOL_SE_CHAR_VOICE_TALKING;
static f32 VOL_SE_CHAR_MOVE_TALKING;
static f32 VOL_SE_OBJECT_TALKING;
static f32 VOL_SE_ATMOSPHERE_TALKING;
static f32 VOL_BGM_PAUSING;
static f32 VOL_SE_SYSTEM_PAUSING;
static f32 VOL_SE_LINK_VOICE_PAUSING;
static f32 VOL_SE_LINK_MOTION_PAUSING;
static f32 VOL_SE_LINK_FOOTNOTE_PAUSING;
static f32 VOL_SE_CHAR_VOICE_PAUSING;
static f32 VOL_SE_CHAR_MOVE_PAUSING;
static f32 VOL_SE_OBJECT_PAUSING;
static f32 VOL_SE_ATMOSPHERE_PAUSING;
static f32 MIN_DISTANCE_VOLUME;
static f32 ENEMY_LASTHIT_MUTE_VOLUME;
static DUSK_GAME_DATA f32 DISTANCE_MAX;
static DUSK_GAME_DATA f32 MAX_VOLUME_DISTANCE;
static DUSK_GAME_DATA f32 DOLBY_CENTER_VALUE;
static DUSK_GAME_DATA f32 DOLBY_FLONT_DISTANCE_MAX;
static DUSK_GAME_DATA f32 DOLBY_BEHIND_DISTANCE_MAX;
static DUSK_GAME_DATA f32 DISTANCE_FX_PARAM;
static DUSK_GAME_DATA f32 SONIC_SPEED;
static DUSK_GAME_DATA f32 VOL_BGM_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_BGM_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_TALKING;
static DUSK_GAME_DATA f32 VOL_BGM_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_PAUSING;
static DUSK_GAME_DATA f32 MIN_DISTANCE_VOLUME;
static DUSK_GAME_DATA f32 ENEMY_LASTHIT_MUTE_VOLUME;
// made up names based on HIO labels
static u8 SCENE_CHANGE_BGM_FADEOUT_TIME;
static u8 BGM_CROSS_FADEIN_TIME;
static u8 BGM_CROSS_FADEOUT_TIME;
static u8 BATTLE_BGM_WAIT_TIME;
static DUSK_GAME_DATA u8 SCENE_CHANGE_BGM_FADEOUT_TIME;
static DUSK_GAME_DATA u8 BGM_CROSS_FADEIN_TIME;
static DUSK_GAME_DATA u8 BGM_CROSS_FADEOUT_TIME;
static DUSK_GAME_DATA u8 BATTLE_BGM_WAIT_TIME;
static f32 ENEMY_NEARBY_DIST;
static f32 BATTLE_FADEIN_DIST;
static f32 BATTLE_FADEOUT_DIST;
static u8 FOUND_TRACK_FI_TIME;
static u8 FOUND_TRACK_FO_TIME;
static u8 CLOSE_BATTLE_TRACK_FI_TIME;
static u8 CLOSE_BATTLE_TRACK_FO_TIME;
static DUSK_GAME_DATA u8 FOUND_TRACK_FI_TIME;
static DUSK_GAME_DATA u8 FOUND_TRACK_FO_TIME;
static DUSK_GAME_DATA u8 CLOSE_BATTLE_TRACK_FI_TIME;
static DUSK_GAME_DATA u8 CLOSE_BATTLE_TRACK_FO_TIME;
static u8 ENDING_BLOW_VOL_DOWN_TIME;
static u8 ENDING_BLOW_VOL_LOWER_TIME;
static u8 ENDING_BLOW_VOL_LOWER_RECOVER_TIME;
static u8 ENDING_BLOW_MIN_FINISH_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_DOWN_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_LOWER_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_LOWER_RECOVER_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_MIN_FINISH_TIME;
static u8 DARK_SE_FILTER_ON;
static u8 DARK_SE_LOW_PASS_FILTER_SETTING;
static u8 SYSTEM_SE_USE_DARK_SE_SETTING;
static DUSK_GAME_DATA u8 DARK_SE_FILTER_ON;
static DUSK_GAME_DATA u8 DARK_SE_LOW_PASS_FILTER_SETTING;
static DUSK_GAME_DATA u8 SYSTEM_SE_USE_DARK_SE_SETTING;
static f32 AUDIBLE_DELTA_RANGE_VOLUME;
static f32 AUDIBLE_DELTA_RANGE_PAN;
static f32 AUDIBLE_DELTA_RANGE_DOLBY;
};
extern u8 data_8045086C;
DUSK_GAME_EXTERN u8 data_8045086C;
#endif /* Z2PARAM_H */
-1
View File
@@ -47,7 +47,6 @@ public:
s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); }
u8 getDemoSeWaveNum() { return loadedDemoWave; }
private:
/* 0x00 */ JAISoundID BGM_ID;
/* 0x04 */ int sceneNum;
/* 0x08 */ int timer;
-1
View File
@@ -84,7 +84,6 @@ public:
void homeMenuSeCallback(s32);
#endif
private:
/* 0x000 */ JAISoundHandle mSoundHandle[24];
/* 0x060 */ JAISoundHandles mSoundHandles;
#if VERSION >= VERSION_WII_USA_R0
-1
View File
@@ -44,7 +44,6 @@ public:
return (Z2SoundHandlePool*)getNth(index);
}
private:
/* 0xC */ u8 handleNum_;
};
-1
View File
@@ -38,7 +38,6 @@ public:
const JAISeqMgr* getSeqMgr() const { return &seqMgr_; }
JAIStreamMgr* getStreamMgr() { return &streamMgr_; }
private:
/* 0x004 */ JAISeMgr seMgr_;
/* 0x728 */ JAISeqMgr seqMgr_;
/* 0x79C */ JAIStreamMgr streamMgr_;
-1
View File
@@ -104,7 +104,6 @@ public:
JSUList<Z2SoundObjBase>* getAllList() { return &allList_; }
#endif
private:
/* 0x00 */ JSUList<Z2CreatureEnemy> field_0x0;
#if PARTIAL_DEBUG || DEBUG
/* 0x0C */ JSUList<Z2SoundObjBase> allList_;
-1
View File
@@ -70,7 +70,6 @@ public:
u8 getReleaseTimer() { return mReleaseTimer; }
u8 getCorrectCurveID() { return mCorrectCurveID; }
private:
/* 0x00 */ JAISoundHandle mWolfHowlHandle;
/* 0x04 */ JAISoundHandle mWindStoneHandle;
/* 0x08 */ JAISoundHandle mGuideHandle;
+10 -10
View File
@@ -12,18 +12,18 @@ public:
BOOL cDmrNowMidnaTalk();
extern u8 cDmr_SkipInfo;
extern u8 data_80450C99;
extern u8 data_80450C9A;
extern u8 data_80450C9B;
extern u8 data_80450C9C;
extern u8 data_80450C9D;
extern u8 data_80450C9E;
extern u8 cDmr_FishingWether;
extern u8 data_80450CA0;
DUSK_GAME_EXTERN u8 cDmr_SkipInfo;
DUSK_GAME_EXTERN u8 data_80450C99;
DUSK_GAME_EXTERN u8 data_80450C9A;
DUSK_GAME_EXTERN u8 data_80450C9B;
DUSK_GAME_EXTERN u8 data_80450C9C;
DUSK_GAME_EXTERN u8 data_80450C9D;
DUSK_GAME_EXTERN u8 data_80450C9E;
DUSK_GAME_EXTERN u8 cDmr_FishingWether;
DUSK_GAME_EXTERN u8 data_80450CA0;
extern "C" {
extern JPTraceParticleCallBack4 JPTracePCB4;
DUSK_GAME_EXTERN JPTraceParticleCallBack4 JPTracePCB4;
}
void debug_actor_create();
+130 -152
View File
@@ -57,8 +57,8 @@ public:
void setNowOffsetX(f32 i_offset) { mNowOffsetX = i_offset; }
void setNowOffsetY(f32 i_offset) { mNowOffsetY = i_offset; }
static bool m_eye_move_flg;
static u8 m_morf_frame;
static DUSK_GAME_DATA bool m_eye_move_flg;
static DUSK_GAME_DATA u8 m_morf_frame;
/* 0x0F4 */ mutable f32 field_0xf4;
/* 0x0F8 */ mutable f32 field_0xf8;
@@ -77,7 +77,6 @@ public:
virtual void draw();
virtual ~daAlink_blur_c() {}
// private:
/* 0x010 */ ResTIMG* m_blurTex;
/* 0x014 */ int field_0x14;
/* 0x018 */ u8 field_0x18[4];
@@ -113,7 +112,6 @@ public:
void onAppearFlg() { mAppearFlg = true; }
private:
/* 0x04 */ s16 mHitFlg;
/* 0x06 */ s16 mAppearFlg;
/* 0x08 */ f32 mKeepMinY;
@@ -3913,20 +3911,20 @@ public:
static u32 getOtherHeapSize() { return 0xF0A60; }
static daAlink_BckData const m_mainBckShield[20];
static daAlink_BckData const m_mainBckSword[5];
static daAlink_BckData const m_mainBckFishing[28];
static daAlink_AnmData const m_anmDataTable[ANM_MAX];
static daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX];
static daAlink_FaceTexData const m_faceTexDataTable[];
static Vec const m_handLeftOutSidePos;
static Vec const m_handRightOutSidePos;
static Vec const m_handLeftInSidePos;
static Vec const m_handRightInSidePos;
static DUSK_GAME_DATA daAlink_BckData const m_mainBckShield[20];
static DUSK_GAME_DATA daAlink_BckData const m_mainBckSword[5];
static DUSK_GAME_DATA daAlink_BckData const m_mainBckFishing[28];
static DUSK_GAME_DATA daAlink_AnmData const m_anmDataTable[ANM_MAX];
static DUSK_GAME_DATA daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX];
static DUSK_GAME_DATA daAlink_FaceTexData const m_faceTexDataTable[];
static DUSK_GAME_DATA Vec const m_handLeftOutSidePos;
static DUSK_GAME_DATA Vec const m_handRightOutSidePos;
static DUSK_GAME_DATA Vec const m_handLeftInSidePos;
static DUSK_GAME_DATA Vec const m_handRightInSidePos;
static const daAlink_procInitTable m_procInitTable[];
static daAlink_procFunc m_demoInitTable[];
static const EffParamProc m_fEffParamProc[];
static DUSK_GAME_DATA const daAlink_procInitTable m_procInitTable[];
static DUSK_GAME_DATA daAlink_procFunc m_demoInitTable[];
static DUSK_GAME_DATA const EffParamProc m_fEffParamProc[];
/* 0x0062C */ request_of_phase_process_class mPhaseReq;
/* 0x00634 */ const char* mArcName;
@@ -4558,30 +4556,8 @@ public:
bool checkAimContext();
bool checkAimInputContext();
void onIronBallChainInterpCallback();
static const int IRON_BALL_CHAIN_COUNT = 102;
cXyz mIBChainInterpPrevPos[IRON_BALL_CHAIN_COUNT];
cXyz mIBChainInterpCurrPos[IRON_BALL_CHAIN_COUNT];
csXyz mIBChainInterpPrevAngle[IRON_BALL_CHAIN_COUNT];
csXyz mIBChainInterpCurrAngle[IRON_BALL_CHAIN_COUNT];
cXyz mIBChainInterpPrevHandRoot;
cXyz mIBChainInterpCurrHandRoot;
bool mIBChainInterpPrevValid;
bool mIBChainInterpCurrValid;
cXyz mHsChainInterpPrevTop;
cXyz mHsChainInterpCurrTop;
cXyz mHsChainInterpPrevRoot;
cXyz mHsChainInterpCurrRoot;
cXyz mHsChainInterpPrevSubRoot;
cXyz mHsChainInterpCurrSubRoot;
cXyz mHsChainInterpPrevSubTop;
cXyz mHsChainInterpCurrSubTop;
bool mHsChainInterpPrevValid;
bool mHsChainInterpCurrValid;
bool mIsRollstab = false;
void* mAnmBuffers[3] = {};
#endif
}; // Size: 0x385C
@@ -4649,7 +4625,7 @@ struct daAlinkHIO_basic_c1 {
class daAlinkHIO_basic_c0 {
public:
static daAlinkHIO_basic_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_basic_c1 const m;
};
class daAlinkHIO_basic_c : public daAlinkHIO_data_c {
@@ -4700,7 +4676,7 @@ public:
class daAlinkHIO_move_c0 {
public:
static daAlinkHIO_move_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_move_c1 const m;
};
class daAlinkHIO_move_c : public daAlinkHIO_data_c {
@@ -4746,7 +4722,7 @@ public:
class daAlinkHIO_atnMove_c0 {
public:
static daAlinkHIO_atnMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_atnMove_c1 const m;
};
class daAlinkHIO_atnMove_c : public daAlinkHIO_data_c {
@@ -4792,7 +4768,7 @@ public:
class daAlinkHIO_noActAtnMove_c0 {
public:
static daAlinkHIO_noActAtnMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_noActAtnMove_c1 const m;
};
class daAlinkHIO_noActAtnMove_c : public daAlinkHIO_data_c {
@@ -4834,7 +4810,7 @@ public:
class daAlinkHIO_frontRoll_c0 {
public:
static daAlinkHIO_frontRoll_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_frontRoll_c1 const m;
};
class daAlinkHIO_frontRoll_c : public daAlinkHIO_data_c {
@@ -4864,7 +4840,7 @@ public:
class daAlinkHIO_backJump_c0 {
public:
static daAlinkHIO_backJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_backJump_c1 const m;
};
class daAlinkHIO_backJump_c : public daAlinkHIO_data_c {
@@ -4898,7 +4874,7 @@ public:
class daAlinkHIO_sideStep_c0 {
public:
static daAlinkHIO_sideStep_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_sideStep_c1 const m;
};
class daAlinkHIO_sideStep_c : public daAlinkHIO_data_c {
@@ -4936,7 +4912,7 @@ public:
class daAlinkHIO_slide_c0 {
public:
static daAlinkHIO_slide_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_slide_c1 const m;
};
class daAlinkHIO_slide_c : public daAlinkHIO_data_c {
@@ -4964,27 +4940,27 @@ public:
class daAlinkHIO_cutNmV_c0 {
public:
static daAlinkHIO_cutNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m;
};
class daAlinkHIO_cutNmL_c0 {
public:
static daAlinkHIO_cutNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m;
};
class daAlinkHIO_cutNmR_c0 {
public:
static daAlinkHIO_cutNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m;
};
class daAlinkHIO_cutNmSL_c0 {
public:
static daAlinkHIO_cutNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m;
};
class daAlinkHIO_cutNmSR_c0 {
public:
static daAlinkHIO_cutNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m;
};
class daAlinkHIO_cutNormal_c : public daAlinkHIO_data_c {
@@ -5015,32 +4991,32 @@ public:
class daAlinkHIO_cutFnL_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFnV_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFnS_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFnSl_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFnSm_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFnR_c0 {
public:
static daAlinkHIO_cutFinish_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m;
};
class daAlinkHIO_cutFinish_c : public daAlinkHIO_data_c {
@@ -5077,7 +5053,7 @@ public:
class daAlinkHIO_cutFnJU_c0 {
public:
static daAlinkHIO_cutFnJU_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutFnJU_c1 const m;
};
class daAlinkHIO_cutFnJU_c : public daAlinkHIO_data_c {
@@ -5104,17 +5080,17 @@ public:
class daAlinkHIO_cutDaL_c0 {
public:
static daAlinkHIO_cutDash_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m;
};
class daAlinkHIO_cutDaR_c0 {
public:
static daAlinkHIO_cutDash_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m;
};
class daAlinkHIO_cutDaCharge_c0 {
public:
static daAlinkHIO_cutDash_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m;
};
class daAlinkHIO_cutDash_c : public daAlinkHIO_data_c {
@@ -5146,7 +5122,7 @@ public:
class daAlinkHIO_cutJump_c0 {
public:
static daAlinkHIO_cutJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutJump_c1 const m;
};
class daAlinkHIO_cutJump_c : public daAlinkHIO_data_c {
@@ -5197,7 +5173,7 @@ public:
class daAlinkHIO_cutTurn_c0 {
public:
static daAlinkHIO_cutTurn_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutTurn_c1 const m;
};
class daAlinkHIO_cutTurn_c : public daAlinkHIO_data_c {
@@ -5225,22 +5201,22 @@ public:
class daAlinkHIO_hoCutLA_c0 {
public:
static daAlinkHIO_hoCut_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m;
};
class daAlinkHIO_hoCutLB_c0 {
public:
static daAlinkHIO_hoCut_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m;
};
class daAlinkHIO_hoCutRA_c0 {
public:
static daAlinkHIO_hoCut_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m;
};
class daAlinkHIO_hoCutRB_c0 {
public:
static daAlinkHIO_hoCut_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m;
};
class daAlinkHIO_hoCut_c : public daAlinkHIO_data_c {
@@ -5273,7 +5249,7 @@ public:
class daAlinkHIO_hoCutCharge_c0 {
public:
static daAlinkHIO_hoCutCharge_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hoCutCharge_c1 const m;
};
class daAlinkHIO_hoCutCharge_c : public daAlinkHIO_data_c {
@@ -5307,7 +5283,7 @@ public:
class daAlinkHIO_cutDown_c0 {
public:
static daAlinkHIO_cutDown_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutDown_c1 const m;
};
class daAlinkHIO_cutDown_c : public daAlinkHIO_data_c {
@@ -5343,7 +5319,7 @@ public:
class daAlinkHIO_cutHead_c0 {
public:
static daAlinkHIO_cutHead_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutHead_c1 const m;
};
class daAlinkHIO_cutHead_c : public daAlinkHIO_data_c {
@@ -5380,7 +5356,7 @@ public:
class daAlinkHIO_cutLargeJump_c0 {
public:
static daAlinkHIO_cutLargeJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cutLargeJump_c1 const m;
};
class daAlinkHIO_cutLargeJump_c : public daAlinkHIO_data_c {
@@ -5457,7 +5433,7 @@ public:
static daAlinkHIO_cutDown_c0 const mCutDown;
static daAlinkHIO_cutHead_c0 const mCutHead;
static daAlinkHIO_cutLargeJump_c0 const mCutLargeJump;
static daAlinkHIO_cut_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_cut_c1 const m;
};
class daAlinkHIO_cut_c : public daAlinkHIO_data_c {
@@ -5513,12 +5489,12 @@ public:
class daAlinkHIO_gAtPush_c0 {
public:
static daAlinkHIO_guardAttack_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_guardAttack_c1 const m;
};
class daAlinkHIO_gAtKick_c0 {
public:
static daAlinkHIO_guardAttack_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_guardAttack_c1 const m;
};
class daAlinkHIO_guardAttack_c : public daAlinkHIO_data_c {
@@ -5550,7 +5526,7 @@ public:
class daAlinkHIO_turnMove_c0 {
public:
static daAlinkHIO_turnMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_turnMove_c1 const m;
};
class daAlinkHIO_turnMove_c : public daAlinkHIO_data_c {
@@ -5595,7 +5571,7 @@ public:
static daAlinkHIO_gAtPush_c0 const mAtPush;
static daAlinkHIO_gAtKick_c0 const mAtKick;
static daAlinkHIO_turnMove_c0 const mTurnMove;
static daAlinkHIO_guard_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_guard_c1 const m;
};
class daAlinkHIO_guard_c : public daAlinkHIO_data_c {
@@ -5634,7 +5610,7 @@ public:
class daAlinkHIO_crouch_c0 {
public:
static daAlinkHIO_crouch_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_crouch_c1 const m;
};
class daAlinkHIO_crouch_c : public daAlinkHIO_data_c {
@@ -5689,7 +5665,7 @@ public:
class daAlinkHIO_autoJump_c0 {
public:
static daAlinkHIO_autoJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_autoJump_c1 const m;
};
class daAlinkHIO_autoJump_c : public daAlinkHIO_data_c {
@@ -5719,7 +5695,7 @@ public:
class daAlinkHIO_smallJump_c0 {
public:
static daAlinkHIO_smallJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_smallJump_c1 const m;
};
class daAlinkHIO_smallJump_c : public daAlinkHIO_data_c {
@@ -5748,7 +5724,7 @@ public:
class daAlinkHIO_wallCatch_c0 {
public:
static daAlinkHIO_wallCatch_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wallCatch_c1 const m;
};
class daAlinkHIO_wallCatch_c : public daAlinkHIO_data_c {
@@ -5774,7 +5750,7 @@ public:
class daAlinkHIO_wallFall_c0 {
public:
static daAlinkHIO_wallFall_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wallFall_c1 const m;
};
class daAlinkHIO_wallFall_c : public daAlinkHIO_data_c {
@@ -5803,7 +5779,7 @@ public:
class daAlinkHIO_wallMove_c0 {
public:
static daAlinkHIO_wallMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wallMove_c1 const m;
};
class daAlinkHIO_wallMove_c : public daAlinkHIO_data_c {
@@ -5839,7 +5815,7 @@ public:
static daAlinkHIO_wallCatch_c0 const mWallCatch;
static daAlinkHIO_wallFall_c0 const mWallFall;
static daAlinkHIO_wallMove_c0 const mWallMove;
static daAlinkHIO_wallHang_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wallHang_c1 const m;
};
class daAlinkHIO_wallHang_c : public daAlinkHIO_data_c {
@@ -5886,7 +5862,7 @@ public:
class daAlinkHIO_pushpull_c0 {
public:
static daAlinkHIO_pushpull_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_pushpull_c1 const m;
};
class daAlinkHIO_pushpull_c : public daAlinkHIO_data_c {
@@ -5920,7 +5896,7 @@ public:
class daAlinkHIO_damNormal_c0 {
public:
static daAlinkHIO_damNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damNormal_c1 const m;
};
class daAlinkHIO_damNormal_c : public daAlinkHIO_data_c {
@@ -5959,12 +5935,12 @@ public:
class daAlinkHIO_damLarge_c0 {
public:
static daAlinkHIO_damLaHu_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damLaHu_c1 const m;
};
class daAlinkHIO_damHuge_c0 {
public:
static daAlinkHIO_damLaHu_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damLaHu_c1 const m;
};
class daAlinkHIO_damLaHu_c : public daAlinkHIO_data_c {
@@ -5992,7 +5968,7 @@ public:
class daAlinkHIO_damHorse_c0 {
public:
static daAlinkHIO_damHorse_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damHorse_c1 const m;
};
class daAlinkHIO_damHorse_c : public daAlinkHIO_data_c {
@@ -6027,7 +6003,7 @@ public:
class daAlinkHIO_damFall_c0 {
public:
static daAlinkHIO_damFall_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damFall_c1 const m;
};
class daAlinkHIO_damFall_c : public daAlinkHIO_data_c {
@@ -6057,7 +6033,7 @@ public:
class daAlinkHIO_damCaught_c0 {
public:
static daAlinkHIO_damCaught_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damCaught_c1 const m;
};
class daAlinkHIO_damCaught_c : public daAlinkHIO_data_c {
@@ -6093,7 +6069,7 @@ public:
class daAlinkHIO_damSwim_c0 {
public:
static daAlinkHIO_damSwim_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damSwim_c1 const m;
};
class daAlinkHIO_damSwim_c : public daAlinkHIO_data_c {
@@ -6140,7 +6116,7 @@ public:
class daAlinkHIO_damage_c0 {
public:
static daAlinkHIO_damage_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_damage_c1 const m;
static daAlinkHIO_damNormal_c0 const mDamNormal;
static daAlinkHIO_damLarge_c0 const mDamLarge;
static daAlinkHIO_damHuge_c0 const mDamHuge;
@@ -6192,7 +6168,7 @@ public:
class daAlinkHIO_horse_c0 {
public:
static daAlinkHIO_horse_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_horse_c1 const m;
};
class daAlinkHIO_horse_c : public daAlinkHIO_data_c {
@@ -6231,7 +6207,7 @@ public:
class daAlinkHIO_canoe_c0 {
public:
static daAlinkHIO_canoe_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_canoe_c1 const m;
};
class daAlinkHIO_canoe_c : public daAlinkHIO_data_c {
@@ -6276,7 +6252,7 @@ public:
class daAlinkHIO_bow_c0 {
public:
static daAlinkHIO_bow_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_bow_c1 const m;
};
class daAlinkHIO_bow_c : public daAlinkHIO_data_c {
@@ -6312,7 +6288,7 @@ public:
class daAlinkHIO_boom_c0 {
public:
static daAlinkHIO_boom_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_boom_c1 const m;
};
class daAlinkHIO_boom_c : public daAlinkHIO_data_c {
@@ -6356,7 +6332,7 @@ public:
class daAlinkHIO_bomb_c0 {
public:
static daAlinkHIO_bomb_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_bomb_c1 const m;
};
class daAlinkHIO_bomb_c : public daAlinkHIO_data_c {
@@ -6391,7 +6367,7 @@ public:
class daAlinkHIO_huLight_c0 {
public:
static daAlinkHIO_huLight_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_huLight_c1 const m;
};
class daAlinkHIO_wlLight_c1 {
@@ -6410,7 +6386,7 @@ public:
class daAlinkHIO_wlLight_c0 {
public:
static daAlinkHIO_wlLight_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlLight_c1 const m;
};
class daAlinkHIO_zwLight_c1 { // may be wrong
@@ -6429,7 +6405,7 @@ public:
class daAlinkHIO_zwLight_c0 {
public:
static daAlinkHIO_zwLight_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_zwLight_c1 const m;
};
class daAlinkHIO_light_c : public daAlinkHIO_data_c {
@@ -6465,7 +6441,7 @@ public:
class daAlinkHIO_kandelaar_c0 {
public:
static daAlinkHIO_kandelaar_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_kandelaar_c1 const m;
};
class daAlinkHIO_kandelaar_c : public daAlinkHIO_data_c {
@@ -6504,7 +6480,7 @@ public:
class daAlinkHIO_magneBoots_c0 {
public:
static daAlinkHIO_magneBoots_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_magneBoots_c1 const m;
};
class daAlinkHIO_magneBoots_c : public daAlinkHIO_data_c {
@@ -6530,7 +6506,7 @@ public:
class daAlinkHIO_fmChain_c0 {
public:
static daAlinkHIO_fmChain_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_fmChain_c1 const m;
};
class daAlinkHIO_fmChain_c : public daAlinkHIO_data_c {
@@ -6570,7 +6546,7 @@ public:
class daAlinkHIO_hookshot_c0 {
public:
static daAlinkHIO_hookshot_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_hookshot_c1 const m;
};
class daAlinkHIO_hookshot_c : public daAlinkHIO_data_c {
@@ -6608,7 +6584,7 @@ public:
class daAlinkHIO_spinner_c0 {
public:
static daAlinkHIO_spinner_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_spinner_c1 const m;
};
class daAlinkHIO_spinner_c : public daAlinkHIO_data_c {
@@ -6664,7 +6640,7 @@ public:
class daAlinkHIO_ironBall_c0 {
public:
static daAlinkHIO_ironBall_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_ironBall_c1 const m;
};
class daAlinkHIO_ironBall_c : public daAlinkHIO_data_c {
@@ -6694,7 +6670,7 @@ public:
class daAlinkHIO_copyRod_c0 {
public:
static daAlinkHIO_copyRod_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_copyRod_c1 const m;
};
class daAlinkHIO_copyRod_c : public daAlinkHIO_data_c {
@@ -6722,7 +6698,7 @@ public:
class daAlinkHIO_pickUp_c0 {
public:
static daAlinkHIO_pickUp_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_pickUp_c1 const m;
};
class daAlinkHIO_pickUp_c : public daAlinkHIO_data_c {
@@ -6769,7 +6745,7 @@ public:
class daAlinkHIO_board_c0 {
public:
static daAlinkHIO_board_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_board_c1 const m;
};
class daAlinkHIO_board_c : public daAlinkHIO_data_c {
@@ -6802,7 +6778,7 @@ public:
class daAlinkHIO_bottle_c0 {
public:
static daAlinkHIO_bottle_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_bottle_c1 const m;
};
class daAlinkHIO_bottle_c : public daAlinkHIO_data_c {
@@ -6850,7 +6826,7 @@ public:
static daAlinkHIO_ironBall_c0 const mIronBall;
static daAlinkHIO_copyRod_c0 const mCopyRod;
static daAlinkHIO_zwLight_c0 const mZoraArmorPL;
static daAlinkHIO_item_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_item_c1 const m;
};
class daAlinkHIO_item_c : public daAlinkHIO_data_c {
@@ -6909,7 +6885,7 @@ public:
class daAlinkHIO_ladder_c0 {
public:
static daAlinkHIO_ladder_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_ladder_c1 const m;
};
class daAlinkHIO_ladder_c : public daAlinkHIO_data_c {
@@ -6949,7 +6925,7 @@ public:
class daAlinkHIO_roofHang_c0 {
public:
static daAlinkHIO_roofHang_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_roofHang_c1 const m;
};
class daAlinkHIO_roofHang_c : public daAlinkHIO_data_c {
@@ -6987,7 +6963,7 @@ public:
class daAlinkHIO_grab_c0 {
public:
static daAlinkHIO_grab_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_grab_c1 const m;
};
class daAlinkHIO_grab_c : public daAlinkHIO_data_c {
@@ -7062,7 +7038,7 @@ public:
class daAlinkHIO_swim_c0 {
public:
static daAlinkHIO_swim_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_swim_c1 const m;
};
class daAlinkHIO_swim_c : public daAlinkHIO_data_c {
@@ -7138,7 +7114,7 @@ public:
class daAlinkHIO_wlMove_c0 {
public:
static daAlinkHIO_wlMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlMove_c1 const m;
};
class daAlinkHIO_wlMove_c : public daAlinkHIO_data_c {
@@ -7181,7 +7157,7 @@ public:
class daAlinkHIO_wlMoveNoP_c0 {
public:
static daAlinkHIO_wlMoveNoP_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlMoveNoP_c1 const m;
};
class daAlinkHIO_wlMoveNoP_c : public daAlinkHIO_data_c {
@@ -7220,7 +7196,7 @@ public:
class daAlinkHIO_wlAtnMove_c0 {
public:
static daAlinkHIO_wlAtnMove_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtnMove_c1 const m;
};
class daAlinkHIO_wlAtnMove_c : public daAlinkHIO_data_c {
@@ -7252,7 +7228,7 @@ public:
class daAlinkHIO_wlHowl_c0 {
public:
static daAlinkHIO_wlHowl_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlHowl_c1 const m;
};
class daAlinkHIO_wlHowl_c : public daAlinkHIO_data_c {
@@ -7286,7 +7262,7 @@ public:
class daAlinkHIO_wlSideStep_c0 {
public:
static daAlinkHIO_wlSideStep_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlSideStep_c1 const m;
};
class daAlinkHIO_wlSideStep_c : public daAlinkHIO_data_c {
@@ -7316,7 +7292,7 @@ public:
class daAlinkHIO_wlBackJump_c0 {
public:
static daAlinkHIO_wlBackJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlBackJump_c1 const m;
};
class daAlinkHIO_wlBackJump_c : public daAlinkHIO_data_c {
@@ -7361,7 +7337,7 @@ public:
class daAlinkHIO_wlAutoJump_c0 {
public:
static daAlinkHIO_wlAutoJump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAutoJump_c1 const m;
};
class daAlinkHIO_wlAutoJump_c : public daAlinkHIO_data_c {
@@ -7390,7 +7366,7 @@ public:
class daAlinkHIO_wlPush_c0 {
public:
static daAlinkHIO_wlPush_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlPush_c1 const m;
};
class daAlinkHIO_wlPush_c : public daAlinkHIO_data_c {
@@ -7426,7 +7402,7 @@ public:
class daAlinkHIO_wlLie_c0 {
public:
static daAlinkHIO_wlLie_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlLie_c1 const m;
};
class daAlinkHIO_wlLie_c : public daAlinkHIO_data_c {
@@ -7465,7 +7441,7 @@ public:
class daAlinkHIO_wlWallHang_c0 {
public:
static daAlinkHIO_wlWallHang_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlWallHang_c1 const m;
};
class daAlinkHIO_wlWallHang_c : public daAlinkHIO_data_c {
@@ -7497,7 +7473,7 @@ public:
class daAlinkHIO_wlDamNormal_c0 {
public:
static daAlinkHIO_wlDamNormal_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamNormal_c1 const m;
};
class daAlinkHIO_wlDamNormal_c : public daAlinkHIO_data_c {
@@ -7532,12 +7508,12 @@ public:
class daAlinkHIO_wlDamLarge_c0 {
public:
static daAlinkHIO_wlDamLaHu_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamLaHu_c1 const m;
};
class daAlinkHIO_wlDamHuge_c0 {
public:
static daAlinkHIO_wlDamLaHu_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamLaHu_c1 const m;
};
class daAlinkHIO_wlDamLaHu_c : public daAlinkHIO_data_c {
@@ -7566,7 +7542,7 @@ public:
class daAlinkHIO_wlDamCaught_c0 {
public:
static daAlinkHIO_wlDamCaught_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamCaught_c1 const m;
};
class daAlinkHIO_wlDamCaught_c : public daAlinkHIO_data_c {
@@ -7599,7 +7575,7 @@ public:
class daAlinkHIO_wlDamFall_c0 {
public:
static daAlinkHIO_wlDamFall_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamFall_c1 const m;
};
class daAlinkHIO_wlDamFall_c : public daAlinkHIO_data_c {
@@ -7626,7 +7602,7 @@ public:
class daAlinkHIO_wlDamage_c0 {
public:
static daAlinkHIO_wlDamage_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlDamage_c1 const m;
static daAlinkHIO_wlDamNormal_c0 const mNormal;
static daAlinkHIO_wlDamLarge_c0 const mLarge;
static daAlinkHIO_wlDamHuge_c0 const mHuge;
@@ -7676,7 +7652,7 @@ public:
class daAlinkHIO_wlSlide_c0 {
public:
static daAlinkHIO_wlSlide_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlSlide_c1 const m;
};
class daAlinkHIO_wlSlide_c : public daAlinkHIO_data_c {
@@ -7711,7 +7687,7 @@ public:
class daAlinkHIO_wlRope_c0 {
public:
static daAlinkHIO_wlRope_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlRope_c1 const m;
};
class daAlinkHIO_wlRope_c : public daAlinkHIO_data_c {
@@ -7747,17 +7723,17 @@ public:
class daAlinkHIO_wlAtWaTl_c0 {
public:
static daAlinkHIO_wlAtWait_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m;
};
class daAlinkHIO_wlAtWaSc_c0 {
public:
static daAlinkHIO_wlAtWait_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m;
};
class daAlinkHIO_wlAtWaLr_c0 {
public:
static daAlinkHIO_wlAtWait_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m;
};
class daAlinkHIO_wlAtWait_c : public daAlinkHIO_data_c {
@@ -7784,7 +7760,7 @@ public:
class daAlinkHIO_wlAtRoll_c0 {
public:
static daAlinkHIO_wlAtRoll_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtRoll_c1 const m;
};
class daAlinkHIO_wlAtRoll_c : public daAlinkHIO_data_c {
@@ -7819,7 +7795,7 @@ public:
class daAlinkHIO_wlAtNjump_c0 {
public:
static daAlinkHIO_wlAtNjump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtNjump_c1 const m;
};
class daAlinkHIO_wlAtNjump_c : public daAlinkHIO_data_c {
@@ -7860,7 +7836,7 @@ public:
class daAlinkHIO_wlAtCjump_c0 {
public:
static daAlinkHIO_wlAtCjump_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtCjump_c1 const m;
};
class daAlinkHIO_wlAtCjump_c : public daAlinkHIO_data_c {
@@ -7888,7 +7864,7 @@ public:
class daAlinkHIO_wlAtLand_c0 {
public:
static daAlinkHIO_wlAtLand_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtLand_c1 const m;
};
class daAlinkHIO_wlAtLand_c : public daAlinkHIO_data_c {
@@ -7924,7 +7900,7 @@ public:
class daAlinkHIO_wlAtDown_c0 {
public:
static daAlinkHIO_wlAtDown_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtDown_c1 const m;
};
class daAlinkHIO_wlAtDown_c : public daAlinkHIO_data_c {
@@ -7961,7 +7937,7 @@ public:
class daAlinkHIO_wlAtLock_c0 {
public:
static daAlinkHIO_wlAtLock_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtLock_c1 const m;
};
class daAlinkHIO_wlAtLock_c : public daAlinkHIO_data_c {
@@ -8001,7 +7977,7 @@ public:
class daAlinkHIO_wlAtBite_c0 {
public:
static daAlinkHIO_wlAtBite_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAtBite_c1 const m;
};
class daAlinkHIO_wlAtBite_c : public daAlinkHIO_data_c {
@@ -8046,7 +8022,7 @@ public:
static daAlinkHIO_wlAtDown_c0 const mWlAtDown;
static daAlinkHIO_wlAtLock_c0 const mWlAtLock;
static daAlinkHIO_wlAtBite_c0 const mWlAtBite;
static daAlinkHIO_wlAttack_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlAttack_c1 const m;
};
class daAlinkHIO_wlAttack_c : public daAlinkHIO_data_c {
@@ -8093,7 +8069,7 @@ public:
class daAlinkHIO_wlPoint_c0 {
public:
static daAlinkHIO_wlPoint_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlPoint_c1 const m;
};
class daAlinkHIO_wlPoint_c : public daAlinkHIO_data_c {
@@ -8129,7 +8105,7 @@ public:
class daAlinkHIO_wlChain_c0 {
public:
static daAlinkHIO_wlChain_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlChain_c1 const m;
};
class daAlinkHIO_wlChain_c : public daAlinkHIO_data_c {
@@ -8186,7 +8162,7 @@ public:
class daAlinkHIO_wlSwim_c0 {
public:
static daAlinkHIO_wlSwim_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlSwim_c1 const m;
};
class daAlinkHIO_wlSwim_c : public daAlinkHIO_data_c {
@@ -8215,7 +8191,7 @@ public:
class daAlinkHIO_wlGrab_c0 {
public:
static daAlinkHIO_wlGrab_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlGrab_c1 const m;
};
class daAlinkHIO_wlGrab_c : public daAlinkHIO_data_c {
@@ -8245,7 +8221,7 @@ public:
class daAlinkHIO_wlBall_c0 {
public:
static daAlinkHIO_wlBall_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wlBall_c1 const m;
};
class daAlinkHIO_wlBall_c : public daAlinkHIO_data_c {
@@ -8300,7 +8276,7 @@ public:
static daAlinkHIO_wlSwim_c0 const mWlSwim;
static daAlinkHIO_wlGrab_c0 const mWlGrab;
static daAlinkHIO_wlBall_c0 const mWlBall;
static daAlinkHIO_wolf_c1 const m;
static DUSK_GAME_DATA daAlinkHIO_wolf_c1 const m;
};
class daAlinkHIO_wolf_c : public daAlinkHIO_data_c {
@@ -8449,8 +8425,10 @@ struct daAlink_cutHorseParamTbl {
/* 0xA */ u8 m_cutType;
}; // Size: 0xC
#if !TARGET_PC
inline BOOL dComIfGs_isTransformLV(int i_no);
inline BOOL dComIfGs_isEventBit(const u16);
#endif
static fopAc_ac_c* daAlink_searchPortal(fopAc_ac_c* i_actor, void* i_data);
static fopAc_ac_c* daAlink_searchCanoe(fopAc_ac_c* i_actor, void* i_data);
+1 -2
View File
@@ -110,7 +110,6 @@ public:
void setModelMatrix(MtxP mtx) { mpModel->setBaseTRMtx(mtx); }
private:
/* 0x568 */ J3DModel* mpModel;
/* 0x56C */ dBgS_ArrowLinChk field_0x56c;
/* 0x5DC */ dBgS_ObjLinChk field_0x5dc;
@@ -161,7 +160,7 @@ private:
/* 0xA10 */ dPa_hermiteEcallBack_c field_0xa10;
/* 0xA28 */ int (daArrow_c::*mProcFunc)();
static s16 m_count;
static DUSK_GAME_DATA s16 m_count;
};
STATIC_ASSERT(sizeof(daArrow_c) == 0xA34);
-1
View File
@@ -82,7 +82,6 @@ public:
u8 onTarget() { return mTarget = true; }
u8 isBack() { return arg0; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpModelMorf;
/* 0x05B8 */ J3DModel* mpPartModel;
-1
View File
@@ -189,7 +189,6 @@ public:
void onDemo() { mIsDemo = true; }
void offDemo() { mIsDemo = false; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x05B8 */ mDoExt_McaMorfSO* mpSwordMorf;
-6
View File
@@ -189,12 +189,6 @@ public:
/* 0x2740 */ u8 field_0x2740;
/* 0x2744 */ dMsgFlow_c mMsgFlow;
#if TARGET_PC
cXyz mReinsInterpPrev[2][16];
cXyz mReinsInterpCurr[2][16];
cXyz mReinsTexInterpPrev[2];
cXyz mReinsTexInterpCurr[2];
bool mReinsInterpPrevValid;
bool mReinsInterpCurrValid;
s8 mDemoCamSyncTicks;
#endif
};
-1
View File
@@ -92,7 +92,6 @@ public:
bool isDown() { return mDownFlag != 0; }
bool isAppear() { return mAppearFlag != 0; }
private:
/* 0x05AC */ request_of_phase_process_class mMgnPhase;
/* 0x05B4 */ request_of_phase_process_class mMgnePhase;
/* 0x05BC */ mDoExt_McaMorfSO* mpMgnModelMorf;
-1
View File
@@ -131,7 +131,6 @@ public:
int CreateHeap();
int create();
private:
/* 0x05AC */ request_of_phase_process_class mPhaseReq1;
/* 0x05B4 */ request_of_phase_process_class mPhaseReq2;
/* 0x05BC */ J3DModel* mpPartModels[16];
-1
View File
@@ -80,7 +80,6 @@ public:
void setDrawOff() { mIsInactive = 1; }
bool isEnemyDemoEnd() { return (u8)mIsEnemyDemoEnd != 0; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase1;
/* 0x05B4 */ request_of_phase_process_class mPhase2;
/* 0x05BC */ request_of_phase_process_class mPhase3;
-1
View File
@@ -51,7 +51,6 @@ public:
void setSubNumber(int i_subNumber) { mSubNumber = i_subNumber; }
private:
/* 0x5AC */ request_of_phase_process_class mPhase;
/* 0x5B4 */ J3DModel* mpModel;
/* 0x5B8 */ Z2Creature mCreatureSound;
-1
View File
@@ -24,7 +24,6 @@ public:
int _delete();
int create();
private:
/* 0x5AC */ Mtx field_0x5ac;
/* 0x5DC */ cXyz field_0x5dc;
/* 0x5E8 */ f32 field_0x5e8;
-1
View File
@@ -33,7 +33,6 @@ public:
bool isSearchContinue() { return mSearchContinue != false; }
void offSearchContinue() { mSearchContinue = false; }
private:
/* 0x5AC */ request_of_phase_process_class mPhase;
/* 0x5B4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5B8 */ mDoExt_brkAnm* mpBrk;
+1 -1
View File
@@ -67,7 +67,7 @@ public:
void hide() { mIsVisible = 0; }
u8 isVisible() { return mIsVisible; }
static daBalloon2D_c* myclass;
static DUSK_GAME_DATA daBalloon2D_c* myclass;
struct ScoreCount {
cXyz field_0x0;
-1
View File
@@ -57,7 +57,6 @@ public:
inline int execute();
inline int isDelete();
private:
/* 0x568 */ u8 field_0x568[0x570 - 0x568];
/* 0x570 */ daBg_Part mBgParts[6];
/* 0x5E8 */ dBgW* mpBgW;
+4 -4
View File
@@ -89,10 +89,10 @@ public:
void setAction(u8 i_action) { mAction = i_action; }
static createHeapFunc mCreateHeapFunc[];
static createInitFunc mCreateInitFunc[];
static executeFunc mExecuteFunc[];
static tgSetFunc mTgSetFunc[];
static DUSK_GAME_DATA createHeapFunc mCreateHeapFunc[];
static DUSK_GAME_DATA createInitFunc mCreateInitFunc[];
static DUSK_GAME_DATA executeFunc mExecuteFunc[];
static DUSK_GAME_DATA tgSetFunc mTgSetFunc[];
/* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* field_0x5a8[2][2];
+6 -8
View File
@@ -25,7 +25,6 @@ public:
void onReserve() { mReserve = 1; }
void offReserve() { mReserve = 0; }
private:
/* 0x04 */ J2DScreen* m_cursorYellowScrn;
/* 0x08 */ J2DPane* m_cursorYellowAllPane;
/* 0x0C */ J2DPane* m_cursorYellow0Pane;
@@ -126,7 +125,6 @@ public:
bool getLockCntMax() { return m_lockCnt >= BOOMERANG_LOCK_MAX; }
void onLockDistanceCancel() { onStateFlg0(FLG0_LOCK_DIST_CANCEL); }
private:
/* 0x568 */ J3DModel* mp_boomModel;
/* 0x56C */ J3DModel* mp_shippuModel;
/* 0x570 */ J3DAnmTextureSRTKey* m_windBtk;
@@ -190,12 +188,12 @@ STATIC_ASSERT(sizeof(daBoomerang_c) == 0xDE4);
class daBoomerang_HIO_c0 {
public:
static u16 const m_lockWaitTime;
static f32 const m_minCircleR;
static f32 const m_middleCircleR;
static f32 const m_maxCircleR;
static f32 const m_scale;
static f32 const m_lockWindScale;
static DUSK_GAME_DATA u16 const m_lockWaitTime;
static DUSK_GAME_DATA f32 const m_minCircleR;
static DUSK_GAME_DATA f32 const m_middleCircleR;
static DUSK_GAME_DATA f32 const m_maxCircleR;
static DUSK_GAME_DATA f32 const m_scale;
static DUSK_GAME_DATA f32 const m_lockWindScale;
};
#endif /* D_A_BOOMERANG_H */
+3 -3
View File
@@ -18,7 +18,7 @@ class daBullet_Param_c {
public:
virtual ~daBullet_Param_c() {}
static daBullet_HIOParam const m;
static DUSK_GAME_DATA daBullet_HIOParam const m;
};
#if DEBUG
@@ -80,8 +80,8 @@ public:
int wait(void*);
int move(void*);
static dCcD_SrcGObjInf const mCcDObjInfo;
static dCcD_SrcSph mCcDSph;
static DUSK_GAME_DATA dCcD_SrcGObjInf const mCcDObjInfo;
static DUSK_GAME_DATA dCcD_SrcSph mCcDSph;
};
STATIC_ASSERT(sizeof(daBullet_c) == 0x95c);
-1
View File
@@ -65,7 +65,6 @@ public:
field_0x1456 = 15;
}
private:
/* 0x0568 */ request_of_phase_process_class mPhaseReq;
/* 0x0570 */ J3DModel* mpModel;
/* 0x0574 */ J3DModel* mpPaddleModel;
+1 -2
View File
@@ -33,7 +33,7 @@ public:
const CoachFireAttr& attr() { return M_attr; }
static CoachFireAttr const M_attr;
static DUSK_GAME_DATA CoachFireAttr const M_attr;
inline ~daCoachFire_c();
@@ -42,7 +42,6 @@ public:
void setNoHitTimer() { noHitTimer = 20; }
inline int execute();
private:
/* 0x568 */ LIGHT_INFLUENCE mLightInfluence;
/* 0x588 */ dCcD_Stts mStts;
/* 0x5C4 */ dCcD_Sph mSph;
-1
View File
@@ -208,7 +208,6 @@ public:
u8 getCowIn() { return mCowIn; }
u8 getNoNearCheckTimer() { return mNoNearCheckTimer; }
private:
/* 0x568 */ u16 mFlags;
/* 0x56c */ request_of_phase_process_class mPhase;
/* 0x574 */ mDoExt_McaMorfSO* mpMorf;
-1
View File
@@ -48,7 +48,6 @@ public:
static f32 getFlyInitY() { return 40.0f; }
static f32 getFlyInitZ() { return 50.0f; }
private:
/* 0x568 */ J3DModel* mpBallModel;
/* 0x56C */ mDoExt_bckAnm mBck;
/* 0x588 */ J3DAnmTevRegKey* mpBallBrk;
+1 -2
View File
@@ -38,9 +38,8 @@ public:
struct BckTbl {
u16 idx[4];
};
static const BckTbl m_bckIdxTable[];
static DUSK_GAME_DATA const BckTbl m_bckIdxTable[];
private:
/* 0x5A0 */ const char* m_arcName;
/* 0x5A4 */ request_of_phase_process_class m_phase;
/* 0x5AC */ J3DModel* mp_model;
+1 -2
View File
@@ -99,9 +99,8 @@ public:
mWarpMode = daCstatueWarpMode_Active;
}
static u16 const m_bckIdxTable[daCstatueType_N][7];
static DUSK_GAME_DATA u16 const m_bckIdxTable[daCstatueType_N][7];
private:
/* 0x568 */ const char* mResName;
/* 0x56C */ request_of_phase_process_class mPhaseReq;
/* 0x574 */ J3DModel* mModel;
-1
View File
@@ -55,7 +55,6 @@ public:
void setOffsetPos(cXyz i_pos) { mOffsetPos = i_pos; }
void setMaxScale(f32 i_scale) { mMaxScale = i_scale; }
private:
/* 0x92C */ cXyz mOffsetPos;
/* 0x938 */ f32 mMaxScale;
/* 0x93C */ u8 field_0x93c;
-1
View File
@@ -50,7 +50,6 @@ public:
void setAction(u8 i_action) { mAction = i_action; }
private:
/* 0x568 */ request_of_phase_process_class mPhaseReq;
/* 0x570 */ J3DModel* mpDoorModel;
/* 0x574 */ J3DModel* mpLockModel;
-1
View File
@@ -76,7 +76,6 @@ public:
void setAction(u8 action) { mAction = action; }
private:
/* 0x568 */ request_of_phase_process_class mPhase1;
/* 0x570 */ request_of_phase_process_class mPhase2;
/* 0x578 */ request_of_phase_process_class mPhase3;
-1
View File
@@ -72,7 +72,6 @@ public:
return 1;
}
private:
/* 0x568 */ request_of_phase_process_class mPhase1;
/* 0x570 */ request_of_phase_process_class mPhase2;
/* 0x578 */ request_of_phase_process_class mPhase3;
-1
View File
@@ -41,7 +41,6 @@ public:
void setAction(u8 i_action) { mAction = i_action; }
// private:
/* 0x568 */ request_of_phase_process_class mPhaseReq;
/* 0x570 */ request_of_phase_process_class mPhaseReq2;
/* 0x578 */ J3DModel* mpModel;
-1
View File
@@ -73,7 +73,6 @@ public:
void onFlag(u16 flag) { field_0x60c |= flag; }
int checkFlag(u16 flag) { return field_0x60c & flag; }
private:
/* 0x568 */ request_of_phase_process_class mPhase1;
/* 0x570 */ request_of_phase_process_class mPhase2;
/* 0x578 */ J3DModel* mModel1;
-1
View File
@@ -121,7 +121,6 @@ public:
mAction = action;
}
private:
/* 0x568 */ request_of_phase_process_class mPhase1;
/* 0x570 */ request_of_phase_process_class mPhase2;
/* 0x578 */ request_of_phase_process_class mPhase3;
-1
View File
@@ -49,7 +49,6 @@ public:
void setAction(u8 i_action) { mAction = i_action; }
u32 getSceneNo() { return fopAcM_GetParamBit(this, 4, 6); }
// private:
/* 0x5A0 */ request_of_phase_process_class mPhaseReq;
/* 0x5A8 */ J3DModel* mpModel[2];
/* 0x5B0 */ dBgW* mpDoorBgW;
-1
View File
@@ -123,7 +123,6 @@ public:
bool checkFlag(u16 flag) { return field_0x68e & flag; }
void setAction(u8 action) { mAction = action; }
private:
/* 0x56C */ request_of_phase_process_class mPhase1;
/* 0x574 */ request_of_phase_process_class mPhase2;
/* 0x57C */ J3DModel* mModel1;
+9 -9
View File
@@ -65,15 +65,15 @@ public:
f32 getCloseBoundSpeed() { return CLOSE_BOUND_SPEED; }
f32 getCloseBoundRatio() { return CLOSE_BOUND_RATIO; }
static f32 const OPEN_SIZE;
static f32 const OPEN_ACCEL;
static f32 const OPEN_SPEED;
static f32 const OPEN_BOUND_SPEED;
static f32 const OPEN_BOUND_RATIO;
static f32 const CLOSE_ACCEL;
static f32 const CLOSE_SPEED;
static f32 const CLOSE_BOUND_SPEED;
static f32 const CLOSE_BOUND_RATIO;
static DUSK_GAME_DATA f32 const OPEN_SIZE;
static DUSK_GAME_DATA f32 const OPEN_ACCEL;
static DUSK_GAME_DATA f32 const OPEN_SPEED;
static DUSK_GAME_DATA f32 const OPEN_BOUND_SPEED;
static DUSK_GAME_DATA f32 const OPEN_BOUND_RATIO;
static DUSK_GAME_DATA f32 const CLOSE_ACCEL;
static DUSK_GAME_DATA f32 const CLOSE_SPEED;
static DUSK_GAME_DATA f32 const CLOSE_BOUND_SPEED;
static DUSK_GAME_DATA f32 const CLOSE_BOUND_RATIO;
/* 0x5A0 */ dComIfG_resLoader_c mResLoader;
/* 0x5B0 */ J3DModel* mpModel;
-1
View File
@@ -48,7 +48,6 @@ public:
int CreateHeap();
int Create();
private:
/* 0x5AC */ JPABaseEmitter* mpEmitter;
/* 0x5B0 */ request_of_phase_process_class m_phase;
/* 0x5B8 */ u8 field_0x5b8;
-1
View File
@@ -45,7 +45,6 @@ public:
void setBgId(unsigned int i_bgId) { mBgId = i_bgId; }
bool isBomb() { return mIsBomb; }
private:
/* 0x5AC */ request_of_phase_process_class mPhaseReq;
/* 0x5B4 */ mDoExt_McaMorfSO* mpMorfSO;
/* 0x5B8 */ mDoExt_brkAnm* mpBrkAnm;
-6
View File
@@ -80,12 +80,6 @@ public:
/* 0x125C */ u32 field_0x125c;
/* 0x1260 */ u8 field_0x1260[0x126C - 0x1260];
/* 0x126C */ u8 HIOInit;
#if TARGET_PC
cXyz mStalkLineInterpPrev[12];
cXyz mStalkLineInterpCurr[12];
bool mStalkLineInterpPrevValid;
bool mStalkLineInterpCurrValid;
#endif
};
STATIC_ASSERT(sizeof(e_db_class) == 0x1270);
-1
View File
@@ -45,7 +45,6 @@ public:
int create();
daE_DK_c();
private:
/* 0x5AC */ request_of_phase_process_class mPhaseReq;
/* 0x5B4 */ mDoExt_McaMorfSO* mpMorfSO;
/* 0x5B8 */ mDoExt_McaMorfSO* mpCoreMorfSO;
+8 -9
View File
@@ -83,7 +83,6 @@ public:
MtxP getBackMtx() { return mpMorf->getModel()->getAnmMtx(1); }
fpc_ProcID getDemoId() { return mDemoID; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase[3];
/* 0x05C4 */ J3DModel* mpChestModel;
/* 0x05C8 */ J3DModel* mpSpitModel;
@@ -175,14 +174,14 @@ private:
STATIC_ASSERT(sizeof(daE_DT_c) == 0x1174);
struct E_DT_n {
static f32 eDt_ShakeFrame[10];
static f32 eDt_ShakeFrameDemo[10];
static dCcD_SrcSph cc_dt_body_src;
static dCcD_SrcSph cc_dt_tongue_src;
static int mDt_OtamaNum;
static int mDt_OtamaNo[20];
static int m_fall_no;
static cXyz m_tongue_pos;
static DUSK_GAME_DATA f32 eDt_ShakeFrame[10];
static DUSK_GAME_DATA f32 eDt_ShakeFrameDemo[10];
static DUSK_GAME_DATA dCcD_SrcSph cc_dt_body_src;
static DUSK_GAME_DATA dCcD_SrcSph cc_dt_tongue_src;
static DUSK_GAME_DATA int mDt_OtamaNum;
static DUSK_GAME_DATA int mDt_OtamaNo[20];
static DUSK_GAME_DATA int m_fall_no;
static DUSK_GAME_DATA cXyz m_tongue_pos;
};
-1
View File
@@ -40,7 +40,6 @@ public:
cPhs_Step create();
daE_FB_c();
private:
/* 0x5AC */ request_of_phase_process_class mPhaseReq;
/* 0x5B4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5B8 */ mDoExt_invisibleModel mInvisibleModel;
-1
View File
@@ -52,7 +52,6 @@ public:
void CreateChk();
int Create();
private:
/* 0x5AC */ u8 field_0x5AC[0x5B1 - 0x5AC];
/* 0x5B1 */ u8 mUpDownMode;
/* 0x5B2 */ u8 field_0x5B2[0x5B6 - 0x5B2];
-1
View File
@@ -63,7 +63,6 @@ public:
s32 CreateHeap();
s32 create();
private:
/* 0x5AC */ request_of_phase_process_class mPhaseReq; /**< Phase request used when creating the actor. */
/* 0x5B4 */ J3DModel* mpModel; /**< Pointer to the Mini Freezard's model. */
/* 0x5B8 */ mDoExt_invisibleModel mInvisibleModel; /**< Invisible model used for the Mini Freezard. */
+1 -2
View File
@@ -61,7 +61,6 @@ public:
u8 getGroupNo() { return mGroupNo; }
private:
/* 0x5AC */ request_of_phase_process_class mPhaseReq;
/* 0x5B4 */ mDoExt_McaMorfSO* mpMorfSO;
/* 0x5B8 */ Z2CreatureEnemy mSound;
@@ -101,7 +100,7 @@ private:
/* 0xB9E */ u8 field_0xb9e;
/* 0xB9F */ u8 mHIOInit;
static actionFunc l_actionmenu[9];
static DUSK_GAME_DATA actionFunc l_actionmenu[9];
};
STATIC_ASSERT(sizeof(daE_GE_c) == 0xBA0);
-1
View File
@@ -47,7 +47,6 @@ public:
bool isBattleOn() { return mIsBattleOn; }
bool isAttackStart() { return mIsAttackStart; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpModelMorf;
/* 0x05B8 */ J3DModel* mpSwordModel;
-1
View File
@@ -62,7 +62,6 @@ public:
BOOL checkAction(actionFunc action) { return mAction == action; }
BOOL checkOldAction(actionFunc action) { return mOldAction == action; }
private:
/* 0x5AC */ request_of_phase_process_class mPhase;
/* 0x5B4 */ dBgS_AcchCir mAcchCir;
/* 0x5F4 */ dBgS_ObjAcch mObjAcch;
-6
View File
@@ -73,12 +73,6 @@ public:
/* 0x124C */ f32 field_0x124c;
/* 0x1250 */ u8 field_0x1250[0x1264 - 0x1250];
/* 0x1264 */ u8 HIOInit;
#if TARGET_PC
cXyz mStalkLineInterpPrev[12];
cXyz mStalkLineInterpCurr[12];
bool mStalkLineInterpPrevValid;
bool mStalkLineInterpCurrValid;
#endif
};
STATIC_ASSERT(sizeof(e_hb_class) == 0x1268);
-1
View File
@@ -65,7 +65,6 @@ public:
void CheckWall();
void CreateStyle();
int Create();
private:
/* 0x5AC */ u8 field_0x5ac;
/* 0x5AD */ u8 field_0x5ad;
/* 0x5AE */ u8 field_0x5ae;

Some files were not shown because too many files have changed in this diff Show More