Compare commits

..

61 Commits

Author SHA1 Message Date
Luke Street a5de0c276a Merge remote-tracking branch 'origin/main' into mods
# Conflicts:
#	CMakeLists.txt
#	src/dusk/config.cpp
2026-06-25 22:29:50 -07:00
Luke Street b6f0e104bd Merge remote-tracking branch 'origin/main' into mods
# Conflicts:
#	CMakeLists.txt
#	include/dusk/gx_helper.h
2026-06-06 09:44:35 -06:00
PJB3005 66aca3b69d Fix string copy in LocateDllInBundle 2026-05-31 16:36:13 +02:00
PJB3005 bd09eea0f3 Disallow consecutive periods in mod IDs
Avoid config shenanigans
2026-05-31 16:35:28 +02:00
PJB3005 531313120f Merge branch 'main' into mods 2026-05-31 16:23:01 +02:00
PJB3005 fd26670b0e Remove unused include from mod_loader.hpp
This was for the code mods toggle before I moved the checking logic to CMake.
2026-05-29 09:56:47 +02:00
PJB3005 c83cc3b971 Horrible C++ template nightmares (fix clang-tidy warning about int conversions with ranges) 2026-05-29 05:47:12 +02:00
PJB3005 8c713d4535 Fix prelaunch animation timings
oops
2026-05-29 05:22:12 +02:00
PJB3005 183e7669c2 Add mods button to prelaunch UI
Fixes https://github.com/TwilitRealm/dusklight/issues/1904
2026-05-29 05:09:10 +02:00
PJB3005 f38514db79 Mods can be disabled by config
We now register a CVar for mod enablement for each mod.

Also made LoadedMod stored in unique_ptr because we keep pointers to them already, and I'm entirely uncomfortable with keeping pointers to the vector directly.
2026-05-29 04:59:42 +02:00
PJB3005 3792912ad1 Allow CVars to be registered late, improve usability for dynamically registered CVars.
Now we store the raw JSON value in memory for unregistered CVars.

Intended to be used for mod CVars, as we obviously can't statically define all of those.

CVar names are now stored as an std::string, so the lifetime is easy to manage when dynamically registered.

CVars cannot be moved/copied anymore. We had some code that was accidentally relying on this, and I fixed that.
2026-05-29 04:38:24 +02:00
PJB3005 d9795f4098 Validate that mod IDs have a restricted character set.
Avoid funny business.
2026-05-29 02:43:00 +02:00
PJB3005 87d56be232 Improve native mod load failure diagnostics 2026-05-29 02:29:50 +02:00
PJB3005 be2924b509 Replace DuskLog uses with local log for modloader 2026-05-29 01:59:12 +02:00
PJB3005 be3e6b80eb Move code mod API to separate C++ file 2026-05-29 01:55:26 +02:00
PJB3005 10c310f7b1 Merge branch 'main' into mods 2026-05-29 01:38:13 +02:00
PJB3005 5f0c44eb84 Don't force symbol export if code mods disabled
Allows us to re-enable PCH on RmlUI. We'll likely need to rethink how this works anyways IMO.
2026-05-29 01:25:03 +02:00
PJB3005 b88a5e4ac3 Allow code mods to be disabled on build, disable them by default for now. 2026-05-29 00:37:13 +02:00
PJB3005 af6ca3c80c Merge remote-tracking branch 'upstream/main' into mods 2026-05-28 00:41:11 +02:00
PJB3005 9973a28154 EntryNum assignment for new aurora API changes 2026-05-28 00:40:05 +02:00
PJB3005 358d218e8f Fix Windows Unicode paths in disk mods
oops
2026-05-28 00:17:25 +02:00
Ash 0692fa5423 wip: load other shared library formats (#1790) 2026-05-24 15:23:38 -06:00
PJB3005 40f49a8615 Merge branch 'main' into mods 2026-05-16 18:13:39 +02:00
PJB3005 fb9ffb444a Allow non-code mods to exist 2026-05-15 23:46:41 +02:00
PJB3005 9823ca7c4a Split native mod stuff out of LoadedMod 2026-05-15 23:37:23 +02:00
PJB3005 32069d936c Make native module handles a special type
We love RAII
2026-05-15 23:11:29 +02:00
PJB3005 3f018204b6 Add mod IDs to mod json
Each mod must have a unique ID
2026-05-15 22:40:46 +02:00
PJB3005 012b54b325 Use fs_path_to_string instead of .string()
Unicode fixes
2026-05-15 22:04:22 +02:00
PJB3005 42d412a06e Mod file overlay system
Mods can now replace DVD files with contents of their "overlay" folder

(I'll update the docs later when I do a full pass and make non-code mods
more of a first-class citizen)

Fixes https://github.com/TwilitRealm/dusklight/issues/1306
2026-05-15 21:04:48 +02:00
PJB3005 37e5b7409d Move mod init earlier
Probably necessary if we're gonna be replacing game files etc
2026-05-15 21:01:13 +02:00
PJB3005 cfc0fbc342 Allow mods to be loaded from extracted disk files
Also just some code cleanup
2026-05-14 20:42:20 +02:00
PJB3005 3e84c65657 Fix mod SDK being broken due to rebrand 2026-05-14 20:41:49 +02:00
PJB3005 08cbaff57b Merge branch 'main' into mods 2026-05-14 17:08:10 +02:00
PJB3005 d85718f802 Merge remote-tracking branch 'upstream/main' into mods 2026-05-13 17:26:22 +02:00
PJB3005 925bb069d9 Merge remote-tracking branch 'upstream/main' into mods 2026-05-13 17:25:29 +02:00
madeline b2871054a6 address review, rmlui, better api, catmod 2026-05-11 02:55:11 -07:00
madeline 5bead49902 fix pch conflict 2026-05-10 18:07:05 -07:00
madeline 4175d9c7f4 Merge branch 'main' of https://github.com/TakaRikka/dusk into mods 2026-05-10 16:50:36 -07:00
Luke Street 0d6b47ac73 Move mods menu after tools 2026-04-24 11:56:31 -06:00
Luke Street 1fb5d1ee2a Set FUNCHOOK_INSTALL=OFF 2026-04-24 10:29:05 -06:00
Luke Street c042de8a55 Restore DUSK_BUILDING_GAME=1 2026-04-24 10:12:52 -06:00
Luke Street e25a1f3ef6 Move mods to config dir & updates for macOS 2026-04-24 09:52:04 -06:00
Luke Street b7f9bc91b4 Merge remote-tracking branch 'origin/main' into mods
# Conflicts:
#	CMakeLists.txt
2026-04-24 01:37:37 -06:00
madeline 3281c64a55 more precise link debug info 2026-04-23 06:01:28 -07:00
madeline fb08cfcc6b handle hook conflicts 2026-04-23 05:17:15 -07:00
madeline 99fb2b89ce DUSK_REQUIRE_API_VERSION 2026-04-23 04:52:16 -07:00
madeline 53573eb795 inter mod communication 2026-04-23 04:49:21 -07:00
madeline 975ab1dc54 i fugged up the merge 2026-04-23 03:07:44 -07:00
madeline 9d10a48329 i fugged up the merge 2026-04-23 03:07:00 -07:00
madeline 52a067e412 Merge branch 'main' into mods 2026-04-23 02:20:13 -07:00
madeline 5dcbca392d fix turbo key getting stuck on 2026-04-20 09:51:33 -07:00
madeline ba906150d4 another attempt 2026-04-20 08:20:08 -07:00
madeline e5c7dfdedd maybe fix apple ci idk this shit is giga fucked 2026-04-20 08:04:05 -07:00
madeline 02a4e213e3 again 2026-04-20 07:57:21 -07:00
madeline 394627cd47 remove low level hook info 2026-04-20 07:56:09 -07:00
madeline e7081f770a modding.md, test mod, template mod, better imgui context 2026-04-20 07:52:35 -07:00
madeline 8356eff4ce fix apple ci 2026-04-20 05:24:46 -07:00
madeline 3597cb1bd6 incredibly scuffed funchook patching 2026-04-20 05:22:03 -07:00
madeline 507616015e fix CI cmake 2026-04-20 04:25:17 -07:00
madeline db20632130 Merge remote-tracking branch 'origin/main' into mods 2026-04-20 04:18:41 -07:00
madeline 22d906a248 mod loader 2026-04-20 04:17:42 -07:00
1386 changed files with 9336 additions and 84651 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
--- ---
Language: Cpp Language: Cpp
Standard: c++20 Standard: C++03
AccessModifierOffset: -4 AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false AlignConsecutiveAssignments: false
+3 -13
View File
@@ -80,7 +80,6 @@ jobs:
path: | path: |
build/install/Dusklight-*.AppImage build/install/Dusklight-*.AppImage
build/install/debug.tar.* build/install/debug.tar.*
build/install/sdk/
build-apple: build-apple:
name: Build Apple (${{matrix.name}}) name: Build Apple (${{matrix.name}})
@@ -149,7 +148,6 @@ jobs:
path: | path: |
build/install/Dusklight.app build/install/Dusklight.app
build/install/debug.tar.* build/install/debug.tar.*
build/install/sdk/
build-android: build-android:
name: Build Android (${{matrix.name}}) name: Build Android (${{matrix.name}})
@@ -205,24 +203,18 @@ jobs:
- name: Build native library - name: Build native library
run: cmake --build --preset ${{matrix.preset}} --target dusklight run: cmake --build --preset ${{matrix.preset}} --target dusklight
- name: Build bundled mods - name: Stage stripped JNI library
run: cmake --build --preset ${{matrix.preset}} --target dusklight_mods run: ANDROID_STAGE_ABIS="${{matrix.abi}}" platforms/android/scripts/stage-jni-libs.sh
- name: Build APK - name: Build APK
working-directory: platforms/android working-directory: platforms/android
run: ./gradlew :app:assembleRelease --rerun-tasks 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 - name: Upload artifacts
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v7
with: with:
name: dusklight-${{env.DUSK_VERSION}}-android-${{matrix.artifact_arch}} name: dusklight-${{env.DUSK_VERSION}}-android-${{matrix.artifact_arch}}
path: upload/ path: platforms/android/app/build/outputs/apk/release/app-${{matrix.abi}}-release-unsigned.apk
build-windows: build-windows:
name: Build Windows (${{matrix.name}}) name: Build Windows (${{matrix.name}})
@@ -288,6 +280,4 @@ jobs:
build/install/*.exe build/install/*.exe
build/install/*.dll build/install/*.dll
build/install/res/ build/install/res/
build/install/mods/
build/install/debug.7z build/install/debug.7z
build/install/sdk/
+2
View File
@@ -53,3 +53,5 @@ compile_commands.json
pipeline_cache.bin pipeline_cache.bin
extract extract
*.dusk
+2 -2
View File
@@ -6,12 +6,12 @@
"type": "cppvsdbg", "type": "cppvsdbg",
"request": "launch", "request": "launch",
"program": "${command:cmake.launchTargetPath}", "program": "${command:cmake.launchTargetPath}",
"args": ["-l", "1", "--dvd", "${workspaceRoot}/orig/GZ2E01/GZ2E01.iso", "--console"], "args": ["-l", "1", "--dvd", "${workspaceRoot}/orig/GZ2E01/GZ2E01.iso", "--console", "--mods", "${workspaceRoot}/mods"],
"MIMode": "gdb", "MIMode": "gdb",
"miDebuggerPath": "gdb", "miDebuggerPath": "gdb",
"symbolSearchPath": "${command:cmake.launchTargetPath}", "symbolSearchPath": "${command:cmake.launchTargetPath}",
"console": "integratedTerminal", "console": "integratedTerminal",
"cwd":"${workspaceRoot}" "cwd":"${workspaceRoot}",
} }
] ]
} }
+235 -182
View File
@@ -5,8 +5,96 @@ if (NOT CMAKE_BUILD_TYPE)
"Build type options: Debug Release RelWithDebInfo MinSizeRel" FORCE) "Build type options: Debug Release RelWithDebInfo MinSizeRel" FORCE)
endif () endif ()
include(cmake/DetectVersion.cmake) set(DUSK_VERSION_OVERRIDE "" CACHE STRING "Override version string (skips git detection and format validation)")
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 ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --git-path HEAD
OUTPUT_VARIABLE dusk_git_head_filename
OUTPUT_STRIP_TRAILING_WHITESPACE)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${dusk_git_head_filename}")
execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --symbolic-full-name HEAD
OUTPUT_VARIABLE dusk_git_head_symbolic
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${GIT_EXECUTABLE} rev-parse --git-path ${dusk_git_head_symbolic}
OUTPUT_VARIABLE dusk_git_head_symbolic_filename
OUTPUT_STRIP_TRAILING_WHITESPACE)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${dusk_git_head_symbolic_filename}")
# defines DUSK_WC_REVISION
execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE DUSK_WC_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DUSK_WC_DESCRIBE
execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 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 ${CMAKE_CURRENT_SOURCE_DIR} 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 ${CMAKE_CURRENT_SOURCE_DIR} 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}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
project(dusklight LANGUAGES C CXX VERSION ${DUSK_VERSION_STRING}) project(dusklight LANGUAGES C CXX VERSION ${DUSK_VERSION_STRING})
if (APPLE) if (APPLE)
@@ -89,41 +177,12 @@ option(DUSK_ENABLE_UPDATE_CHECKER "Enable update checking support" ON)
option(DUSK_ENABLE_SENTRY_NATIVE "Enable sentry-native crash reporting support" OFF) 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_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_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) set(DUSK_SENTRY_DSN "" CACHE STRING "Sentry DSN")
set(DUSK_SENTRY_ENVIRONMENT "development" CACHE STRING "Sentry environment")
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 # Edit & Continue
if (MSVC) if (MSVC)
if ("${CMAKE_MSVC_DEBUG_INFORMATION_FORMAT}" STREQUAL "" AND CMAKE_BUILD_TYPE STREQUAL "Debug" if ("${CMAKE_MSVC_DEBUG_INFORMATION_FORMAT}" STREQUAL "" AND CMAKE_BUILD_TYPE STREQUAL "Debug")
AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "EditAndContinue") set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "EditAndContinue")
endif () endif ()
if (CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "EditAndContinue") if (CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "EditAndContinue")
@@ -152,7 +211,7 @@ if (DUSK_MOVIE_SUPPORT)
-DWITH_JAVA=OFF -DWITH_JAVA=OFF
) )
if (CMAKE_TOOLCHAIN_FILE) if (CMAKE_TOOLCHAIN_FILE)
get_filename_component(_jpeg_toolchain_file "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE BASE_DIR "${CMAKE_SOURCE_DIR}") get_filename_component(_jpeg_toolchain_file "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
list(APPEND _jpeg_cmake_args -DCMAKE_TOOLCHAIN_FILE=${_jpeg_toolchain_file}) list(APPEND _jpeg_cmake_args -DCMAKE_TOOLCHAIN_FILE=${_jpeg_toolchain_file})
endif () endif ()
set(_jpeg_passthrough_vars set(_jpeg_passthrough_vars
@@ -204,8 +263,8 @@ if (CMAKE_SYSTEM_NAME STREQUAL Linux)
set(CMAKE_BUILD_RPATH "$ORIGIN") set(CMAKE_BUILD_RPATH "$ORIGIN")
elseif (APPLE) elseif (APPLE)
add_compile_options(-Wno-declaration-after-statement -Wno-non-pod-varargs) add_compile_options(-Wno-declaration-after-statement -Wno-non-pod-varargs)
set(CMAKE_INSTALL_RPATH "@loader_path") set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_RPATH "@loader_path") set(CMAKE_BUILD_RPATH "$ORIGIN")
elseif (MSVC) elseif (MSVC)
add_compile_options( add_compile_options(
$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj> $<$<COMPILE_LANGUAGE:C,CXX>:/bigobj>
@@ -233,54 +292,42 @@ FetchContent_Declare(cxxopts
URL https://github.com/jarro2783/cxxopts/archive/refs/tags/v3.3.1.tar.gz URL https://github.com/jarro2783/cxxopts/archive/refs/tags/v3.3.1.tar.gz
URL_HASH SHA256=3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072 URL_HASH SHA256=3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072
DOWNLOAD_EXTRACT_TIMESTAMP FALSE DOWNLOAD_EXTRACT_TIMESTAMP FALSE
EXCLUDE_FROM_ALL
) )
message(STATUS "dusklight: Fetching nlohmann/json") message(STATUS "dusklight: Fetching nlohmann/json")
FetchContent_Declare(json FetchContent_Declare(json
URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
DOWNLOAD_EXTRACT_TIMESTAMP FALSE DOWNLOAD_EXTRACT_TIMESTAMP FALSE
EXCLUDE_FROM_ALL
) )
message(STATUS "dusklight: Fetching miniz")
message(STATUS "dusk: Fetching miniz")
FetchContent_Declare(miniz FetchContent_Declare(miniz
URL https://github.com/richgel999/miniz/releases/download/3.0.2/miniz-3.0.2.zip URL https://github.com/richgel999/miniz/releases/download/3.0.2/miniz-3.0.2.zip
DOWNLOAD_EXTRACT_TIMESTAMP TRUE DOWNLOAD_EXTRACT_TIMESTAMP TRUE
EXCLUDE_FROM_ALL EXCLUDE_FROM_ALL
) )
set(_fetch_content_deps cxxopts json miniz) message(STATUS "dusk: Fetching funchook")
if (DUSK_HAS_FUNCHOOK) # cmake/patch_funchook.cmake patches funchook's cmake/capstone.cmake.in to inject a
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 # PATCH_COMMAND into capstone's inner ExternalProject. That PATCH_COMMAND runs
# cmake/PatchCapstone.cmake after capstone is cloned, which removes the # cmake/fix_capstone_policy.cmake after capstone is cloned, which removes the
# cmake_policy(SET CMP0048 OLD) line that CMake >= 3.27 rejects. # cmake_policy(SET CMP0048 OLD) line that CMake >= 3.27 rejects.
# This is incredibly scuffed and we should probably think of a better way to do this # This is incredibly scuffed and we should probably think of a better way to do this
set(CAPSTONE_FIX_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/PatchCapstone.cmake") set(CAPSTONE_FIX_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/fix_capstone_policy.cmake")
FetchContent_Declare(funchook FetchContent_Declare(funchook
GIT_REPOSITORY https://github.com/kubo/funchook.git GIT_REPOSITORY https://github.com/kubo/funchook.git
GIT_TAG v1.1.3 GIT_TAG v1.1.3
GIT_SHALLOW TRUE GIT_SHALLOW TRUE
GIT_PROGRESS TRUE GIT_PROGRESS TRUE
PATCH_COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=<SOURCE_DIR> -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PatchFunchook.cmake PATCH_COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=<SOURCE_DIR> -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/patch_funchook.cmake
EXCLUDE_FROM_ALL EXCLUDE_FROM_ALL
) )
set(FUNCHOOK_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(FUNCHOOK_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(FUNCHOOK_BUILD_SHARED OFF CACHE BOOL "" FORCE) set(FUNCHOOK_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(FUNCHOOK_INSTALL OFF CACHE BOOL "" FORCE) set(FUNCHOOK_INSTALL OFF CACHE BOOL "" FORCE)
if (APPLE AND CMAKE_OSX_ARCHITECTURES) FetchContent_MakeAvailable(cxxopts json miniz funchook)
list(LENGTH CMAKE_OSX_ARCHITECTURES _osx_arch_count)
if (_osx_arch_count EQUAL 1)
list(GET CMAKE_OSX_ARCHITECTURES 0 _osx_arch)
if (_osx_arch MATCHES "^(arm64|aarch64|ARM64)$")
set(FUNCHOOK_CPU arm64 CACHE STRING "" FORCE)
elseif (_osx_arch MATCHES "^(x86_64|AMD64|amd64|i[3-6]86|x86)$")
set(FUNCHOOK_CPU x86 CACHE STRING "" FORCE)
endif ()
endif ()
endif ()
list(APPEND _fetch_content_deps funchook)
endif ()
FetchContent_MakeAvailable(${_fetch_content_deps})
if (DUSK_ENABLE_SENTRY_NATIVE) if (DUSK_ENABLE_SENTRY_NATIVE)
message(STATUS "dusklight: Fetching sentry-native") message(STATUS "dusklight: Fetching sentry-native")
@@ -301,10 +348,10 @@ if (DUSK_ENABLE_SENTRY_NATIVE)
) )
if (NOT sentry_native_POPULATED) if (NOT sentry_native_POPULATED)
FetchContent_Populate(sentry_native) FetchContent_Populate(sentry_native)
set(_skip_install_rules ${CMAKE_SKIP_INSTALL_RULES}) set(_dusk_skip_install_rules ${CMAKE_SKIP_INSTALL_RULES})
set(CMAKE_SKIP_INSTALL_RULES ON) set(CMAKE_SKIP_INSTALL_RULES ON)
add_subdirectory(${sentry_native_SOURCE_DIR} ${sentry_native_BINARY_DIR} EXCLUDE_FROM_ALL) add_subdirectory(${sentry_native_SOURCE_DIR} ${sentry_native_BINARY_DIR} EXCLUDE_FROM_ALL)
set(CMAKE_SKIP_INSTALL_RULES ${_skip_install_rules}) set(CMAKE_SKIP_INSTALL_RULES ${_dusk_skip_install_rules})
endif () endif ()
endif () endif ()
@@ -314,7 +361,21 @@ if(_arch MATCHES "^(arm|aarch64)" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQU
add_compile_options(-fsigned-char) add_compile_options(-fsigned-char)
endif() endif()
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(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
include(files.cmake) include(files.cmake)
@@ -330,16 +391,30 @@ set(DUSK_COPYRIGHT "Copyright (C) Twilit Realm contributors")
source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${REL_FILES}) 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} ${DUSK_HTTP_BACKEND_FILES})
include(cmake/GameABIConfig.cmake) set(GAME_COMPILE_DEFS TARGET_PC WIDESCREEN_SUPPORT=1 AVOID_UB=1 VERSION=0 MTX_USE_PS=1)
set(GAME_INCLUDE_DIRS
include
src
assets/GZ2E01 # TODO: make this dynamic if needed?
libs/JSystem/include
libs
extern/aurora/include/dolphin
extern/aurora/include
extern
${CMAKE_CURRENT_BINARY_DIR}
${miniz_SOURCE_DIR})
# Interface target for mods and sub-projects to inherit game headers/defines
add_library(dusklight_game_headers INTERFACE)
target_include_directories(dusklight_game_headers INTERFACE ${GAME_INCLUDE_DIRS})
target_compile_definitions(dusklight_game_headers INTERFACE TARGET_PC=1)
target_link_libraries(dusklight_game_headers INTERFACE TracyClient)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
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 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 aurora::card freeverb cxxopts::cxxopts absl::flat_hash_map nlohmann_json::nlohmann_json TracyClient fmt::fmt funchook-static
Threads::Threads zstd::libzstd dusklight_game_headers) Threads::Threads zstd::libzstd)
if (DUSK_HAS_FUNCHOOK)
list(APPEND GAME_LIBS funchook-static)
endif ()
if (DUSK_ENABLE_SENTRY_NATIVE) if (DUSK_ENABLE_SENTRY_NATIVE)
list(APPEND GAME_LIBS sentry) list(APPEND GAME_LIBS sentry)
@@ -407,12 +482,19 @@ if (DUSK_ENABLE_DISCORD AND NOT ANDROID AND NOT IOS AND NOT TVOS)
list(APPEND GAME_COMPILE_DEFS DUSK_DISCORD=1) list(APPEND GAME_COMPILE_DEFS DUSK_DISCORD=1)
endif () endif ()
if (DUSK_ENABLE_CODE_MODS) if(ANDROID)
list(APPEND GAME_COMPILE_DEFS DUSK_CODE_MODS=1) list(APPEND GAME_COMPILE_DEFS TARGET_ANDROID=1)
endif ()
set(DUSK_ENABLE_CODE_MODS_DEFAULT OFF)
option(DUSK_ENABLE_CODE_MODS "Enable code mods" ${DUSK_ENABLE_CODE_MODS_DEFAULT})
if (DUSK_ENABLE_CODE_MODS)
if (NOT ANDROID AND NOT IOS AND NOT TVOS)
list(APPEND GAME_COMPILE_DEFS DUSK_CODE_MODS=1)
else ()
message(FATAL_ERROR "Code mods not supported on the target platform!")
endif ()
endif () endif ()
list(APPEND GAME_COMPILE_DEFS
DUSK_HAS_FUNCHOOK=$<BOOL:${DUSK_HAS_FUNCHOOK}>
DUSK_HAS_PREPATCH=$<BOOL:${DUSK_HAS_PREPATCH}>)
if (DUSK_PACKAGE_INSTALL) if (DUSK_PACKAGE_INSTALL)
include(GNUInstallDirs) include(GNUInstallDirs)
@@ -438,10 +520,9 @@ set(GAME_DEBUG_FILES
set_source_files_properties( set_source_files_properties(
${GAME_DEBUG_FILES} ${GAME_DEBUG_FILES}
PROPERTIES PROPERTIES
COMPILE_DEFINITIONS "$<$<CONFIG:Debug>:DEBUG=1>" COMPILE_DEFINITIONS "$<$<CONFIG:Debug>:DEBUG=1>;$<$<CONFIG:Debug>:PARTIAL_DEBUG=1>"
) )
# game_base is for all other game code files
set(GAME_BASE_FILES set(GAME_BASE_FILES
${DOLZEL_FILES} ${DOLZEL_FILES}
${Z2AUDIOLIB_FILES} ${Z2AUDIOLIB_FILES}
@@ -452,11 +533,17 @@ set(GAME_BASE_FILES
set_source_files_properties( set_source_files_properties(
${GAME_BASE_FILES} ${GAME_BASE_FILES}
PROPERTIES PROPERTIES
COMPILE_DEFINITIONS "NDEBUG=1;NDEBUG_DEFINED=1;DEBUG_DEFINED=0" COMPILE_DEFINITIONS "NDEBUG=1;NDEBUG_DEFINED=1;DEBUG_DEFINED=0;$<$<CONFIG:Debug>:PARTIAL_DEBUG=1>"
) )
foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES) foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES)
target_compile_definitions(${jsystem_lib} PRIVATE ${GAME_COMPILE_DEFS} $<$<CONFIG:Debug>:DEBUG=1>) target_compile_definitions(${jsystem_lib} PRIVATE
${GAME_COMPILE_DEFS}
DUSK_BUILDING_GAME=1
$<$<CONFIG:Debug>:DEBUG=1>
$<$<CONFIG:Debug>:PARTIAL_DEBUG=1>
)
target_include_directories(${jsystem_lib} PRIVATE ${GAME_INCLUDE_DIRS})
target_link_libraries(${jsystem_lib} PRIVATE ${GAME_LIBS}) target_link_libraries(${jsystem_lib} PRIVATE ${GAME_LIBS})
set_target_properties(${jsystem_lib} PROPERTIES FOLDER "JSystem") set_target_properties(${jsystem_lib} PROPERTIES FOLDER "JSystem")
endforeach() endforeach()
@@ -472,79 +559,57 @@ set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES} ${miniz_
if(ANDROID) if(ANDROID)
add_library(dusklight SHARED ${DUSK_FILES}) add_library(dusklight SHARED ${DUSK_FILES})
set_target_properties(dusklight PROPERTIES OUTPUT_NAME main) set_target_properties(dusklight PROPERTIES OUTPUT_NAME main)
set(DUSK_MAIN_TARGET dusklight)
elseif(WIN32)
add_library(dusklight_game SHARED ${DUSK_FILES})
set_target_properties(dusklight_game PROPERTIES
WINDOWS_EXPORT_ALL_SYMBOLS ${DUSK_ENABLE_CODE_MODS}
OUTPUT_NAME dusklight
PDB_NAME dusklight_game)
# rmlui_core uses its own PCH which creates a duplicate PCH marker symbol when linked
# Disabling rmlui's PCH removes the conflicting marker and lets the link succeed
if (MSVC AND TARGET rmlui_core AND DUSK_ENABLE_CODE_MODS)
set_target_properties(rmlui_core PROPERTIES DISABLE_PRECOMPILE_HEADERS ON)
endif ()
add_executable(dusklight WIN32 src/dusk/launcher_win32.cpp)
target_link_libraries(dusklight PRIVATE dusklight_game)
target_include_directories(dusklight PRIVATE include)
set(DUSK_MAIN_TARGET dusklight_game)
else () else ()
add_executable(dusklight ${DUSK_FILES}) add_executable(dusklight ${DUSK_FILES})
set(DUSK_MAIN_TARGET dusklight)
endif () endif ()
if (ENABLE_ASAN) if (ENABLE_ASAN)
target_sources(dusklight PRIVATE src/dusk/asan_options.c) target_sources(${DUSK_MAIN_TARGET} PRIVATE src/dusk/asan_options.c)
endif () endif ()
target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS}) if (WIN32 AND TARGET imgui)
target_include_directories(dusklight PRIVATE ${miniz_SOURCE_DIR}) target_compile_definitions(imgui PRIVATE "IMGUI_API=__declspec(dllexport)")
target_link_libraries(dusklight PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES}) target_sources(${DUSK_MAIN_TARGET} PRIVATE $<TARGET_OBJECTS:imgui>)
target_precompile_headers(dusklight PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>")
if (DUSK_ENABLE_CODE_MODS)
include(cmake/SymbolManifest.cmake)
if (WIN32)
# Game ABI exports & import library for mod linking
include(cmake/WindowsExports.cmake)
setup_windows_exports(dusklight)
endif ()
# Post-link symbol manifest: hookable-surface name->address map keyed to the build.
setup_symbol_manifest(dusklight)
endif () endif ()
# Hook reliability: guaranteed patchable entries on the game ABI surface, and no identical-code folding. target_compile_definitions(${DUSK_MAIN_TARGET} PRIVATE ${GAME_COMPILE_DEFS} DUSK_BUILDING_GAME=1)
if (MSVC) target_include_directories(${DUSK_MAIN_TARGET} PRIVATE ${GAME_INCLUDE_DIRS})
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_link_libraries(${DUSK_MAIN_TARGET} PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES})
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:/hotpatch>) target_precompile_headers(${DUSK_MAIN_TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_LIST_DIR}/include/dusk_pch.hpp>")
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)$")
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>)
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 ()
if(WIN32) if(WIN32)
target_link_libraries(dusklight PRIVATE Psapi) target_link_libraries(${DUSK_MAIN_TARGET} PRIVATE Psapi)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
target_link_libraries(${DUSK_MAIN_TARGET} PRIVATE dl)
endif() endif()
if(APPLE) if(APPLE)
include(cmake/AppleExports.cmake) target_link_options(${DUSK_MAIN_TARGET} PRIVATE -Wl,-export_dynamic)
setup_apple_exports(dusklight) elseif(UNIX AND NOT ANDROID)
elseif (ANDROID) target_link_options(${DUSK_MAIN_TARGET} PRIVATE -rdynamic)
include(cmake/AndroidExports.cmake)
setup_android_exports(dusklight)
elseif (UNIX)
target_link_options(dusklight PRIVATE -rdynamic)
endif() endif()
if (TARGET crashpad_handler) if (TARGET crashpad_handler)
add_dependencies(dusklight crashpad_handler) add_dependencies(${DUSK_MAIN_TARGET} crashpad_handler)
add_custom_command(TARGET dusklight POST_BUILD add_custom_command(TARGET ${DUSK_MAIN_TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:crashpad_handler>" "$<TARGET_FILE:crashpad_handler>"
"$<TARGET_FILE_DIR:dusklight>" "$<TARGET_FILE_DIR:dusklight>"
@@ -555,20 +620,17 @@ endif ()
if (ANDROID) if (ANDROID)
# SDLActivity loads SDL_main via dlsym on Android. Since aurora::main is a static # 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. # archive, force an undefined reference so the linker keeps the SDL_main object.
target_link_options(dusklight PRIVATE "-Wl,-u,SDL_main") target_link_options(${DUSK_MAIN_TARGET} PRIVATE "-Wl,-u,SDL_main")
endif () endif ()
if (CMAKE_SYSTEM_NAME STREQUAL Linux) if (CMAKE_SYSTEM_NAME STREQUAL Linux)
target_link_options(dusklight PRIVATE "-Wl,--build-id=sha1") target_link_options(dusklight PRIVATE "-Wl,--build-id=sha1")
target_link_libraries(dusklight PRIVATE dl)
elseif (ANDROID)
target_link_options(dusklight PRIVATE "-Wl,--build-id=sha1")
endif () endif ()
if (NOT APPLE) if (NOT APPLE)
add_custom_command(TARGET dusklight POST_BUILD add_custom_command(TARGET dusklight POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/res" "${CMAKE_CURRENT_SOURCE_DIR}/res"
"$<TARGET_FILE_DIR:dusklight>/res" "$<TARGET_FILE_DIR:dusklight>/res"
COMMENT "Copying resources" COMMENT "Copying resources"
) )
@@ -596,23 +658,12 @@ if (WIN32)
configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusklight.rc.in ${DUSK_WINDOWS_RC} @ONLY) configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusklight.rc.in ${DUSK_WINDOWS_RC} @ONLY)
target_sources(dusklight PRIVATE ${DUSK_WINDOWS_ICON_ICO} ${DUSK_WINDOWS_RC}) target_sources(dusklight PRIVATE ${DUSK_WINDOWS_ICON_ICO} ${DUSK_WINDOWS_RC})
set_target_properties(dusklight PROPERTIES WIN32_EXECUTABLE TRUE)
if (MSVC) if (MSVC)
target_link_options(dusklight PRIVATE /MANIFEST:NO) target_link_options(dusklight PRIVATE /MANIFEST:NO)
endif () endif ()
endif () endif ()
include(cmake/ModSDK.cmake) include(cmake/DuskModSDK.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(mods/template_mod)
add_subdirectory(mods/ao_mod)
add_subdirectory(mods/shadow_mod)
add_subdirectory(mods/window_demo)
add_subdirectory(mods/randomizer)
endif ()
if (APPLE) if (APPLE)
if (IOS) if (IOS)
@@ -621,7 +672,7 @@ if (APPLE)
set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/tvos) set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/tvos)
else () else ()
set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos) set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos)
set(DUSK_ENTITLEMENTS ${DUSK_RESOURCE_DIR}/Dusklight.entitlements) set(DUSK_ENTITLEMENTS ${DUSK_RESOURCE_DIR}/Dusk.entitlements)
endif () endif ()
set(DUSK_INFO_PLIST ${DUSK_RESOURCE_DIR}/Info.plist.in) set(DUSK_INFO_PLIST ${DUSK_RESOURCE_DIR}/Info.plist.in)
file(GLOB_RECURSE DUSK_RESOURCE_FILES file(GLOB_RECURSE DUSK_RESOURCE_FILES
@@ -641,7 +692,8 @@ if (APPLE)
get_filename_component(NEW_FILE_PATH ${NEW_FILE} DIRECTORY) get_filename_component(NEW_FILE_PATH ${NEW_FILE} DIRECTORY)
set_property(SOURCE ${FILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${NEW_FILE_PATH}") set_property(SOURCE ${FILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${NEW_FILE_PATH}")
endforeach () endforeach ()
set(_apple_bundle_properties set_target_properties(
dusklight PROPERTIES
MACOSX_BUNDLE TRUE MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_BUNDLE_NAME ${DUSK_BUNDLE_NAME} MACOSX_BUNDLE_BUNDLE_NAME ${DUSK_BUNDLE_NAME}
MACOSX_BUNDLE_GUI_IDENTIFIER ${DUSK_BUNDLE_IDENTIFIER} MACOSX_BUNDLE_GUI_IDENTIFIER ${DUSK_BUNDLE_IDENTIFIER}
@@ -651,35 +703,12 @@ if (APPLE)
OUTPUT_NAME Dusklight OUTPUT_NAME Dusklight
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES" XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES" XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
) XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${DUSK_ENTITLEMENTS}
if (DUSK_ENTITLEMENTS) XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES"
list(APPEND _apple_bundle_properties
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${DUSK_ENTITLEMENTS})
endif ()
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 (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
set(_sign_nested_commands)
if (TARGET crashpad_handler)
list(APPEND _sign_nested_commands
COMMAND /usr/bin/codesign --force --sign -
"$<TARGET_FILE_DIR:dusklight>/crashpad_handler")
endif ()
add_custom_command(TARGET dusklight POST_BUILD
${_sign_nested_commands}
COMMAND /usr/bin/codesign --force --sign - --entitlements
"${DUSK_ENTITLEMENTS}" "$<TARGET_BUNDLE_DIR:dusklight>"
COMMENT "Signing Dusklight.app with entitlements"
VERBATIM
) )
endif () endif ()
endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") if (APPLE AND NOT IOS AND NOT TVOS)
find_library(APPKIT_FRAMEWORK AppKit REQUIRED) find_library(APPKIT_FRAMEWORK AppKit REQUIRED)
target_sources(dusklight PRIVATE src/dusk/file_select_macos.mm) 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) set_source_files_properties(src/dusk/file_select_macos.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
@@ -695,7 +724,11 @@ if (IOS)
endif () endif ()
include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake) include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake)
if(WIN32)
aurora_copy_runtime_dlls(dusklight dusklight_game)
else()
aurora_copy_runtime_dlls(dusklight) aurora_copy_runtime_dlls(dusklight)
endif()
if (DUSK_SELECTED_OPT) if (DUSK_SELECTED_OPT)
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
@@ -734,11 +767,29 @@ function(get_target_prefix target result_var)
endif () endif ()
endfunction() endfunction()
list(APPEND BINARY_TARGETS dusklight) list(APPEND BINARY_TARGETS dusklight)
if(WIN32)
list(APPEND BINARY_TARGETS dusklight_game)
endif()
set(EXTRA_TARGETS "") set(EXTRA_TARGETS "")
if (TARGET crashpad_handler) if (TARGET crashpad_handler)
list(APPEND EXTRA_TARGETS crashpad_handler) list(APPEND EXTRA_TARGETS crashpad_handler)
endif () endif ()
if (WIN32)
# Install the launcher and game DLL, but skip the DLL import library.
if (DUSK_PACKAGE_INSTALL) if (DUSK_PACKAGE_INSTALL)
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR}
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
)
else ()
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}
BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}
)
endif ()
elseif (DUSK_PACKAGE_INSTALL)
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_BINDIR})
else () else ()
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_PREFIX}) install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_PREFIX})
@@ -801,4 +852,6 @@ foreach (target IN LISTS BINARY_TARGETS)
endforeach () endforeach ()
endforeach () endforeach ()
install_bundled_mods() if (DUSK_ENABLE_CODE_MODS)
add_subdirectory(tools/mod_test)
endif ()
+23 -38
View File
@@ -22,6 +22,18 @@
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL" "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", "name": "ci",
"hidden": true, "hidden": true,
@@ -60,11 +72,7 @@
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
}
}, },
"vendor": { "vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": { "microsoft.com/VisualStudioSettings/CMake/1.0": {
@@ -151,10 +159,6 @@
"CMAKE_C_COMPILER": "cl", "CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl", "CMAKE_CXX_COMPILER": "cl",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install",
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL", "type": "BOOL",
"value": true "value": true
@@ -196,13 +200,17 @@
{ {
"name": "windows-arm64-msvc", "name": "windows-arm64-msvc",
"displayName": "Windows ARM64 (MSVC)", "displayName": "Windows ARM64 (MSVC)",
"inherits": [ "generator": "Ninja",
"windows-msvc" "binaryDir": "${sourceDir}/build/${presetName}",
],
"architecture": { "architecture": {
"value": "arm64", "value": "arm64",
"strategy": "external" "strategy": "external"
}, },
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
},
"vendor": { "vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": { "microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "hostOS": [
@@ -254,11 +262,7 @@
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install"
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
}
}, },
"vendor": { "vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": { "microsoft.com/VisualStudioSettings/CMake/1.0": {
@@ -314,19 +318,11 @@
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"ENABLE_VISIBILITY": {
"type": "BOOL",
"value": true
},
"Rust_CARGO_TARGET": "aarch64-apple-ios", "Rust_CARGO_TARGET": "aarch64-apple-ios",
"BUILD_SHARED_LIBS": { "BUILD_SHARED_LIBS": {
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL", "type": "BOOL",
"value": true "value": true
@@ -362,20 +358,12 @@
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"ENABLE_VISIBILITY": {
"type": "BOOL",
"value": true
},
"Rust_CARGO_TARGET": "aarch64-apple-tvos", "Rust_CARGO_TARGET": "aarch64-apple-tvos",
"Rust_TOOLCHAIN": "nightly", "Rust_TOOLCHAIN": "nightly",
"BUILD_SHARED_LIBS": { "BUILD_SHARED_LIBS": {
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL", "type": "BOOL",
"value": true "value": true
@@ -406,10 +394,6 @@
"type": "BOOL", "type": "BOOL",
"value": false "value": false
}, },
"DUSK_ENABLE_CODE_MODS": {
"type": "BOOL",
"value": true
},
"CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": { "CMAKE_DISABLE_FIND_PACKAGE_PkgConfig": {
"type": "BOOL", "type": "BOOL",
"value": true "value": true
@@ -445,7 +429,8 @@
"hidden": true, "hidden": true,
"inherits": [ "inherits": [
"android-base", "android-base",
"ci" "ci",
"release"
], ],
"cacheVariables": { "cacheVariables": {
"DUSK_ENABLE_SENTRY_NATIVE": { "DUSK_ENABLE_SENTRY_NATIVE": {
+19 -5
View File
@@ -20,17 +20,31 @@ It aims to be as accurate as possible to the original while also providing new o
> Dusklight does *not* provide any copyrighted assets. You must provide your own copy of the original game. > Dusklight does *not* provide any copyrighted assets. You must provide your own copy of the original game.
> [!IMPORTANT] > [!IMPORTANT]
> At a minimum, Dusklight requires a GPU with support for D3D12, Vulkan 1.1+, or Metal. For older devices, best-effort support is provided for D3D11 and OpenGL ES (Android), but will not achieve full accuracy or performance. Your experience with specific hardware, operating systems, and drivers may vary. > At a minimum, Dusklight requires a GPU with support for either D3D12, Vulkan, or Metal. Your experience with specific hardware, operating systems, and drivers may vary. In particular, older Intel iGPUs have a high likelihood of incompatibility. We are also aware of a number of issues on devices with Adreno GPUs and are working to resolve them.
### 1. Dump your game ### 1. Dump your game
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. 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 a `.rvz` to save space.
Currently, only the GameCube releases are supported. Support for other versions of the game is planned in the future. Currently, only the GameCube USA and EUR releases are supported. Support for other versions of the game is planned in the future.
### 2. Install Dusklight ### 2. Download [Dusklight](https://github.com/TwilitRealm/dusklight/releases)
Visit the [official installation guide](https://twilitrealm.dev/install/) for full instructions. ### 3. Setup the game
**Windows / macOS / Linux**
- Extract the .zip file
- Launch Dusklight
- Press **Select Disc Image** and provide the path to your supported game dump
- Press **Play**!
**iOS**
- Follow the [iOS setup guide](docs/ios-install-altstore.md)
**Android**
- Install the Dusklight APK
- Launch Dusklight
- Press **Select Disc Image** and provide the path to your supported game dump
- Press **Play**!
# Building # Building
-63
View File
@@ -1,63 +0,0 @@
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
--exclude asan_options
--exclude src/dusk
# 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()
-90
View File
@@ -1,90 +0,0 @@
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
--exclude asan_options
--exclude src/dusk
${_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
@@ -1,10 +0,0 @@
# 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()
+49
View File
@@ -0,0 +1,49 @@
# add_dusk_mod(<target> SOURCES <file>... MOD_JSON <mod.json> [RES_DIR <res>])
set(DUSK_MODS_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/mods" CACHE PATH "Directory to write .dusk packages into")
function(add_dusk_mod target_name)
cmake_parse_arguments(ARG "" "MOD_JSON;RES_DIR" "SOURCES" ${ARGN})
if(NOT ARG_MOD_JSON)
message(FATAL_ERROR "add_dusk_mod: MOD_JSON is required")
endif()
add_library(${target_name} SHARED ${ARG_SOURCES})
set_target_properties(${target_name} PROPERTIES PREFIX "" WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_compile_features(${target_name} PRIVATE cxx_std_20)
target_link_libraries(${target_name} PRIVATE dusklight_game_headers)
if(APPLE)
target_link_options(${target_name} PRIVATE -undefined dynamic_lookup)
elseif(UNIX)
target_link_options(${target_name} PRIVATE -Wl,--allow-shlib-undefined)
elseif(WIN32)
target_link_libraries(${target_name} PRIVATE dusklight_game)
if(MSVC)
target_link_options(${target_name} PRIVATE /INCREMENTAL:NO)
set_target_properties(${target_name} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
endif()
set(_stage "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_stage")
set(_out "${DUSK_MODS_OUTPUT_DIR}/${target_name}.dusk")
file(MAKE_DIRECTORY "${_stage}") # must exist before POST_BUILD on Windows
set(_zip_args "$<TARGET_FILE_NAME:${target_name}>" mod.json)
set(_extra_cmds "")
if(ARG_RES_DIR)
list(APPEND _zip_args res)
set(_extra_cmds COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}/${ARG_RES_DIR}" "${_stage}/res")
endif()
add_custom_command(TARGET ${target_name} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${_stage}" "${DUSK_MODS_OUTPUT_DIR}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:${target_name}>" "${_stage}/$<TARGET_FILE_NAME:${target_name}>"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_MOD_JSON}" "${_stage}/mod.json"
${_extra_cmds}
COMMAND ${CMAKE_COMMAND} -E tar cvf "${_out}" --format=zip ${_zip_args}
WORKING_DIRECTORY "${_stage}"
COMMENT "Packaging ${target_name} -> ${_out}"
)
endfunction()
-68
View File
@@ -1,68 +0,0 @@
# The game ABI surface shared by the main build and the mod SDK (sdk/CMakeLists.txt)
include_guard(GLOBAL)
get_filename_component(_game_root "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
# PARTIAL_DEBUG makes debug and release share one struct/vtable ABI so a mod binary loads into either
set(_game_compile_defs TARGET_PC=1 WIDESCREEN_SUPPORT=1 AVOID_UB=1 VERSION=0 MTX_USE_PS=1 PARTIAL_DEBUG=1)
if (ANDROID)
list(APPEND _game_compile_defs TARGET_ANDROID=1)
endif ()
# Public game headers
set(_game_abi_include_dirs
${_game_root}/include
${_game_root}/assets/GZ2E01
${_game_root}/libs/JSystem/include
${_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}
)
# 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)
-518
View File
@@ -1,518 +0,0 @@
# 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_info out_platform_var out_name_var)
set(_arch "${CMAKE_SYSTEM_PROCESSOR}")
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
list(LENGTH CMAKE_OSX_ARCHITECTURES _count)
if (_count GREATER 1)
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")
else ()
set(_ext ".so")
endif ()
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)
if (IS_ABSOLUTE "${path}")
set(_path "${path}")
else ()
set(_path "${CMAKE_CURRENT_SOURCE_DIR}/${path}")
endif ()
set(${out_var} "${_path}" PARENT_SCOPE)
endfunction()
function(_mod_collect_assets out_var dir)
if (NOT IS_DIRECTORY "${dir}")
message(FATAL_ERROR "add_mod: asset directory does not exist: ${dir}")
endif ()
file(GLOB_RECURSE _files CONFIGURE_DEPENDS LIST_DIRECTORIES false "${dir}/*")
# 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;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 ()
_mod_resolve_source_path(_mod_json "${ARG_MOD_JSON}")
if (NOT EXISTS "${_mod_json}")
message(FATAL_ERROR "add_mod: MOD_JSON does not exist: ${_mod_json}")
endif ()
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 ()
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 ()
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)
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 ()
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 ()
set_target_properties(${target_name} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
target_compile_definitions(${target_name} PRIVATE _ITERATOR_DEBUG_LEVEL=0)
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}")
if (ARG_OUTPUT_DIR)
set(_output_dir "${ARG_OUTPUT_DIR}")
endif ()
set(_stage "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_stage")
set(_out "${_output_dir}/${target_name}.dusk")
set(_zip_args mod.json)
set(_package_deps "${_mod_json}")
set(_package_inputs "${_mod_json}")
set(_extra_cmds "")
set(_lib_copy_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}")
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} "-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}")
_mod_collect_assets(_overlay_deps "${_overlay_dir}")
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} "-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}")
_mod_collect_assets(_textures_deps "${_textures_dir}")
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} "-DSRC=${_textures_dir}"
"-DDST=${_stage}/textures" -P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/CopyModAssets.cmake")
endif ()
set(_bundle_cmds "")
if (ARG_BUNDLE AND TARGET dusklight)
file(READ "${_mod_json}" _mod_json_text)
string(JSON _mod_id GET "${_mod_json_text}" id)
set_property(GLOBAL APPEND PROPERTY DUSK_BUNDLED_MOD_TARGETS "${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"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_out}" "${CMAKE_BINARY_DIR}/bundled_mods/${target_name}.dusk")
endif ()
set(_package_target "${target_name}_package")
set(_package_inputs_file "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_package_inputs.txt")
list(SORT _package_inputs)
set(_package_inputs_text "")
foreach (_package_input IN LISTS _package_inputs)
string(APPEND _package_inputs_text "${_package_input}\n")
endforeach ()
file(GENERATE OUTPUT "${_package_inputs_file}" CONTENT "${_package_inputs_text}")
add_custom_command(OUTPUT "${_out}"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${_stage}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_stage}" "${_output_dir}"
${_lib_copy_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_depend} ${_package_deps} "${_package_inputs_file}"
COMMENT "Packaging ${target_name} -> ${_out}"
COMMAND_EXPAND_LISTS
VERBATIM
)
add_custom_target(${_package_target} ALL DEPENDS "${_out}")
if (TARGET dusklight_mods)
add_dependencies(dusklight_mods ${_package_target})
endif ()
endfunction()
# Install rules for BUNDLE mods.
# - Windows: the .dusk archives into <install>/mods (the loader extracts native libs to the
# 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, 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)
if (NOT _targets OR ANDROID)
return ()
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")
if (APPLE)
get_target_property(_app_name dusklight OUTPUT_NAME)
if (NOT _app_name)
set(_app_name dusklight)
endif ()
set(_bundle_dir "${CMAKE_INSTALL_PREFIX}/${_app_name}.app")
if (IOS OR TVOS)
foreach (_i RANGE ${_last})
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" EXCLUDE)
install(PROGRAMS "$<TARGET_FILE:${_target}>"
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 "
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 ()
endif ()
if (DUSK_PACKAGE_INSTALL)
set(_mods_dest "${CMAKE_INSTALL_DATAROOTDIR}/dusklight/mods")
else ()
set(_mods_dest "${CMAKE_INSTALL_PREFIX}/mods")
endif ()
if (WIN32)
foreach (_target IN LISTS _targets)
install(FILES "${CMAKE_BINARY_DIR}/bundled_mods/${_target}.dusk" DESTINATION "${_mods_dest}")
endforeach ()
else ()
foreach (_i RANGE ${_last})
list(GET _ids ${_i} _id)
list(GET _stages ${_i} _stage)
install(DIRECTORY "${_stage}/" DESTINATION "${_mods_dest}/${_id}")
endforeach ()
endif ()
endfunction()
-60
View File
@@ -1,60 +0,0 @@
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}"
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}")
endif ()
file(WRITE "${SOURCE_DIR}/src/funchook_unix.c" "${_unix_content}")
-153
View File
@@ -1,153 +0,0 @@
include_guard(GLOBAL)
get_filename_component(_SYMBOL_MANIFEST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
set(_SYMGEN_VERSION "1.3.2")
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 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=0344838d1674df09c17c3eeddcf26eb89c333fdb85dfd78f68adc436070eccbe")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-macos-x86_64")
set(_asset_hash "SHA256=ae0674f4a1e9d0dedfa02d35939ac28cdd229276b331c1f507df5df809cbec7e")
endif ()
elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
if (_host_processor MATCHES "^(aarch64|arm64)$")
set(_asset "symgen-linux-aarch64")
set(_asset_hash "SHA256=af766de2bfaeb0a06f6d7bc17bb2510b4a9c40f44a56e49bc4a4b798a6223042")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-linux-x86_64")
set(_asset_hash "SHA256=ebd62fb9623acc942b6295609e2306f85a73043b0a8a117f2072b761dd08e68f")
elseif (_host_processor MATCHES "^(i[3-6]86|x86)$")
set(_asset "symgen-linux-i686")
set(_asset_hash "SHA256=07780a4513fd29726578efc4ff2d88736b22f407ed821b32a68e35ff1e9af5f4")
endif ()
elseif (CMAKE_HOST_WIN32)
if (_host_processor MATCHES "^(arm64|aarch64)$")
set(_asset "symgen-windows-arm64.exe")
set(_asset_hash "SHA256=5bb22b4a4a9b5ad45646af411bfb09b8321a732ff3a077eb4c9de1feaef27d2b")
elseif (_host_processor MATCHES "^(x86_64|amd64)$")
set(_asset "symgen-windows-x86_64.exe")
set(_asset_hash "SHA256=1d1ac087f991a96932d108969e15998becfec643e88f3e7d182ca97ebfc6a46f")
elseif (_host_processor MATCHES "^(i[3-6]86|x86)$")
set(_asset "symgen-windows-x86.exe")
set(_asset_hash "SHA256=c113f4cd05f813efe2b1878dbfcf44d6302aee3974271736e0036430b0cced78")
endif ()
endif ()
set(${out_name} "${_asset}" PARENT_SCOPE)
set(${out_hash} "${_asset_hash}" PARENT_SCOPE)
endfunction()
function(ensure_symgen required)
if (TARGET symgen)
return()
endif ()
if (SYMGEN_PATH)
get_filename_component(_symgen "${SYMGEN_PATH}" ABSOLUTE)
if (NOT EXISTS "${_symgen}")
if (required)
message(FATAL_ERROR "symgen: SYMGEN_PATH does not exist: ${_symgen}")
endif ()
message(STATUS "symgen: SYMGEN_PATH does not exist, symbol manifest generation "
"skipped (by-name hook resolution will be unavailable)")
return()
endif ()
else ()
symgen_host_asset(_asset _asset_hash)
if (_asset STREQUAL "")
if (required)
message(FATAL_ERROR "symgen: no prebuilt binary for host "
"${CMAKE_HOST_SYSTEM_NAME}/${CMAKE_HOST_SYSTEM_PROCESSOR} "
"(configure with -DDUSK_ENABLE_CODE_MODS=OFF)")
endif ()
message(STATUS "symgen: no prebuilt binary for host "
"${CMAKE_HOST_SYSTEM_NAME}/${CMAKE_HOST_SYSTEM_PROCESSOR}; "
"symbol manifest generation skipped (by-name hook resolution will be unavailable)")
return()
endif ()
set(_symgen_dir "${CMAKE_BINARY_DIR}/_deps/symgen")
set(_symgen "${_symgen_dir}/${_asset}")
set(_url "${_SYMGEN_RELEASE_BASE_URL}/${_asset}")
message(STATUS "dusklight: Fetching symgen ${_SYMGEN_VERSION} (${_asset})")
file(MAKE_DIRECTORY "${_symgen_dir}")
file(DOWNLOAD "${_url}" "${_symgen}"
TLS_VERIFY ON
STATUS _download_status
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)
file(REMOVE "${_symgen}")
if (required)
message(FATAL_ERROR "symgen: failed to download ${_url}: ${_download_message}")
endif ()
message(STATUS "symgen: failed to download ${_url}: ${_download_message}; "
"symbol manifest generation skipped (by-name hook resolution will be unavailable)")
return()
endif ()
if (NOT CMAKE_HOST_WIN32)
file(CHMOD "${_symgen}" PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
endif ()
endif ()
add_custom_target(symgen DEPENDS "${_symgen}")
set(SYMGEN_EXE "${_symgen}" CACHE INTERNAL "symgen executable" FORCE)
endfunction()
function(setup_symbol_manifest target)
ensure_symgen(TRUE)
if (NOT TARGET symgen)
return()
endif ()
add_dependencies(${target} symgen)
# 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} --embed "$<TARGET_FILE:${target}>"
COMMENT "Embedding symbol manifest"
VERBATIM)
endfunction()
-93
View File
@@ -1,93 +0,0 @@
include_guard(GLOBAL)
get_filename_component(_DUSK_WINDOWS_EXPORTS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
# Windows mod linking: generate the curated export surface for the game executable and the
# 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)
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")
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 ()
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
COMMAND "${_symgen}" def
"@${_rsp}"
--out "${_def}"
--exclude cmake_pch
--exclude miniz
--exclude asan_options
--exclude src/dusk
--max-exports 58000
${_sdk_args}
${_forward_args}
COMMENT "Generating dusklight exports"
VERBATIM)
target_link_options(${target} PRIVATE "/DEF:${_def}")
# Generate import library for mods to link against.
set(_implib "${CMAKE_BINARY_DIR}/${_config_subdir}dusklight_imports.lib")
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 "${_dlltool_machine}" -l "${_implib}")
else ()
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}
BYPRODUCTS "${_implib}"
COMMENT "Generating dusklight import library"
VERBATIM)
set(DUSK_GAME_IMPLIB "${_implib}" CACHE INTERNAL "Import library for Windows mod linking")
install(FILES "${_implib}" DESTINATION sdk RENAME "windows-${_implib_arch}.lib")
endfunction()
+11
View File
@@ -0,0 +1,11 @@
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}"
CONFIGURE_COMMAND ""]=]
_content "${_content}")
file(WRITE "${SOURCE_DIR}/cmake/capstone.cmake.in" "${_content}")
+207 -706
View File
File diff suppressed because it is too large Load Diff
+1 -1
+70 -98
View File
@@ -1411,105 +1411,68 @@ set(DOLPHIN_FILES
) )
set(DUSK_FILES set(DUSK_FILES
include/helpers/batch.hpp include/dusk/action_bindings.h
include/helpers/endian_gx.hpp include/dusk/endian_gx.hpp
include/dusk/config.hpp
include/dusk/dvd_asset.hpp
include/dusk/scope_guard.hpp
src/dusk/dvd_asset.cpp
src/d/actor/d_a_alink_dusk.cpp src/d/actor/d_a_alink_dusk.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/android_frame_rate.cpp
src/dusk/android_frame_rate.hpp src/dusk/android_frame_rate.hpp
src/dusk/android_frame_rate.cpp
src/dusk/asserts.cpp src/dusk/asserts.cpp
src/dusk/autosave.cpp src/dusk/batch.cpp
src/dusk/batch.hpp
src/dusk/config.cpp src/dusk/config.cpp
src/dusk/config.hpp
src/dusk/crash_handler.cpp src/dusk/crash_handler.cpp
src/dusk/crash_reporting.cpp src/dusk/crash_reporting.cpp
src/dusk/data.cpp src/dusk/data.cpp
src/dusk/data.hpp src/dusk/data.hpp
src/dusk/discord.cpp src/dusk/endian.cpp
src/dusk/discord.hpp
src/dusk/discord_presence.cpp
src/dusk/dvd_asset.cpp
src/dusk/dvd_asset.hpp
src/dusk/extras.c src/dusk/extras.c
src/dusk/file_select.cpp src/dusk/file_select.cpp
src/dusk/file_select.hpp src/dusk/file_select.hpp
src/dusk/frame_interpolation.cpp src/dusk/frame_interpolation.cpp
src/dusk/game_clock.cpp src/dusk/game_clock.cpp
src/dusk/gamepad_color.cpp
src/dusk/globals.cpp src/dusk/globals.cpp
src/dusk/gyro.cpp src/dusk/gyro.cpp
src/dusk/http/http.hpp include/dusk/menu_pointer.h
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/ImGuiProcessOverlay.cpp
src/dusk/imgui/ImGuiSaveEditor.cpp
src/dusk/imgui/ImGuiStateShare.cpp
src/dusk/imgui/ImGuiStateShare.hpp
src/dusk/imgui/ImGuiStubLog.cpp
src/dusk/io.cpp
src/dusk/iso_validate.cpp
src/dusk/layout.cpp
src/dusk/livesplit.cpp
src/dusk/logging.cpp
src/dusk/menu_pointer.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/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/log_buffer.cpp
src/dusk/mods/log_buffer.hpp
src/dusk/mods/manifest.cpp
src/dusk/mods/manifest.hpp
src/dusk/mods/svc/camera.cpp
src/dusk/mods/svc/config.cpp
src/dusk/mods/svc/config.hpp
src/dusk/mods/svc/game.cpp
src/dusk/mods/svc/gfx.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/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/window.cpp
src/dusk/mods/svc/window.hpp
src/dusk/mouse.cpp src/dusk/mouse.cpp
src/dusk/scope_guard.hpp 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/settings.cpp
src/dusk/speedrun.cpp src/dusk/speedrun.cpp
src/dusk/string.cpp
src/dusk/stubs.cpp src/dusk/stubs.cpp
include/dusk/texture_replacements.hpp
src/dusk/texture_replacements.cpp src/dusk/texture_replacements.cpp
src/dusk/texture_replacements.hpp
src/dusk/touch_camera.cpp src/dusk/touch_camera.cpp
src/dusk/update_check.cpp
src/dusk/update_check.hpp
#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/imgui/ImGuiBloomWindow.cpp
src/dusk/imgui/ImGuiBloomWindow.hpp
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/ui/achievements.cpp src/dusk/ui/achievements.cpp
src/dusk/ui/achievements.hpp src/dusk/ui/achievements.hpp
src/dusk/ui/bool_button.cpp src/dusk/ui/bool_button.cpp
@@ -1518,9 +1481,9 @@ set(DUSK_FILES
src/dusk/ui/button.hpp src/dusk/ui/button.hpp
src/dusk/ui/component.cpp src/dusk/ui/component.cpp
src/dusk/ui/component.hpp src/dusk/ui/component.hpp
src/dusk/ui/controls.hpp
src/dusk/ui/controller_config.cpp src/dusk/ui/controller_config.cpp
src/dusk/ui/controller_config.hpp src/dusk/ui/controller_config.hpp
src/dusk/ui/controls.hpp
src/dusk/ui/document.cpp src/dusk/ui/document.cpp
src/dusk/ui/document.hpp src/dusk/ui/document.hpp
src/dusk/ui/editor.cpp src/dusk/ui/editor.cpp
@@ -1529,22 +1492,12 @@ set(DUSK_FILES
src/dusk/ui/event.hpp src/dusk/ui/event.hpp
src/dusk/ui/graphics_tuner.cpp src/dusk/ui/graphics_tuner.cpp
src/dusk/ui/graphics_tuner.hpp src/dusk/ui/graphics_tuner.hpp
src/dusk/ui/icon_provider.cpp
src/dusk/ui/icon_provider.hpp
src/dusk/ui/input.cpp src/dusk/ui/input.cpp
src/dusk/ui/input.hpp src/dusk/ui/input.hpp
src/dusk/ui/logs_window.cpp src/dusk/ui/icon_provider.cpp
src/dusk/ui/logs_window.hpp src/dusk/ui/icon_provider.hpp
src/dusk/ui/menu_bar.cpp
src/dusk/ui/menu_bar.hpp
src/dusk/ui/mod_texture_provider.cpp
src/dusk/ui/mod_texture_provider.hpp
src/dusk/ui/mod_window.cpp
src/dusk/ui/mod_window.hpp
src/dusk/ui/modal.cpp src/dusk/ui/modal.cpp
src/dusk/ui/modal.hpp 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_types.hpp
src/dusk/ui/number_button.cpp src/dusk/ui/number_button.cpp
src/dusk/ui/number_button.hpp src/dusk/ui/number_button.hpp
@@ -1552,6 +1505,10 @@ set(DUSK_FILES
src/dusk/ui/overlay.hpp src/dusk/ui/overlay.hpp
src/dusk/ui/pane.cpp src/dusk/ui/pane.cpp
src/dusk/ui/pane.hpp 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/prelaunch.cpp src/dusk/ui/prelaunch.cpp
src/dusk/ui/prelaunch.hpp src/dusk/ui/prelaunch.hpp
src/dusk/ui/preset.cpp src/dusk/ui/preset.cpp
@@ -1566,10 +1523,10 @@ set(DUSK_FILES
src/dusk/ui/string_button.hpp src/dusk/ui/string_button.hpp
src/dusk/ui/tab_bar.cpp src/dusk/ui/tab_bar.cpp
src/dusk/ui/tab_bar.hpp src/dusk/ui/tab_bar.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.cpp
src/dusk/ui/touch_controls_common.hpp src/dusk/ui/touch_controls_common.hpp
src/dusk/ui/touch_controls.cpp
src/dusk/ui/touch_controls.hpp
src/dusk/ui/touch_controls_editor.cpp src/dusk/ui/touch_controls_editor.cpp
src/dusk/ui/touch_controls_editor.hpp src/dusk/ui/touch_controls_editor.hpp
src/dusk/ui/ui.cpp src/dusk/ui/ui.cpp
@@ -1578,13 +1535,28 @@ set(DUSK_FILES
src/dusk/ui/warp.hpp src/dusk/ui/warp.hpp
src/dusk/ui/window.cpp src/dusk/ui/window.cpp
src/dusk/ui/window.hpp src/dusk/ui/window.hpp
src/dusk/update_check.cpp src/dusk/achievements.cpp
src/dusk/update_check.hpp 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/hook_system.cpp
src/dusk/modding/mod_loader.cpp
src/dusk/modding/mod_loader_api.cpp
src/dusk/modding/mod_loader_overlay.cpp
src/dusk/modding/native_module.cpp
src/dusk/modding/native_module.hpp
src/dusk/modding/bundle_disk.cpp
src/dusk/modding/bundle_zip.cpp
src/dusk/gx_helper.cpp
src/dusk/discord.cpp
src/dusk/discord.hpp
src/dusk/discord_presence.cpp
src/dusk/version.cpp src/dusk/version.cpp
src/helpers/batch.cpp src/dusk/action_bindings.cpp
src/helpers/endian.cpp
src/helpers/offset_ptr.cpp
src/helpers/string.cpp
) )
set(DUSK_HTTP_BACKEND_FILES set(DUSK_HTTP_BACKEND_FILES
+18 -15
View File
@@ -2,7 +2,6 @@
description = "Dusklight native PC port of the Twilight Princess decompilation"; description = "Dusklight native PC port of the Twilight Princess decompilation";
inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
inputs.self.submodules = true;
outputs = outputs =
{ self, nixpkgs }: { self, nixpkgs }:
@@ -59,6 +58,21 @@
hasNodPrebuilt = nodPrebuiltInfo ? ${system}; hasNodPrebuilt = nodPrebuiltInfo ? ${system};
aurora = builtins.pathExists "${self}/extern/aurora/CMakeLists.txt"; 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 { dawn = pkgs.fetchzip {
url = "https://github.com/encounter/dawn/releases/download/${dawnVersion}/dawn-${dawnInfo.${system}.triple}.tar.gz"; url = "https://github.com/encounter/dawn/releases/download/${dawnVersion}/dawn-${dawnInfo.${system}.triple}.tar.gz";
@@ -126,14 +140,6 @@
JSON = pkgs.nlohmann_json.src; JSON = pkgs.nlohmann_json.src;
XXHASH = pkgs.xxhash.src; XXHASH = pkgs.xxhash.src;
ZSTD = pkgs.zstd.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 { FMT = pkgs.fetchzip {
url = "https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz"; url = "https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz";
hash = "sha256-ZmI1Dv0ZabPlxa02OpERI47jp7zFfjpeWCy1WyuPYZ0="; hash = "sha256-ZmI1Dv0ZabPlxa02OpERI47jp7zFfjpeWCy1WyuPYZ0=";
@@ -159,6 +165,9 @@
}; };
dusklight = dusklight =
if !aurora then
throw needSubmodules
else
pkgs.stdenv.mkDerivation { pkgs.stdenv.mkDerivation {
pname = "dusklight"; pname = "dusklight";
version = versionSuffix; version = versionSuffix;
@@ -260,12 +269,6 @@
runHook postInstall runHook postInstall
''; '';
postFixup = lib.optionalString (!isDarwin) ''
patchelf \
--add-needed "${pkgs.vulkan-loader}/lib/libvulkan.so" \
$out/bin/dusklight
'';
dontStrip = true; dontStrip = true;
meta = { meta = {
+3 -3
View File
@@ -88,9 +88,9 @@ struct DynamicModuleControl : DynamicModuleControlBase {
/* 0x24 */ s32 mSize; /* 0x24 */ s32 mSize;
/* 0x28 */ mDoDvdThd_callback_c* mAsyncLoadCallback; /* 0x28 */ mDoDvdThd_callback_c* mAsyncLoadCallback;
static DUSK_GAME_DATA u32 sAllocBytes; static u32 sAllocBytes;
static DUSK_GAME_DATA JKRArchive* sArchive; static JKRArchive* sArchive;
static DUSK_GAME_DATA JKRFileCache* sFileCache; static JKRFileCache* sFileCache;
}; };
#endif /* DYNAMICLINK_H */ #endif /* DYNAMICLINK_H */
+1 -1
View File
@@ -12,6 +12,6 @@ struct cAPI_Interface {
/* 0x14 */ cAPIGph_Mthd blankingOffMtd; /* 0x14 */ cAPIGph_Mthd blankingOffMtd;
}; };
DUSK_GAME_EXTERN cAPI_Interface g_cAPI_Interface; extern cAPI_Interface g_cAPI_Interface;
#endif /* C_API_H */ #endif /* C_API_H */
+5 -5
View File
@@ -24,11 +24,11 @@ private:
s16 mAngle; s16 mAngle;
public: public:
const static DUSK_GAME_DATA cSAngle _0; const static cSAngle _0;
const static DUSK_GAME_DATA cSAngle _1; const static cSAngle _1;
const static DUSK_GAME_DATA cSAngle _90; const static cSAngle _90;
const static DUSK_GAME_DATA cSAngle _180; const static cSAngle _180;
const static DUSK_GAME_DATA cSAngle _270; const static cSAngle _270;
#ifdef __MWERKS__ #ifdef __MWERKS__
cSAngle() {} cSAngle() {}
~cSAngle() {} ~cSAngle() {}
+1 -1
View File
@@ -5,7 +5,7 @@
#include "f_pc/f_pc_base.h" #include "f_pc/f_pc_base.h"
#include "SSystem/SComponent/c_bg_s_grp_pass_chk.h" #include "SSystem/SComponent/c_bg_s_grp_pass_chk.h"
#include "SSystem/SComponent/c_bg_s_poly_pass_chk.h" #include "SSystem/SComponent/c_bg_s_poly_pass_chk.h"
#include "helpers/endian.h" #include "dusk/endian.h"
struct cBgD_Vtx_t : public Vec {}; struct cBgD_Vtx_t : public Vec {};
@@ -20,7 +20,7 @@ public:
/* 0x14 */ cM3dGAab mM3dGAab; /* 0x14 */ cM3dGAab mM3dGAab;
/* 0x30 */ cBgS_ShdwDraw_Callback mCallbackFun; /* 0x30 */ cBgS_ShdwDraw_Callback mCallbackFun;
#if PARTIAL_DEBUG || DEBUG #if DEBUG
/* 0x34 */ int field_0x34; /* 0x34 */ int field_0x34;
#endif #endif
}; };
+1 -1
View File
@@ -435,7 +435,7 @@ public:
cM3dGAab& GetWorkAab() { return mAab; } cM3dGAab& GetWorkAab() { return mAab; }
static DUSK_GAME_DATA cXyz m_virtual_center; static cXyz m_virtual_center;
}; };
STATIC_ASSERT(0x20 == sizeof(cCcD_ShapeAttr)); STATIC_ASSERT(0x20 == sizeof(cCcD_ShapeAttr));
+1 -1
View File
@@ -9,7 +9,7 @@ struct counter_class {
u32 mTimer; u32 mTimer;
}; };
DUSK_GAME_EXTERN counter_class g_Counter; extern counter_class g_Counter;
void cCt_Counter(int resetCounter1); void cCt_Counter(int resetCounter1);
+1 -1
View File
@@ -102,6 +102,6 @@ void MtxPosition(cXyz DUSK_CONST*, cXyz*);
void MtxPush(void); void MtxPush(void);
void MtxPull(void); void MtxPull(void);
DUSK_GAME_EXTERN Mtx* calc_mtx; extern Mtx* calc_mtx;
#endif #endif
+1 -1
View File
@@ -20,7 +20,7 @@ struct cM3d_Range {
}; };
#define G_CM3D_F_INF (1000000000.0f) #define G_CM3D_F_INF (1000000000.0f)
DUSK_GAME_EXTERN const f32 G_CM3D_F_ABS_MIN; extern const f32 G_CM3D_F_ABS_MIN;
static void cM3d_InDivPos1(const Vec*, const Vec*, f32, Vec*); static void cM3d_InDivPos1(const Vec*, const Vec*, f32, Vec*);
void cM3d_InDivPos2(const Vec*, const Vec*, f32, Vec*); void cM3d_InDivPos2(const Vec*, const Vec*, f32, Vec*);
+1 -1
View File
@@ -2,7 +2,7 @@
#define C_M3D_G_TRI_H_ #define C_M3D_G_TRI_H_
#include "SSystem/SComponent/c_m3d_g_pla.h" #include "SSystem/SComponent/c_m3d_g_pla.h"
#include "helpers/endian.h" #include "dusk/endian.h"
class cM3dGCyl; class cM3dGCyl;
+1 -1
View File
@@ -6,7 +6,7 @@
class JKRHeap; class JKRHeap;
struct cMl { struct cMl {
static DUSK_GAME_DATA JKRHeap* Heap; static JKRHeap* Heap;
static void init(JKRHeap*); static void init(JKRHeap*);
static void* memalignB(int, u32); static void* memalignB(int, u32);
static void free(void*); static void free(void*);
+1 -1
View File
@@ -9,7 +9,7 @@ struct SVec {
class csXyz : public SVec { class csXyz : public SVec {
public: public:
static DUSK_GAME_DATA const csXyz Zero; static const csXyz Zero;
~csXyz() {} ~csXyz() {}
csXyz() {} csXyz() {}
csXyz(s16, s16, s16); csXyz(s16, s16, s16);
+8 -8
View File
@@ -14,14 +14,14 @@ struct cXy {
}; };
struct cXyz : Vec { struct cXyz : Vec {
static DUSK_GAME_DATA const cXyz Zero; static const cXyz Zero;
static DUSK_GAME_DATA const cXyz BaseX; static const cXyz BaseX;
static DUSK_GAME_DATA const cXyz BaseY; static const cXyz BaseY;
static DUSK_GAME_DATA const cXyz BaseZ; static const cXyz BaseZ;
static DUSK_GAME_DATA const cXyz BaseXY; static const cXyz BaseXY;
static DUSK_GAME_DATA const cXyz BaseXZ; static const cXyz BaseXZ;
static DUSK_GAME_DATA const cXyz BaseYZ; static const cXyz BaseYZ;
static DUSK_GAME_DATA const cXyz BaseXYZ; static const cXyz BaseXYZ;
#ifdef __MWERKS__ #ifdef __MWERKS__
cXyz() {} cXyz() {}
~cXyz() {} ~cXyz() {}
+2 -2
View File
@@ -256,7 +256,7 @@ inline Z2Audience* Z2GetAudience() {
return JASGlobalInstance<Z2Audience>::getInstance(); return JASGlobalInstance<Z2Audience>::getInstance();
} }
DUSK_GAME_EXTERN s8 data_80451358; extern s8 data_80451358;
DUSK_GAME_EXTERN s8 data_80451359; extern s8 data_80451359;
#endif /* Z2AUDIENCE_H */ #endif /* Z2AUDIENCE_H */
-2
View File
@@ -48,8 +48,6 @@ public:
/* 0x1370 */ Z2FxLineMgr mFxLineMgr; /* 0x1370 */ Z2FxLineMgr mFxLineMgr;
#if DEBUG #if DEBUG
/* 0x13BC */ Z2DebugSys mDebugSys; /* 0x13BC */ Z2DebugSys mDebugSys;
#elif PARTIAL_DEBUG
alignas(Z2DebugSys) u8 mDebugSys[sizeof(Z2DebugSys)];
#endif #endif
}; // Size: 0x138C }; // Size: 0x138C
+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(f32 magnitude, f32 exponent, f32 bias);
f32 getRandom_0_1(); f32 getRandom_0_1();
DUSK_GAME_EXTERN const f32 cEqualCSlope; extern const f32 cEqualCSlope;
DUSK_GAME_EXTERN const f32 cEqualPSlope; extern const f32 cEqualPSlope;
} // namespace Z2Calc } // namespace Z2Calc
#endif /* Z2CALC_H */ #endif /* Z2CALC_H */
+1 -1
View File
@@ -175,7 +175,7 @@ struct Z2EnvSeMgr : public JASGlobalInstance<Z2EnvSeMgr> {
STATIC_ASSERT(sizeof(Z2EnvSeMgr) == 0x30C); STATIC_ASSERT(sizeof(Z2EnvSeMgr) == 0x30C);
DUSK_GAME_EXTERN Z2EnvSeMgr g_mEnvSeMgr; extern Z2EnvSeMgr g_mEnvSeMgr;
inline Z2EnvSeMgr* Z2GetEnvSeMgr() { inline Z2EnvSeMgr* Z2GetEnvSeMgr() {
return JASGlobalInstance<Z2EnvSeMgr>::getInstance(); return JASGlobalInstance<Z2EnvSeMgr>::getInstance();
+1 -1
View File
@@ -57,7 +57,7 @@ public:
void setUsingIronBall(bool isUsingIronBall) { mUsingIronBall = isUsingIronBall; } void setUsingIronBall(bool isUsingIronBall) { mUsingIronBall = isUsingIronBall; }
void setMarkState(u8 state) { mMarkState = state; } void setMarkState(u8 state) { mMarkState = state; }
static DUSK_GAME_DATA Z2CreatureLink* mLinkPtr; static Z2CreatureLink* mLinkPtr;
static Z2CreatureLink* getLink() { return mLinkPtr; } static Z2CreatureLink* getLink() { return mLinkPtr; }
friend class Z2LinkSoundStarter; friend class Z2LinkSoundStarter;
+52 -52
View File
@@ -4,72 +4,72 @@
#include <types.h> #include <types.h>
struct Z2Param { struct Z2Param {
static DUSK_GAME_DATA f32 DISTANCE_MAX; static f32 DISTANCE_MAX;
static DUSK_GAME_DATA f32 MAX_VOLUME_DISTANCE; static f32 MAX_VOLUME_DISTANCE;
static DUSK_GAME_DATA f32 DOLBY_CENTER_VALUE; static f32 DOLBY_CENTER_VALUE;
static DUSK_GAME_DATA f32 DOLBY_FLONT_DISTANCE_MAX; static f32 DOLBY_FLONT_DISTANCE_MAX;
static DUSK_GAME_DATA f32 DOLBY_BEHIND_DISTANCE_MAX; static f32 DOLBY_BEHIND_DISTANCE_MAX;
static DUSK_GAME_DATA f32 DISTANCE_FX_PARAM; static f32 DISTANCE_FX_PARAM;
static DUSK_GAME_DATA f32 SONIC_SPEED; static f32 SONIC_SPEED;
static DUSK_GAME_DATA f32 VOL_BGM_DEFAULT; static f32 VOL_BGM_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_DEFAULT; static f32 VOL_SE_SYSTEM_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_DEFAULT; static f32 VOL_SE_LINK_VOICE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_DEFAULT; static f32 VOL_SE_LINK_MOTION_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_DEFAULT; static f32 VOL_SE_LINK_FOOTNOTE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_DEFAULT; static f32 VOL_SE_CHAR_VOICE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_DEFAULT; static f32 VOL_SE_CHAR_MOVE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_DEFAULT; static f32 VOL_SE_OBJECT_DEFAULT;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_DEFAULT; static f32 VOL_SE_ATMOSPHERE_DEFAULT;
static DUSK_GAME_DATA f32 VOL_BGM_TALKING; static f32 VOL_BGM_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_TALKING; static f32 VOL_SE_SYSTEM_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_TALKING; static f32 VOL_SE_LINK_VOICE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_TALKING; static f32 VOL_SE_LINK_MOTION_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_TALKING; static f32 VOL_SE_LINK_FOOTNOTE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_TALKING; static f32 VOL_SE_CHAR_VOICE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_TALKING; static f32 VOL_SE_CHAR_MOVE_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_TALKING; static f32 VOL_SE_OBJECT_TALKING;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_TALKING; static f32 VOL_SE_ATMOSPHERE_TALKING;
static DUSK_GAME_DATA f32 VOL_BGM_PAUSING; static f32 VOL_BGM_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_SYSTEM_PAUSING; static f32 VOL_SE_SYSTEM_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_VOICE_PAUSING; static f32 VOL_SE_LINK_VOICE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_MOTION_PAUSING; static f32 VOL_SE_LINK_MOTION_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_LINK_FOOTNOTE_PAUSING; static f32 VOL_SE_LINK_FOOTNOTE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_VOICE_PAUSING; static f32 VOL_SE_CHAR_VOICE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_CHAR_MOVE_PAUSING; static f32 VOL_SE_CHAR_MOVE_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_OBJECT_PAUSING; static f32 VOL_SE_OBJECT_PAUSING;
static DUSK_GAME_DATA f32 VOL_SE_ATMOSPHERE_PAUSING; static f32 VOL_SE_ATMOSPHERE_PAUSING;
static DUSK_GAME_DATA f32 MIN_DISTANCE_VOLUME; static f32 MIN_DISTANCE_VOLUME;
static DUSK_GAME_DATA f32 ENEMY_LASTHIT_MUTE_VOLUME; static f32 ENEMY_LASTHIT_MUTE_VOLUME;
// made up names based on HIO labels // made up names based on HIO labels
static DUSK_GAME_DATA u8 SCENE_CHANGE_BGM_FADEOUT_TIME; static u8 SCENE_CHANGE_BGM_FADEOUT_TIME;
static DUSK_GAME_DATA u8 BGM_CROSS_FADEIN_TIME; static u8 BGM_CROSS_FADEIN_TIME;
static DUSK_GAME_DATA u8 BGM_CROSS_FADEOUT_TIME; static u8 BGM_CROSS_FADEOUT_TIME;
static DUSK_GAME_DATA u8 BATTLE_BGM_WAIT_TIME; static u8 BATTLE_BGM_WAIT_TIME;
static f32 ENEMY_NEARBY_DIST; static f32 ENEMY_NEARBY_DIST;
static f32 BATTLE_FADEIN_DIST; static f32 BATTLE_FADEIN_DIST;
static f32 BATTLE_FADEOUT_DIST; static f32 BATTLE_FADEOUT_DIST;
static DUSK_GAME_DATA u8 FOUND_TRACK_FI_TIME; static u8 FOUND_TRACK_FI_TIME;
static DUSK_GAME_DATA u8 FOUND_TRACK_FO_TIME; static u8 FOUND_TRACK_FO_TIME;
static DUSK_GAME_DATA u8 CLOSE_BATTLE_TRACK_FI_TIME; static u8 CLOSE_BATTLE_TRACK_FI_TIME;
static DUSK_GAME_DATA u8 CLOSE_BATTLE_TRACK_FO_TIME; static u8 CLOSE_BATTLE_TRACK_FO_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_DOWN_TIME; static u8 ENDING_BLOW_VOL_DOWN_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_LOWER_TIME; static u8 ENDING_BLOW_VOL_LOWER_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_VOL_LOWER_RECOVER_TIME; static u8 ENDING_BLOW_VOL_LOWER_RECOVER_TIME;
static DUSK_GAME_DATA u8 ENDING_BLOW_MIN_FINISH_TIME; static u8 ENDING_BLOW_MIN_FINISH_TIME;
static DUSK_GAME_DATA u8 DARK_SE_FILTER_ON; static u8 DARK_SE_FILTER_ON;
static DUSK_GAME_DATA u8 DARK_SE_LOW_PASS_FILTER_SETTING; static u8 DARK_SE_LOW_PASS_FILTER_SETTING;
static DUSK_GAME_DATA u8 SYSTEM_SE_USE_DARK_SE_SETTING; static u8 SYSTEM_SE_USE_DARK_SE_SETTING;
static f32 AUDIBLE_DELTA_RANGE_VOLUME; static f32 AUDIBLE_DELTA_RANGE_VOLUME;
static f32 AUDIBLE_DELTA_RANGE_PAN; static f32 AUDIBLE_DELTA_RANGE_PAN;
static f32 AUDIBLE_DELTA_RANGE_DOLBY; static f32 AUDIBLE_DELTA_RANGE_DOLBY;
}; };
DUSK_GAME_EXTERN u8 data_8045086C; extern u8 data_8045086C;
#endif /* Z2PARAM_H */ #endif /* Z2PARAM_H */
+1 -1
View File
@@ -47,7 +47,7 @@ public:
s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); } s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); }
u8 getDemoSeWaveNum() { return loadedDemoWave; } u8 getDemoSeWaveNum() { return loadedDemoWave; }
// private: private:
/* 0x00 */ JAISoundID BGM_ID; /* 0x00 */ JAISoundID BGM_ID;
/* 0x04 */ int sceneNum; /* 0x04 */ int sceneNum;
/* 0x08 */ int timer; /* 0x08 */ int timer;
+1 -1
View File
@@ -194,7 +194,7 @@ public:
JAISoundHandle* getMainBgmHandle() { return &mMainBgmHandle; } JAISoundHandle* getMainBgmHandle() { return &mMainBgmHandle; }
JAISoundHandle* getSubBgmHandle() { return &mSubBgmHandle; } JAISoundHandle* getSubBgmHandle() { return &mSubBgmHandle; }
#if PARTIAL_DEBUG || DEBUG #if DEBUG
f32 field_0x00_debug; f32 field_0x00_debug;
u8 field_0x04_debug; u8 field_0x04_debug;
#endif #endif
+2 -2
View File
@@ -100,13 +100,13 @@ public:
bool isForceBattle() { return forceBattle_; } bool isForceBattle() { return forceBattle_; }
JSUList<Z2CreatureEnemy>* getEnemyList() { return &field_0x0; } JSUList<Z2CreatureEnemy>* getEnemyList() { return &field_0x0; }
#if PARTIAL_DEBUG || DEBUG #if DEBUG
JSUList<Z2SoundObjBase>* getAllList() { return &allList_; } JSUList<Z2SoundObjBase>* getAllList() { return &allList_; }
#endif #endif
private: private:
/* 0x00 */ JSUList<Z2CreatureEnemy> field_0x0; /* 0x00 */ JSUList<Z2CreatureEnemy> field_0x0;
#if PARTIAL_DEBUG || DEBUG #if DEBUG
/* 0x0C */ JSUList<Z2SoundObjBase> allList_; /* 0x0C */ JSUList<Z2SoundObjBase> allList_;
#endif #endif
/* 0x0C */ Z2EnemyArea enemyArea_; /* 0x0C */ Z2EnemyArea enemyArea_;
+1 -1
View File
@@ -7,7 +7,7 @@
struct Z2SoundStarter; struct Z2SoundStarter;
class Z2SoundObjBase : public Z2SoundHandles class Z2SoundObjBase : public Z2SoundHandles
#if PARTIAL_DEBUG || DEBUG #if DEBUG
, public JSULink<Z2SoundObjBase> , public JSULink<Z2SoundObjBase>
#endif #endif
{ {
+10 -10
View File
@@ -12,18 +12,18 @@ public:
BOOL cDmrNowMidnaTalk(); BOOL cDmrNowMidnaTalk();
DUSK_GAME_EXTERN u8 cDmr_SkipInfo; extern u8 cDmr_SkipInfo;
DUSK_GAME_EXTERN u8 data_80450C99; extern u8 data_80450C99;
DUSK_GAME_EXTERN u8 data_80450C9A; extern u8 data_80450C9A;
DUSK_GAME_EXTERN u8 data_80450C9B; extern u8 data_80450C9B;
DUSK_GAME_EXTERN u8 data_80450C9C; extern u8 data_80450C9C;
DUSK_GAME_EXTERN u8 data_80450C9D; extern u8 data_80450C9D;
DUSK_GAME_EXTERN u8 data_80450C9E; extern u8 data_80450C9E;
DUSK_GAME_EXTERN u8 cDmr_FishingWether; extern u8 cDmr_FishingWether;
DUSK_GAME_EXTERN u8 data_80450CA0; extern u8 data_80450CA0;
extern "C" { extern "C" {
DUSK_GAME_EXTERN JPTraceParticleCallBack4 JPTracePCB4; extern JPTraceParticleCallBack4 JPTracePCB4;
} }
void debug_actor_create(); void debug_actor_create();
+127 -127
View File
@@ -57,8 +57,8 @@ public:
void setNowOffsetX(f32 i_offset) { mNowOffsetX = i_offset; } void setNowOffsetX(f32 i_offset) { mNowOffsetX = i_offset; }
void setNowOffsetY(f32 i_offset) { mNowOffsetY = i_offset; } void setNowOffsetY(f32 i_offset) { mNowOffsetY = i_offset; }
static DUSK_GAME_DATA bool m_eye_move_flg; static bool m_eye_move_flg;
static DUSK_GAME_DATA u8 m_morf_frame; static u8 m_morf_frame;
/* 0x0F4 */ mutable f32 field_0xf4; /* 0x0F4 */ mutable f32 field_0xf4;
/* 0x0F8 */ mutable f32 field_0xf8; /* 0x0F8 */ mutable f32 field_0xf8;
@@ -3913,20 +3913,20 @@ public:
static u32 getOtherHeapSize() { return 0xF0A60; } static u32 getOtherHeapSize() { return 0xF0A60; }
static DUSK_GAME_DATA daAlink_BckData const m_mainBckShield[20]; static daAlink_BckData const m_mainBckShield[20];
static DUSK_GAME_DATA daAlink_BckData const m_mainBckSword[5]; static daAlink_BckData const m_mainBckSword[5];
static DUSK_GAME_DATA daAlink_BckData const m_mainBckFishing[28]; static daAlink_BckData const m_mainBckFishing[28];
static DUSK_GAME_DATA daAlink_AnmData const m_anmDataTable[ANM_MAX]; static daAlink_AnmData const m_anmDataTable[ANM_MAX];
static DUSK_GAME_DATA daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX]; static daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX];
static DUSK_GAME_DATA daAlink_FaceTexData const m_faceTexDataTable[]; static daAlink_FaceTexData const m_faceTexDataTable[];
static DUSK_GAME_DATA Vec const m_handLeftOutSidePos; static Vec const m_handLeftOutSidePos;
static DUSK_GAME_DATA Vec const m_handRightOutSidePos; static Vec const m_handRightOutSidePos;
static DUSK_GAME_DATA Vec const m_handLeftInSidePos; static Vec const m_handLeftInSidePos;
static DUSK_GAME_DATA Vec const m_handRightInSidePos; static Vec const m_handRightInSidePos;
static DUSK_GAME_DATA const daAlink_procInitTable m_procInitTable[]; static const daAlink_procInitTable m_procInitTable[];
static DUSK_GAME_DATA daAlink_procFunc m_demoInitTable[]; static daAlink_procFunc m_demoInitTable[];
static DUSK_GAME_DATA const EffParamProc m_fEffParamProc[]; static const EffParamProc m_fEffParamProc[];
/* 0x0062C */ request_of_phase_process_class mPhaseReq; /* 0x0062C */ request_of_phase_process_class mPhaseReq;
/* 0x00634 */ const char* mArcName; /* 0x00634 */ const char* mArcName;
@@ -4649,7 +4649,7 @@ struct daAlinkHIO_basic_c1 {
class daAlinkHIO_basic_c0 { class daAlinkHIO_basic_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_basic_c1 const m; static daAlinkHIO_basic_c1 const m;
}; };
class daAlinkHIO_basic_c : public daAlinkHIO_data_c { class daAlinkHIO_basic_c : public daAlinkHIO_data_c {
@@ -4700,7 +4700,7 @@ public:
class daAlinkHIO_move_c0 { class daAlinkHIO_move_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_move_c1 const m; static daAlinkHIO_move_c1 const m;
}; };
class daAlinkHIO_move_c : public daAlinkHIO_data_c { class daAlinkHIO_move_c : public daAlinkHIO_data_c {
@@ -4746,7 +4746,7 @@ public:
class daAlinkHIO_atnMove_c0 { class daAlinkHIO_atnMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_atnMove_c1 const m; static daAlinkHIO_atnMove_c1 const m;
}; };
class daAlinkHIO_atnMove_c : public daAlinkHIO_data_c { class daAlinkHIO_atnMove_c : public daAlinkHIO_data_c {
@@ -4792,7 +4792,7 @@ public:
class daAlinkHIO_noActAtnMove_c0 { class daAlinkHIO_noActAtnMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_noActAtnMove_c1 const m; static daAlinkHIO_noActAtnMove_c1 const m;
}; };
class daAlinkHIO_noActAtnMove_c : public daAlinkHIO_data_c { class daAlinkHIO_noActAtnMove_c : public daAlinkHIO_data_c {
@@ -4834,7 +4834,7 @@ public:
class daAlinkHIO_frontRoll_c0 { class daAlinkHIO_frontRoll_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_frontRoll_c1 const m; static daAlinkHIO_frontRoll_c1 const m;
}; };
class daAlinkHIO_frontRoll_c : public daAlinkHIO_data_c { class daAlinkHIO_frontRoll_c : public daAlinkHIO_data_c {
@@ -4864,7 +4864,7 @@ public:
class daAlinkHIO_backJump_c0 { class daAlinkHIO_backJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_backJump_c1 const m; static daAlinkHIO_backJump_c1 const m;
}; };
class daAlinkHIO_backJump_c : public daAlinkHIO_data_c { class daAlinkHIO_backJump_c : public daAlinkHIO_data_c {
@@ -4898,7 +4898,7 @@ public:
class daAlinkHIO_sideStep_c0 { class daAlinkHIO_sideStep_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_sideStep_c1 const m; static daAlinkHIO_sideStep_c1 const m;
}; };
class daAlinkHIO_sideStep_c : public daAlinkHIO_data_c { class daAlinkHIO_sideStep_c : public daAlinkHIO_data_c {
@@ -4936,7 +4936,7 @@ public:
class daAlinkHIO_slide_c0 { class daAlinkHIO_slide_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_slide_c1 const m; static daAlinkHIO_slide_c1 const m;
}; };
class daAlinkHIO_slide_c : public daAlinkHIO_data_c { class daAlinkHIO_slide_c : public daAlinkHIO_data_c {
@@ -4964,27 +4964,27 @@ public:
class daAlinkHIO_cutNmV_c0 { class daAlinkHIO_cutNmV_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m; static daAlinkHIO_cutNormal_c1 const m;
}; };
class daAlinkHIO_cutNmL_c0 { class daAlinkHIO_cutNmL_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m; static daAlinkHIO_cutNormal_c1 const m;
}; };
class daAlinkHIO_cutNmR_c0 { class daAlinkHIO_cutNmR_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m; static daAlinkHIO_cutNormal_c1 const m;
}; };
class daAlinkHIO_cutNmSL_c0 { class daAlinkHIO_cutNmSL_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m; static daAlinkHIO_cutNormal_c1 const m;
}; };
class daAlinkHIO_cutNmSR_c0 { class daAlinkHIO_cutNmSR_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutNormal_c1 const m; static daAlinkHIO_cutNormal_c1 const m;
}; };
class daAlinkHIO_cutNormal_c : public daAlinkHIO_data_c { class daAlinkHIO_cutNormal_c : public daAlinkHIO_data_c {
@@ -5015,32 +5015,32 @@ public:
class daAlinkHIO_cutFnL_c0 { class daAlinkHIO_cutFnL_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFnV_c0 { class daAlinkHIO_cutFnV_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFnS_c0 { class daAlinkHIO_cutFnS_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFnSl_c0 { class daAlinkHIO_cutFnSl_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFnSm_c0 { class daAlinkHIO_cutFnSm_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFnR_c0 { class daAlinkHIO_cutFnR_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFinish_c1 const m; static daAlinkHIO_cutFinish_c1 const m;
}; };
class daAlinkHIO_cutFinish_c : public daAlinkHIO_data_c { class daAlinkHIO_cutFinish_c : public daAlinkHIO_data_c {
@@ -5077,7 +5077,7 @@ public:
class daAlinkHIO_cutFnJU_c0 { class daAlinkHIO_cutFnJU_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutFnJU_c1 const m; static daAlinkHIO_cutFnJU_c1 const m;
}; };
class daAlinkHIO_cutFnJU_c : public daAlinkHIO_data_c { class daAlinkHIO_cutFnJU_c : public daAlinkHIO_data_c {
@@ -5104,17 +5104,17 @@ public:
class daAlinkHIO_cutDaL_c0 { class daAlinkHIO_cutDaL_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m; static daAlinkHIO_cutDash_c1 const m;
}; };
class daAlinkHIO_cutDaR_c0 { class daAlinkHIO_cutDaR_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m; static daAlinkHIO_cutDash_c1 const m;
}; };
class daAlinkHIO_cutDaCharge_c0 { class daAlinkHIO_cutDaCharge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutDash_c1 const m; static daAlinkHIO_cutDash_c1 const m;
}; };
class daAlinkHIO_cutDash_c : public daAlinkHIO_data_c { class daAlinkHIO_cutDash_c : public daAlinkHIO_data_c {
@@ -5146,7 +5146,7 @@ public:
class daAlinkHIO_cutJump_c0 { class daAlinkHIO_cutJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutJump_c1 const m; static daAlinkHIO_cutJump_c1 const m;
}; };
class daAlinkHIO_cutJump_c : public daAlinkHIO_data_c { class daAlinkHIO_cutJump_c : public daAlinkHIO_data_c {
@@ -5197,7 +5197,7 @@ public:
class daAlinkHIO_cutTurn_c0 { class daAlinkHIO_cutTurn_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutTurn_c1 const m; static daAlinkHIO_cutTurn_c1 const m;
}; };
class daAlinkHIO_cutTurn_c : public daAlinkHIO_data_c { class daAlinkHIO_cutTurn_c : public daAlinkHIO_data_c {
@@ -5225,22 +5225,22 @@ public:
class daAlinkHIO_hoCutLA_c0 { class daAlinkHIO_hoCutLA_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m; static daAlinkHIO_hoCut_c1 const m;
}; };
class daAlinkHIO_hoCutLB_c0 { class daAlinkHIO_hoCutLB_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m; static daAlinkHIO_hoCut_c1 const m;
}; };
class daAlinkHIO_hoCutRA_c0 { class daAlinkHIO_hoCutRA_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m; static daAlinkHIO_hoCut_c1 const m;
}; };
class daAlinkHIO_hoCutRB_c0 { class daAlinkHIO_hoCutRB_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hoCut_c1 const m; static daAlinkHIO_hoCut_c1 const m;
}; };
class daAlinkHIO_hoCut_c : public daAlinkHIO_data_c { class daAlinkHIO_hoCut_c : public daAlinkHIO_data_c {
@@ -5273,7 +5273,7 @@ public:
class daAlinkHIO_hoCutCharge_c0 { class daAlinkHIO_hoCutCharge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hoCutCharge_c1 const m; static daAlinkHIO_hoCutCharge_c1 const m;
}; };
class daAlinkHIO_hoCutCharge_c : public daAlinkHIO_data_c { class daAlinkHIO_hoCutCharge_c : public daAlinkHIO_data_c {
@@ -5307,7 +5307,7 @@ public:
class daAlinkHIO_cutDown_c0 { class daAlinkHIO_cutDown_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutDown_c1 const m; static daAlinkHIO_cutDown_c1 const m;
}; };
class daAlinkHIO_cutDown_c : public daAlinkHIO_data_c { class daAlinkHIO_cutDown_c : public daAlinkHIO_data_c {
@@ -5343,7 +5343,7 @@ public:
class daAlinkHIO_cutHead_c0 { class daAlinkHIO_cutHead_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutHead_c1 const m; static daAlinkHIO_cutHead_c1 const m;
}; };
class daAlinkHIO_cutHead_c : public daAlinkHIO_data_c { class daAlinkHIO_cutHead_c : public daAlinkHIO_data_c {
@@ -5380,7 +5380,7 @@ public:
class daAlinkHIO_cutLargeJump_c0 { class daAlinkHIO_cutLargeJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_cutLargeJump_c1 const m; static daAlinkHIO_cutLargeJump_c1 const m;
}; };
class daAlinkHIO_cutLargeJump_c : public daAlinkHIO_data_c { class daAlinkHIO_cutLargeJump_c : public daAlinkHIO_data_c {
@@ -5457,7 +5457,7 @@ public:
static daAlinkHIO_cutDown_c0 const mCutDown; static daAlinkHIO_cutDown_c0 const mCutDown;
static daAlinkHIO_cutHead_c0 const mCutHead; static daAlinkHIO_cutHead_c0 const mCutHead;
static daAlinkHIO_cutLargeJump_c0 const mCutLargeJump; static daAlinkHIO_cutLargeJump_c0 const mCutLargeJump;
static DUSK_GAME_DATA daAlinkHIO_cut_c1 const m; static daAlinkHIO_cut_c1 const m;
}; };
class daAlinkHIO_cut_c : public daAlinkHIO_data_c { class daAlinkHIO_cut_c : public daAlinkHIO_data_c {
@@ -5513,12 +5513,12 @@ public:
class daAlinkHIO_gAtPush_c0 { class daAlinkHIO_gAtPush_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_guardAttack_c1 const m; static daAlinkHIO_guardAttack_c1 const m;
}; };
class daAlinkHIO_gAtKick_c0 { class daAlinkHIO_gAtKick_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_guardAttack_c1 const m; static daAlinkHIO_guardAttack_c1 const m;
}; };
class daAlinkHIO_guardAttack_c : public daAlinkHIO_data_c { class daAlinkHIO_guardAttack_c : public daAlinkHIO_data_c {
@@ -5550,7 +5550,7 @@ public:
class daAlinkHIO_turnMove_c0 { class daAlinkHIO_turnMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_turnMove_c1 const m; static daAlinkHIO_turnMove_c1 const m;
}; };
class daAlinkHIO_turnMove_c : public daAlinkHIO_data_c { class daAlinkHIO_turnMove_c : public daAlinkHIO_data_c {
@@ -5595,7 +5595,7 @@ public:
static daAlinkHIO_gAtPush_c0 const mAtPush; static daAlinkHIO_gAtPush_c0 const mAtPush;
static daAlinkHIO_gAtKick_c0 const mAtKick; static daAlinkHIO_gAtKick_c0 const mAtKick;
static daAlinkHIO_turnMove_c0 const mTurnMove; static daAlinkHIO_turnMove_c0 const mTurnMove;
static DUSK_GAME_DATA daAlinkHIO_guard_c1 const m; static daAlinkHIO_guard_c1 const m;
}; };
class daAlinkHIO_guard_c : public daAlinkHIO_data_c { class daAlinkHIO_guard_c : public daAlinkHIO_data_c {
@@ -5634,7 +5634,7 @@ public:
class daAlinkHIO_crouch_c0 { class daAlinkHIO_crouch_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_crouch_c1 const m; static daAlinkHIO_crouch_c1 const m;
}; };
class daAlinkHIO_crouch_c : public daAlinkHIO_data_c { class daAlinkHIO_crouch_c : public daAlinkHIO_data_c {
@@ -5689,7 +5689,7 @@ public:
class daAlinkHIO_autoJump_c0 { class daAlinkHIO_autoJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_autoJump_c1 const m; static daAlinkHIO_autoJump_c1 const m;
}; };
class daAlinkHIO_autoJump_c : public daAlinkHIO_data_c { class daAlinkHIO_autoJump_c : public daAlinkHIO_data_c {
@@ -5719,7 +5719,7 @@ public:
class daAlinkHIO_smallJump_c0 { class daAlinkHIO_smallJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_smallJump_c1 const m; static daAlinkHIO_smallJump_c1 const m;
}; };
class daAlinkHIO_smallJump_c : public daAlinkHIO_data_c { class daAlinkHIO_smallJump_c : public daAlinkHIO_data_c {
@@ -5748,7 +5748,7 @@ public:
class daAlinkHIO_wallCatch_c0 { class daAlinkHIO_wallCatch_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wallCatch_c1 const m; static daAlinkHIO_wallCatch_c1 const m;
}; };
class daAlinkHIO_wallCatch_c : public daAlinkHIO_data_c { class daAlinkHIO_wallCatch_c : public daAlinkHIO_data_c {
@@ -5774,7 +5774,7 @@ public:
class daAlinkHIO_wallFall_c0 { class daAlinkHIO_wallFall_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wallFall_c1 const m; static daAlinkHIO_wallFall_c1 const m;
}; };
class daAlinkHIO_wallFall_c : public daAlinkHIO_data_c { class daAlinkHIO_wallFall_c : public daAlinkHIO_data_c {
@@ -5803,7 +5803,7 @@ public:
class daAlinkHIO_wallMove_c0 { class daAlinkHIO_wallMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wallMove_c1 const m; static daAlinkHIO_wallMove_c1 const m;
}; };
class daAlinkHIO_wallMove_c : public daAlinkHIO_data_c { class daAlinkHIO_wallMove_c : public daAlinkHIO_data_c {
@@ -5839,7 +5839,7 @@ public:
static daAlinkHIO_wallCatch_c0 const mWallCatch; static daAlinkHIO_wallCatch_c0 const mWallCatch;
static daAlinkHIO_wallFall_c0 const mWallFall; static daAlinkHIO_wallFall_c0 const mWallFall;
static daAlinkHIO_wallMove_c0 const mWallMove; static daAlinkHIO_wallMove_c0 const mWallMove;
static DUSK_GAME_DATA daAlinkHIO_wallHang_c1 const m; static daAlinkHIO_wallHang_c1 const m;
}; };
class daAlinkHIO_wallHang_c : public daAlinkHIO_data_c { class daAlinkHIO_wallHang_c : public daAlinkHIO_data_c {
@@ -5886,7 +5886,7 @@ public:
class daAlinkHIO_pushpull_c0 { class daAlinkHIO_pushpull_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_pushpull_c1 const m; static daAlinkHIO_pushpull_c1 const m;
}; };
class daAlinkHIO_pushpull_c : public daAlinkHIO_data_c { class daAlinkHIO_pushpull_c : public daAlinkHIO_data_c {
@@ -5920,7 +5920,7 @@ public:
class daAlinkHIO_damNormal_c0 { class daAlinkHIO_damNormal_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damNormal_c1 const m; static daAlinkHIO_damNormal_c1 const m;
}; };
class daAlinkHIO_damNormal_c : public daAlinkHIO_data_c { class daAlinkHIO_damNormal_c : public daAlinkHIO_data_c {
@@ -5959,12 +5959,12 @@ public:
class daAlinkHIO_damLarge_c0 { class daAlinkHIO_damLarge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damLaHu_c1 const m; static daAlinkHIO_damLaHu_c1 const m;
}; };
class daAlinkHIO_damHuge_c0 { class daAlinkHIO_damHuge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damLaHu_c1 const m; static daAlinkHIO_damLaHu_c1 const m;
}; };
class daAlinkHIO_damLaHu_c : public daAlinkHIO_data_c { class daAlinkHIO_damLaHu_c : public daAlinkHIO_data_c {
@@ -5992,7 +5992,7 @@ public:
class daAlinkHIO_damHorse_c0 { class daAlinkHIO_damHorse_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damHorse_c1 const m; static daAlinkHIO_damHorse_c1 const m;
}; };
class daAlinkHIO_damHorse_c : public daAlinkHIO_data_c { class daAlinkHIO_damHorse_c : public daAlinkHIO_data_c {
@@ -6027,7 +6027,7 @@ public:
class daAlinkHIO_damFall_c0 { class daAlinkHIO_damFall_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damFall_c1 const m; static daAlinkHIO_damFall_c1 const m;
}; };
class daAlinkHIO_damFall_c : public daAlinkHIO_data_c { class daAlinkHIO_damFall_c : public daAlinkHIO_data_c {
@@ -6057,7 +6057,7 @@ public:
class daAlinkHIO_damCaught_c0 { class daAlinkHIO_damCaught_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damCaught_c1 const m; static daAlinkHIO_damCaught_c1 const m;
}; };
class daAlinkHIO_damCaught_c : public daAlinkHIO_data_c { class daAlinkHIO_damCaught_c : public daAlinkHIO_data_c {
@@ -6093,7 +6093,7 @@ public:
class daAlinkHIO_damSwim_c0 { class daAlinkHIO_damSwim_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damSwim_c1 const m; static daAlinkHIO_damSwim_c1 const m;
}; };
class daAlinkHIO_damSwim_c : public daAlinkHIO_data_c { class daAlinkHIO_damSwim_c : public daAlinkHIO_data_c {
@@ -6140,7 +6140,7 @@ public:
class daAlinkHIO_damage_c0 { class daAlinkHIO_damage_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_damage_c1 const m; static daAlinkHIO_damage_c1 const m;
static daAlinkHIO_damNormal_c0 const mDamNormal; static daAlinkHIO_damNormal_c0 const mDamNormal;
static daAlinkHIO_damLarge_c0 const mDamLarge; static daAlinkHIO_damLarge_c0 const mDamLarge;
static daAlinkHIO_damHuge_c0 const mDamHuge; static daAlinkHIO_damHuge_c0 const mDamHuge;
@@ -6192,7 +6192,7 @@ public:
class daAlinkHIO_horse_c0 { class daAlinkHIO_horse_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_horse_c1 const m; static daAlinkHIO_horse_c1 const m;
}; };
class daAlinkHIO_horse_c : public daAlinkHIO_data_c { class daAlinkHIO_horse_c : public daAlinkHIO_data_c {
@@ -6231,7 +6231,7 @@ public:
class daAlinkHIO_canoe_c0 { class daAlinkHIO_canoe_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_canoe_c1 const m; static daAlinkHIO_canoe_c1 const m;
}; };
class daAlinkHIO_canoe_c : public daAlinkHIO_data_c { class daAlinkHIO_canoe_c : public daAlinkHIO_data_c {
@@ -6276,7 +6276,7 @@ public:
class daAlinkHIO_bow_c0 { class daAlinkHIO_bow_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_bow_c1 const m; static daAlinkHIO_bow_c1 const m;
}; };
class daAlinkHIO_bow_c : public daAlinkHIO_data_c { class daAlinkHIO_bow_c : public daAlinkHIO_data_c {
@@ -6312,7 +6312,7 @@ public:
class daAlinkHIO_boom_c0 { class daAlinkHIO_boom_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_boom_c1 const m; static daAlinkHIO_boom_c1 const m;
}; };
class daAlinkHIO_boom_c : public daAlinkHIO_data_c { class daAlinkHIO_boom_c : public daAlinkHIO_data_c {
@@ -6356,7 +6356,7 @@ public:
class daAlinkHIO_bomb_c0 { class daAlinkHIO_bomb_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_bomb_c1 const m; static daAlinkHIO_bomb_c1 const m;
}; };
class daAlinkHIO_bomb_c : public daAlinkHIO_data_c { class daAlinkHIO_bomb_c : public daAlinkHIO_data_c {
@@ -6391,7 +6391,7 @@ public:
class daAlinkHIO_huLight_c0 { class daAlinkHIO_huLight_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_huLight_c1 const m; static daAlinkHIO_huLight_c1 const m;
}; };
class daAlinkHIO_wlLight_c1 { class daAlinkHIO_wlLight_c1 {
@@ -6410,7 +6410,7 @@ public:
class daAlinkHIO_wlLight_c0 { class daAlinkHIO_wlLight_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlLight_c1 const m; static daAlinkHIO_wlLight_c1 const m;
}; };
class daAlinkHIO_zwLight_c1 { // may be wrong class daAlinkHIO_zwLight_c1 { // may be wrong
@@ -6429,7 +6429,7 @@ public:
class daAlinkHIO_zwLight_c0 { class daAlinkHIO_zwLight_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_zwLight_c1 const m; static daAlinkHIO_zwLight_c1 const m;
}; };
class daAlinkHIO_light_c : public daAlinkHIO_data_c { class daAlinkHIO_light_c : public daAlinkHIO_data_c {
@@ -6465,7 +6465,7 @@ public:
class daAlinkHIO_kandelaar_c0 { class daAlinkHIO_kandelaar_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_kandelaar_c1 const m; static daAlinkHIO_kandelaar_c1 const m;
}; };
class daAlinkHIO_kandelaar_c : public daAlinkHIO_data_c { class daAlinkHIO_kandelaar_c : public daAlinkHIO_data_c {
@@ -6504,7 +6504,7 @@ public:
class daAlinkHIO_magneBoots_c0 { class daAlinkHIO_magneBoots_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_magneBoots_c1 const m; static daAlinkHIO_magneBoots_c1 const m;
}; };
class daAlinkHIO_magneBoots_c : public daAlinkHIO_data_c { class daAlinkHIO_magneBoots_c : public daAlinkHIO_data_c {
@@ -6530,7 +6530,7 @@ public:
class daAlinkHIO_fmChain_c0 { class daAlinkHIO_fmChain_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_fmChain_c1 const m; static daAlinkHIO_fmChain_c1 const m;
}; };
class daAlinkHIO_fmChain_c : public daAlinkHIO_data_c { class daAlinkHIO_fmChain_c : public daAlinkHIO_data_c {
@@ -6570,7 +6570,7 @@ public:
class daAlinkHIO_hookshot_c0 { class daAlinkHIO_hookshot_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_hookshot_c1 const m; static daAlinkHIO_hookshot_c1 const m;
}; };
class daAlinkHIO_hookshot_c : public daAlinkHIO_data_c { class daAlinkHIO_hookshot_c : public daAlinkHIO_data_c {
@@ -6608,7 +6608,7 @@ public:
class daAlinkHIO_spinner_c0 { class daAlinkHIO_spinner_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_spinner_c1 const m; static daAlinkHIO_spinner_c1 const m;
}; };
class daAlinkHIO_spinner_c : public daAlinkHIO_data_c { class daAlinkHIO_spinner_c : public daAlinkHIO_data_c {
@@ -6664,7 +6664,7 @@ public:
class daAlinkHIO_ironBall_c0 { class daAlinkHIO_ironBall_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_ironBall_c1 const m; static daAlinkHIO_ironBall_c1 const m;
}; };
class daAlinkHIO_ironBall_c : public daAlinkHIO_data_c { class daAlinkHIO_ironBall_c : public daAlinkHIO_data_c {
@@ -6694,7 +6694,7 @@ public:
class daAlinkHIO_copyRod_c0 { class daAlinkHIO_copyRod_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_copyRod_c1 const m; static daAlinkHIO_copyRod_c1 const m;
}; };
class daAlinkHIO_copyRod_c : public daAlinkHIO_data_c { class daAlinkHIO_copyRod_c : public daAlinkHIO_data_c {
@@ -6722,7 +6722,7 @@ public:
class daAlinkHIO_pickUp_c0 { class daAlinkHIO_pickUp_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_pickUp_c1 const m; static daAlinkHIO_pickUp_c1 const m;
}; };
class daAlinkHIO_pickUp_c : public daAlinkHIO_data_c { class daAlinkHIO_pickUp_c : public daAlinkHIO_data_c {
@@ -6769,7 +6769,7 @@ public:
class daAlinkHIO_board_c0 { class daAlinkHIO_board_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_board_c1 const m; static daAlinkHIO_board_c1 const m;
}; };
class daAlinkHIO_board_c : public daAlinkHIO_data_c { class daAlinkHIO_board_c : public daAlinkHIO_data_c {
@@ -6802,7 +6802,7 @@ public:
class daAlinkHIO_bottle_c0 { class daAlinkHIO_bottle_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_bottle_c1 const m; static daAlinkHIO_bottle_c1 const m;
}; };
class daAlinkHIO_bottle_c : public daAlinkHIO_data_c { class daAlinkHIO_bottle_c : public daAlinkHIO_data_c {
@@ -6850,7 +6850,7 @@ public:
static daAlinkHIO_ironBall_c0 const mIronBall; static daAlinkHIO_ironBall_c0 const mIronBall;
static daAlinkHIO_copyRod_c0 const mCopyRod; static daAlinkHIO_copyRod_c0 const mCopyRod;
static daAlinkHIO_zwLight_c0 const mZoraArmorPL; static daAlinkHIO_zwLight_c0 const mZoraArmorPL;
static DUSK_GAME_DATA daAlinkHIO_item_c1 const m; static daAlinkHIO_item_c1 const m;
}; };
class daAlinkHIO_item_c : public daAlinkHIO_data_c { class daAlinkHIO_item_c : public daAlinkHIO_data_c {
@@ -6909,7 +6909,7 @@ public:
class daAlinkHIO_ladder_c0 { class daAlinkHIO_ladder_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_ladder_c1 const m; static daAlinkHIO_ladder_c1 const m;
}; };
class daAlinkHIO_ladder_c : public daAlinkHIO_data_c { class daAlinkHIO_ladder_c : public daAlinkHIO_data_c {
@@ -6949,7 +6949,7 @@ public:
class daAlinkHIO_roofHang_c0 { class daAlinkHIO_roofHang_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_roofHang_c1 const m; static daAlinkHIO_roofHang_c1 const m;
}; };
class daAlinkHIO_roofHang_c : public daAlinkHIO_data_c { class daAlinkHIO_roofHang_c : public daAlinkHIO_data_c {
@@ -6987,7 +6987,7 @@ public:
class daAlinkHIO_grab_c0 { class daAlinkHIO_grab_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_grab_c1 const m; static daAlinkHIO_grab_c1 const m;
}; };
class daAlinkHIO_grab_c : public daAlinkHIO_data_c { class daAlinkHIO_grab_c : public daAlinkHIO_data_c {
@@ -7062,7 +7062,7 @@ public:
class daAlinkHIO_swim_c0 { class daAlinkHIO_swim_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_swim_c1 const m; static daAlinkHIO_swim_c1 const m;
}; };
class daAlinkHIO_swim_c : public daAlinkHIO_data_c { class daAlinkHIO_swim_c : public daAlinkHIO_data_c {
@@ -7138,7 +7138,7 @@ public:
class daAlinkHIO_wlMove_c0 { class daAlinkHIO_wlMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlMove_c1 const m; static daAlinkHIO_wlMove_c1 const m;
}; };
class daAlinkHIO_wlMove_c : public daAlinkHIO_data_c { class daAlinkHIO_wlMove_c : public daAlinkHIO_data_c {
@@ -7181,7 +7181,7 @@ public:
class daAlinkHIO_wlMoveNoP_c0 { class daAlinkHIO_wlMoveNoP_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlMoveNoP_c1 const m; static daAlinkHIO_wlMoveNoP_c1 const m;
}; };
class daAlinkHIO_wlMoveNoP_c : public daAlinkHIO_data_c { class daAlinkHIO_wlMoveNoP_c : public daAlinkHIO_data_c {
@@ -7220,7 +7220,7 @@ public:
class daAlinkHIO_wlAtnMove_c0 { class daAlinkHIO_wlAtnMove_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtnMove_c1 const m; static daAlinkHIO_wlAtnMove_c1 const m;
}; };
class daAlinkHIO_wlAtnMove_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtnMove_c : public daAlinkHIO_data_c {
@@ -7252,7 +7252,7 @@ public:
class daAlinkHIO_wlHowl_c0 { class daAlinkHIO_wlHowl_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlHowl_c1 const m; static daAlinkHIO_wlHowl_c1 const m;
}; };
class daAlinkHIO_wlHowl_c : public daAlinkHIO_data_c { class daAlinkHIO_wlHowl_c : public daAlinkHIO_data_c {
@@ -7286,7 +7286,7 @@ public:
class daAlinkHIO_wlSideStep_c0 { class daAlinkHIO_wlSideStep_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlSideStep_c1 const m; static daAlinkHIO_wlSideStep_c1 const m;
}; };
class daAlinkHIO_wlSideStep_c : public daAlinkHIO_data_c { class daAlinkHIO_wlSideStep_c : public daAlinkHIO_data_c {
@@ -7316,7 +7316,7 @@ public:
class daAlinkHIO_wlBackJump_c0 { class daAlinkHIO_wlBackJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlBackJump_c1 const m; static daAlinkHIO_wlBackJump_c1 const m;
}; };
class daAlinkHIO_wlBackJump_c : public daAlinkHIO_data_c { class daAlinkHIO_wlBackJump_c : public daAlinkHIO_data_c {
@@ -7361,7 +7361,7 @@ public:
class daAlinkHIO_wlAutoJump_c0 { class daAlinkHIO_wlAutoJump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAutoJump_c1 const m; static daAlinkHIO_wlAutoJump_c1 const m;
}; };
class daAlinkHIO_wlAutoJump_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAutoJump_c : public daAlinkHIO_data_c {
@@ -7390,7 +7390,7 @@ public:
class daAlinkHIO_wlPush_c0 { class daAlinkHIO_wlPush_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlPush_c1 const m; static daAlinkHIO_wlPush_c1 const m;
}; };
class daAlinkHIO_wlPush_c : public daAlinkHIO_data_c { class daAlinkHIO_wlPush_c : public daAlinkHIO_data_c {
@@ -7426,7 +7426,7 @@ public:
class daAlinkHIO_wlLie_c0 { class daAlinkHIO_wlLie_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlLie_c1 const m; static daAlinkHIO_wlLie_c1 const m;
}; };
class daAlinkHIO_wlLie_c : public daAlinkHIO_data_c { class daAlinkHIO_wlLie_c : public daAlinkHIO_data_c {
@@ -7465,7 +7465,7 @@ public:
class daAlinkHIO_wlWallHang_c0 { class daAlinkHIO_wlWallHang_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlWallHang_c1 const m; static daAlinkHIO_wlWallHang_c1 const m;
}; };
class daAlinkHIO_wlWallHang_c : public daAlinkHIO_data_c { class daAlinkHIO_wlWallHang_c : public daAlinkHIO_data_c {
@@ -7497,7 +7497,7 @@ public:
class daAlinkHIO_wlDamNormal_c0 { class daAlinkHIO_wlDamNormal_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamNormal_c1 const m; static daAlinkHIO_wlDamNormal_c1 const m;
}; };
class daAlinkHIO_wlDamNormal_c : public daAlinkHIO_data_c { class daAlinkHIO_wlDamNormal_c : public daAlinkHIO_data_c {
@@ -7532,12 +7532,12 @@ public:
class daAlinkHIO_wlDamLarge_c0 { class daAlinkHIO_wlDamLarge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamLaHu_c1 const m; static daAlinkHIO_wlDamLaHu_c1 const m;
}; };
class daAlinkHIO_wlDamHuge_c0 { class daAlinkHIO_wlDamHuge_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamLaHu_c1 const m; static daAlinkHIO_wlDamLaHu_c1 const m;
}; };
class daAlinkHIO_wlDamLaHu_c : public daAlinkHIO_data_c { class daAlinkHIO_wlDamLaHu_c : public daAlinkHIO_data_c {
@@ -7566,7 +7566,7 @@ public:
class daAlinkHIO_wlDamCaught_c0 { class daAlinkHIO_wlDamCaught_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamCaught_c1 const m; static daAlinkHIO_wlDamCaught_c1 const m;
}; };
class daAlinkHIO_wlDamCaught_c : public daAlinkHIO_data_c { class daAlinkHIO_wlDamCaught_c : public daAlinkHIO_data_c {
@@ -7599,7 +7599,7 @@ public:
class daAlinkHIO_wlDamFall_c0 { class daAlinkHIO_wlDamFall_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamFall_c1 const m; static daAlinkHIO_wlDamFall_c1 const m;
}; };
class daAlinkHIO_wlDamFall_c : public daAlinkHIO_data_c { class daAlinkHIO_wlDamFall_c : public daAlinkHIO_data_c {
@@ -7626,7 +7626,7 @@ public:
class daAlinkHIO_wlDamage_c0 { class daAlinkHIO_wlDamage_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlDamage_c1 const m; static daAlinkHIO_wlDamage_c1 const m;
static daAlinkHIO_wlDamNormal_c0 const mNormal; static daAlinkHIO_wlDamNormal_c0 const mNormal;
static daAlinkHIO_wlDamLarge_c0 const mLarge; static daAlinkHIO_wlDamLarge_c0 const mLarge;
static daAlinkHIO_wlDamHuge_c0 const mHuge; static daAlinkHIO_wlDamHuge_c0 const mHuge;
@@ -7676,7 +7676,7 @@ public:
class daAlinkHIO_wlSlide_c0 { class daAlinkHIO_wlSlide_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlSlide_c1 const m; static daAlinkHIO_wlSlide_c1 const m;
}; };
class daAlinkHIO_wlSlide_c : public daAlinkHIO_data_c { class daAlinkHIO_wlSlide_c : public daAlinkHIO_data_c {
@@ -7711,7 +7711,7 @@ public:
class daAlinkHIO_wlRope_c0 { class daAlinkHIO_wlRope_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlRope_c1 const m; static daAlinkHIO_wlRope_c1 const m;
}; };
class daAlinkHIO_wlRope_c : public daAlinkHIO_data_c { class daAlinkHIO_wlRope_c : public daAlinkHIO_data_c {
@@ -7747,17 +7747,17 @@ public:
class daAlinkHIO_wlAtWaTl_c0 { class daAlinkHIO_wlAtWaTl_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m; static daAlinkHIO_wlAtWait_c1 const m;
}; };
class daAlinkHIO_wlAtWaSc_c0 { class daAlinkHIO_wlAtWaSc_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m; static daAlinkHIO_wlAtWait_c1 const m;
}; };
class daAlinkHIO_wlAtWaLr_c0 { class daAlinkHIO_wlAtWaLr_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtWait_c1 const m; static daAlinkHIO_wlAtWait_c1 const m;
}; };
class daAlinkHIO_wlAtWait_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtWait_c : public daAlinkHIO_data_c {
@@ -7784,7 +7784,7 @@ public:
class daAlinkHIO_wlAtRoll_c0 { class daAlinkHIO_wlAtRoll_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtRoll_c1 const m; static daAlinkHIO_wlAtRoll_c1 const m;
}; };
class daAlinkHIO_wlAtRoll_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtRoll_c : public daAlinkHIO_data_c {
@@ -7819,7 +7819,7 @@ public:
class daAlinkHIO_wlAtNjump_c0 { class daAlinkHIO_wlAtNjump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtNjump_c1 const m; static daAlinkHIO_wlAtNjump_c1 const m;
}; };
class daAlinkHIO_wlAtNjump_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtNjump_c : public daAlinkHIO_data_c {
@@ -7860,7 +7860,7 @@ public:
class daAlinkHIO_wlAtCjump_c0 { class daAlinkHIO_wlAtCjump_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtCjump_c1 const m; static daAlinkHIO_wlAtCjump_c1 const m;
}; };
class daAlinkHIO_wlAtCjump_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtCjump_c : public daAlinkHIO_data_c {
@@ -7888,7 +7888,7 @@ public:
class daAlinkHIO_wlAtLand_c0 { class daAlinkHIO_wlAtLand_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtLand_c1 const m; static daAlinkHIO_wlAtLand_c1 const m;
}; };
class daAlinkHIO_wlAtLand_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtLand_c : public daAlinkHIO_data_c {
@@ -7924,7 +7924,7 @@ public:
class daAlinkHIO_wlAtDown_c0 { class daAlinkHIO_wlAtDown_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtDown_c1 const m; static daAlinkHIO_wlAtDown_c1 const m;
}; };
class daAlinkHIO_wlAtDown_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtDown_c : public daAlinkHIO_data_c {
@@ -7961,7 +7961,7 @@ public:
class daAlinkHIO_wlAtLock_c0 { class daAlinkHIO_wlAtLock_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtLock_c1 const m; static daAlinkHIO_wlAtLock_c1 const m;
}; };
class daAlinkHIO_wlAtLock_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtLock_c : public daAlinkHIO_data_c {
@@ -8001,7 +8001,7 @@ public:
class daAlinkHIO_wlAtBite_c0 { class daAlinkHIO_wlAtBite_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlAtBite_c1 const m; static daAlinkHIO_wlAtBite_c1 const m;
}; };
class daAlinkHIO_wlAtBite_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAtBite_c : public daAlinkHIO_data_c {
@@ -8046,7 +8046,7 @@ public:
static daAlinkHIO_wlAtDown_c0 const mWlAtDown; static daAlinkHIO_wlAtDown_c0 const mWlAtDown;
static daAlinkHIO_wlAtLock_c0 const mWlAtLock; static daAlinkHIO_wlAtLock_c0 const mWlAtLock;
static daAlinkHIO_wlAtBite_c0 const mWlAtBite; static daAlinkHIO_wlAtBite_c0 const mWlAtBite;
static DUSK_GAME_DATA daAlinkHIO_wlAttack_c1 const m; static daAlinkHIO_wlAttack_c1 const m;
}; };
class daAlinkHIO_wlAttack_c : public daAlinkHIO_data_c { class daAlinkHIO_wlAttack_c : public daAlinkHIO_data_c {
@@ -8093,7 +8093,7 @@ public:
class daAlinkHIO_wlPoint_c0 { class daAlinkHIO_wlPoint_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlPoint_c1 const m; static daAlinkHIO_wlPoint_c1 const m;
}; };
class daAlinkHIO_wlPoint_c : public daAlinkHIO_data_c { class daAlinkHIO_wlPoint_c : public daAlinkHIO_data_c {
@@ -8129,7 +8129,7 @@ public:
class daAlinkHIO_wlChain_c0 { class daAlinkHIO_wlChain_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlChain_c1 const m; static daAlinkHIO_wlChain_c1 const m;
}; };
class daAlinkHIO_wlChain_c : public daAlinkHIO_data_c { class daAlinkHIO_wlChain_c : public daAlinkHIO_data_c {
@@ -8186,7 +8186,7 @@ public:
class daAlinkHIO_wlSwim_c0 { class daAlinkHIO_wlSwim_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlSwim_c1 const m; static daAlinkHIO_wlSwim_c1 const m;
}; };
class daAlinkHIO_wlSwim_c : public daAlinkHIO_data_c { class daAlinkHIO_wlSwim_c : public daAlinkHIO_data_c {
@@ -8215,7 +8215,7 @@ public:
class daAlinkHIO_wlGrab_c0 { class daAlinkHIO_wlGrab_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlGrab_c1 const m; static daAlinkHIO_wlGrab_c1 const m;
}; };
class daAlinkHIO_wlGrab_c : public daAlinkHIO_data_c { class daAlinkHIO_wlGrab_c : public daAlinkHIO_data_c {
@@ -8245,7 +8245,7 @@ public:
class daAlinkHIO_wlBall_c0 { class daAlinkHIO_wlBall_c0 {
public: public:
static DUSK_GAME_DATA daAlinkHIO_wlBall_c1 const m; static daAlinkHIO_wlBall_c1 const m;
}; };
class daAlinkHIO_wlBall_c : public daAlinkHIO_data_c { class daAlinkHIO_wlBall_c : public daAlinkHIO_data_c {
@@ -8300,7 +8300,7 @@ public:
static daAlinkHIO_wlSwim_c0 const mWlSwim; static daAlinkHIO_wlSwim_c0 const mWlSwim;
static daAlinkHIO_wlGrab_c0 const mWlGrab; static daAlinkHIO_wlGrab_c0 const mWlGrab;
static daAlinkHIO_wlBall_c0 const mWlBall; static daAlinkHIO_wlBall_c0 const mWlBall;
static DUSK_GAME_DATA daAlinkHIO_wolf_c1 const m; static daAlinkHIO_wolf_c1 const m;
}; };
class daAlinkHIO_wolf_c : public daAlinkHIO_data_c { class daAlinkHIO_wolf_c : public daAlinkHIO_data_c {
+1 -1
View File
@@ -161,7 +161,7 @@ private:
/* 0xA10 */ dPa_hermiteEcallBack_c field_0xa10; /* 0xA10 */ dPa_hermiteEcallBack_c field_0xa10;
/* 0xA28 */ int (daArrow_c::*mProcFunc)(); /* 0xA28 */ int (daArrow_c::*mProcFunc)();
static DUSK_GAME_DATA s16 m_count; static s16 m_count;
}; };
STATIC_ASSERT(sizeof(daArrow_c) == 0xA34); STATIC_ASSERT(sizeof(daArrow_c) == 0xA34);
+1 -1
View File
@@ -67,7 +67,7 @@ public:
void hide() { mIsVisible = 0; } void hide() { mIsVisible = 0; }
u8 isVisible() { return mIsVisible; } u8 isVisible() { return mIsVisible; }
static DUSK_GAME_DATA daBalloon2D_c* myclass; static daBalloon2D_c* myclass;
struct ScoreCount { struct ScoreCount {
cXyz field_0x0; cXyz field_0x0;
+4 -4
View File
@@ -89,10 +89,10 @@ public:
void setAction(u8 i_action) { mAction = i_action; } void setAction(u8 i_action) { mAction = i_action; }
static DUSK_GAME_DATA createHeapFunc mCreateHeapFunc[]; static createHeapFunc mCreateHeapFunc[];
static DUSK_GAME_DATA createInitFunc mCreateInitFunc[]; static createInitFunc mCreateInitFunc[];
static DUSK_GAME_DATA executeFunc mExecuteFunc[]; static executeFunc mExecuteFunc[];
static DUSK_GAME_DATA tgSetFunc mTgSetFunc[]; static tgSetFunc mTgSetFunc[];
/* 0x5A0 */ request_of_phase_process_class mPhase; /* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* field_0x5a8[2][2]; /* 0x5A8 */ J3DModel* field_0x5a8[2][2];
+6 -6
View File
@@ -190,12 +190,12 @@ STATIC_ASSERT(sizeof(daBoomerang_c) == 0xDE4);
class daBoomerang_HIO_c0 { class daBoomerang_HIO_c0 {
public: public:
static DUSK_GAME_DATA u16 const m_lockWaitTime; static u16 const m_lockWaitTime;
static DUSK_GAME_DATA f32 const m_minCircleR; static f32 const m_minCircleR;
static DUSK_GAME_DATA f32 const m_middleCircleR; static f32 const m_middleCircleR;
static DUSK_GAME_DATA f32 const m_maxCircleR; static f32 const m_maxCircleR;
static DUSK_GAME_DATA f32 const m_scale; static f32 const m_scale;
static DUSK_GAME_DATA f32 const m_lockWindScale; static f32 const m_lockWindScale;
}; };
#endif /* D_A_BOOMERANG_H */ #endif /* D_A_BOOMERANG_H */
+3 -3
View File
@@ -18,7 +18,7 @@ class daBullet_Param_c {
public: public:
virtual ~daBullet_Param_c() {} virtual ~daBullet_Param_c() {}
static DUSK_GAME_DATA daBullet_HIOParam const m; static daBullet_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -80,8 +80,8 @@ public:
int wait(void*); int wait(void*);
int move(void*); int move(void*);
static DUSK_GAME_DATA dCcD_SrcGObjInf const mCcDObjInfo; static dCcD_SrcGObjInf const mCcDObjInfo;
static DUSK_GAME_DATA dCcD_SrcSph mCcDSph; static dCcD_SrcSph mCcDSph;
}; };
STATIC_ASSERT(sizeof(daBullet_c) == 0x95c); STATIC_ASSERT(sizeof(daBullet_c) == 0x95c);
+1 -1
View File
@@ -33,7 +33,7 @@ public:
const CoachFireAttr& attr() { return M_attr; } const CoachFireAttr& attr() { return M_attr; }
static DUSK_GAME_DATA CoachFireAttr const M_attr; static CoachFireAttr const M_attr;
inline ~daCoachFire_c(); inline ~daCoachFire_c();
+1 -1
View File
@@ -38,7 +38,7 @@ public:
struct BckTbl { struct BckTbl {
u16 idx[4]; u16 idx[4];
}; };
static DUSK_GAME_DATA const BckTbl m_bckIdxTable[]; static const BckTbl m_bckIdxTable[];
private: private:
/* 0x5A0 */ const char* m_arcName; /* 0x5A0 */ const char* m_arcName;
+1 -1
View File
@@ -99,7 +99,7 @@ public:
mWarpMode = daCstatueWarpMode_Active; mWarpMode = daCstatueWarpMode_Active;
} }
static DUSK_GAME_DATA u16 const m_bckIdxTable[daCstatueType_N][7]; static u16 const m_bckIdxTable[daCstatueType_N][7];
private: private:
/* 0x568 */ const char* mResName; /* 0x568 */ const char* mResName;
+9 -9
View File
@@ -65,15 +65,15 @@ public:
f32 getCloseBoundSpeed() { return CLOSE_BOUND_SPEED; } f32 getCloseBoundSpeed() { return CLOSE_BOUND_SPEED; }
f32 getCloseBoundRatio() { return CLOSE_BOUND_RATIO; } f32 getCloseBoundRatio() { return CLOSE_BOUND_RATIO; }
static DUSK_GAME_DATA f32 const OPEN_SIZE; static f32 const OPEN_SIZE;
static DUSK_GAME_DATA f32 const OPEN_ACCEL; static f32 const OPEN_ACCEL;
static DUSK_GAME_DATA f32 const OPEN_SPEED; static f32 const OPEN_SPEED;
static DUSK_GAME_DATA f32 const OPEN_BOUND_SPEED; static f32 const OPEN_BOUND_SPEED;
static DUSK_GAME_DATA f32 const OPEN_BOUND_RATIO; static f32 const OPEN_BOUND_RATIO;
static DUSK_GAME_DATA f32 const CLOSE_ACCEL; static f32 const CLOSE_ACCEL;
static DUSK_GAME_DATA f32 const CLOSE_SPEED; static f32 const CLOSE_SPEED;
static DUSK_GAME_DATA f32 const CLOSE_BOUND_SPEED; static f32 const CLOSE_BOUND_SPEED;
static DUSK_GAME_DATA f32 const CLOSE_BOUND_RATIO; static f32 const CLOSE_BOUND_RATIO;
/* 0x5A0 */ dComIfG_resLoader_c mResLoader; /* 0x5A0 */ dComIfG_resLoader_c mResLoader;
/* 0x5B0 */ J3DModel* mpModel; /* 0x5B0 */ J3DModel* mpModel;
+8 -8
View File
@@ -175,14 +175,14 @@ private:
STATIC_ASSERT(sizeof(daE_DT_c) == 0x1174); STATIC_ASSERT(sizeof(daE_DT_c) == 0x1174);
struct E_DT_n { struct E_DT_n {
static DUSK_GAME_DATA f32 eDt_ShakeFrame[10]; static f32 eDt_ShakeFrame[10];
static DUSK_GAME_DATA f32 eDt_ShakeFrameDemo[10]; static f32 eDt_ShakeFrameDemo[10];
static DUSK_GAME_DATA dCcD_SrcSph cc_dt_body_src; static dCcD_SrcSph cc_dt_body_src;
static DUSK_GAME_DATA dCcD_SrcSph cc_dt_tongue_src; static dCcD_SrcSph cc_dt_tongue_src;
static DUSK_GAME_DATA int mDt_OtamaNum; static int mDt_OtamaNum;
static DUSK_GAME_DATA int mDt_OtamaNo[20]; static int mDt_OtamaNo[20];
static DUSK_GAME_DATA int m_fall_no; static int m_fall_no;
static DUSK_GAME_DATA cXyz m_tongue_pos; static cXyz m_tongue_pos;
}; };
+1 -1
View File
@@ -101,7 +101,7 @@ private:
/* 0xB9E */ u8 field_0xb9e; /* 0xB9E */ u8 field_0xb9e;
/* 0xB9F */ u8 mHIOInit; /* 0xB9F */ u8 mHIOInit;
static DUSK_GAME_DATA actionFunc l_actionmenu[9]; static actionFunc l_actionmenu[9];
}; };
STATIC_ASSERT(sizeof(daE_GE_c) == 0xBA0); STATIC_ASSERT(sizeof(daE_GE_c) == 0xBA0);
+8 -8
View File
@@ -159,14 +159,14 @@ private:
STATIC_ASSERT(sizeof(daE_OC_c) == 0xe88); STATIC_ASSERT(sizeof(daE_OC_c) == 0xe88);
struct E_OC_n { struct E_OC_n {
static DUSK_GAME_DATA f32 const oc_attackb_trans[10]; static f32 const oc_attackb_trans[10];
static DUSK_GAME_DATA f32 const oc_attackc_trans[10]; static f32 const oc_attackc_trans[10];
static DUSK_GAME_DATA dCcD_SrcSph cc_sph_src; static dCcD_SrcSph cc_sph_src;
static DUSK_GAME_DATA dCcD_SrcSph at_sph_src; static dCcD_SrcSph at_sph_src;
static DUSK_GAME_DATA daE_OC_c* m_battle_oc; static daE_OC_c* m_battle_oc;
static DUSK_GAME_DATA daE_OC_c* m_damage_oc; static daE_OC_c* m_damage_oc;
static DUSK_GAME_DATA daE_OC_c* m_death_oc; static daE_OC_c* m_death_oc;
static DUSK_GAME_DATA daE_OC_c* m_talk_oc; static daE_OC_c* m_talk_oc;
}; };
#endif /* D_A_E_OC_H */ #endif /* D_A_E_OC_H */
+1 -1
View File
@@ -215,7 +215,7 @@ private:
STATIC_ASSERT(sizeof(daE_YM_c) == 0xAF8); STATIC_ASSERT(sizeof(daE_YM_c) == 0xAF8);
struct E_YM_n { struct E_YM_n {
static DUSK_GAME_DATA dCcD_SrcSph cc_sph_src; static dCcD_SrcSph cc_sph_src;
}; };
+2 -2
View File
@@ -311,10 +311,10 @@ struct daFmtMng_c : public fopAc_ac_c {
} }
static FmtMngAttributes const& attr() { return M_attr; } static FmtMngAttributes const& attr() { return M_attr; }
static DUSK_GAME_DATA FmtMngAttributes const M_attr; static FmtMngAttributes const M_attr;
typedef void (daFmtMng_c::*ActionFunc)(); typedef void (daFmtMng_c::*ActionFunc)();
static DUSK_GAME_DATA daFmtMng_c::ActionFunc ActionTable[10]; static daFmtMng_c::ActionFunc ActionTable[10];
/* 0x568 */ FmtPos_c* mPos; /* 0x568 */ FmtPos_c* mPos;
/* 0x56C */ FmtMember_c* mMember; /* 0x56C */ FmtMember_c* mMember;
+3 -3
View File
@@ -41,9 +41,9 @@ public:
static void deleteRoomGrass(int); static void deleteRoomGrass(int);
static void deleteRoomFlower(int); static void deleteRoomFlower(int);
static DUSK_GAME_DATA daGrass_c* m_myObj; static daGrass_c* m_myObj;
static DUSK_GAME_DATA dGrass_packet_c* m_grass; static dGrass_packet_c* m_grass;
static DUSK_GAME_DATA dFlower_packet_c* m_flower; static dFlower_packet_c* m_flower;
/* 0x568 */ u8 unk_0x568[0x570 - 0x568]; /* 0x568 */ u8 unk_0x568[0x570 - 0x568];
}; };
+3 -3
View File
@@ -351,8 +351,8 @@ public:
m_modelData->getMaterialNodePointer(5)->getShape()->hide(); m_modelData->getMaterialNodePointer(5)->getShape()->hide();
} }
static DUSK_GAME_DATA u16 const m_footJointTable[]; static u16 const m_footJointTable[];
static DUSK_GAME_DATA f32 const m_callLimitDistance2; static f32 const m_callLimitDistance2;
/* 0x0568 */ request_of_phase_process_class m_phase; /* 0x0568 */ request_of_phase_process_class m_phase;
/* 0x0570 */ J3DModel* m_model; /* 0x0570 */ J3DModel* m_model;
@@ -567,7 +567,7 @@ public:
class daHorse_hio_c0 { class daHorse_hio_c0 {
public: public:
static DUSK_GAME_DATA const daHorse_hio_c1 m; static const daHorse_hio_c1 m;
}; };
class daHorse_hio_c : public JORReflexible { class daHorse_hio_c : public JORReflexible {
+3 -3
View File
@@ -29,8 +29,8 @@ public:
static void setMorfFrame(u8 i_frame) { mMorfFrame = i_frame; } static void setMorfFrame(u8 i_frame) { mMorfFrame = i_frame; }
static void decMorfFrame() { cLib_calcTimer<u8>(&mMorfFrame); } static void decMorfFrame() { cLib_calcTimer<u8>(&mMorfFrame); }
static DUSK_GAME_DATA u8 mEyeMoveFlg; static u8 mEyeMoveFlg;
static DUSK_GAME_DATA u8 mMorfFrame; static u8 mMorfFrame;
/* 0x0F4 */ f32 field_0xf4; /* 0x0F4 */ f32 field_0xf4;
/* 0x0F8 */ f32 field_0xf8; /* 0x0F8 */ f32 field_0xf8;
@@ -50,7 +50,7 @@ struct daHoZelda_hio_c1 {
struct daHoZelda_hio_c0 { struct daHoZelda_hio_c0 {
daHoZelda_hio_c0() {} daHoZelda_hio_c0() {}
static DUSK_GAME_DATA daHoZelda_hio_c1 const m; static daHoZelda_hio_c1 const m;
}; };
class daHoZelda_hio_c : public JORReflexible { class daHoZelda_hio_c : public JORReflexible {
+1 -1
View File
@@ -60,7 +60,7 @@ public:
virtual u8 getCollisionH(); virtual u8 getCollisionH();
virtual u8 getCollisionR(); virtual u8 getCollisionR();
static DUSK_GAME_DATA daItemBase_data const m_data; static daItemBase_data const m_data;
/* 0x56C */ request_of_phase_process_class mPhase; /* 0x56C */ request_of_phase_process_class mPhase;
/* 0x574 */ J3DModel* mpModel; /* 0x574 */ J3DModel* mpModel;
+2 -7
View File
@@ -88,14 +88,9 @@ public:
/* 0x396A */ u8 field_0x396A[0x399E - 0x396A]; /* 0x396A */ u8 field_0x396A[0x399E - 0x396A];
/* 0x399E */ s16 field_0x399e; /* 0x399E */ s16 field_0x399e;
/* 0x39A0 */ u8 field_0x39A0[0x39A4 - 0x39A0]; /* 0x39A0 */ u8 field_0x39A0[0x39A4 - 0x39A0];
#if TARGET_PC
/* 0x39A4 */ cM_rnd_c mMantRng;
#endif
}; };
#if TARGET_PC
STATIC_ASSERT(sizeof(mant_class) == 0x39ac);
#else
STATIC_ASSERT(sizeof(mant_class) == 0x39a4); STATIC_ASSERT(sizeof(mant_class) == 0x39a4);
#endif
#endif /* D_A_MANT_H */ #endif /* D_A_MANT_H */
+5 -5
View File
@@ -32,7 +32,7 @@ public:
class daMidna_hio_c0 { class daMidna_hio_c0 {
public: public:
static DUSK_GAME_DATA daMidna_hio_c1 const m; static daMidna_hio_c1 const m;
}; };
STATIC_ASSERT(sizeof(daMidna_hio_c0::m) == 0x20); STATIC_ASSERT(sizeof(daMidna_hio_c0::m) == 0x20);
@@ -87,8 +87,8 @@ public:
/* 0x0FC */ f32 mNowOffsetX; /* 0x0FC */ f32 mNowOffsetX;
/* 0x100 */ f32 mNowOffsetY; /* 0x100 */ f32 mNowOffsetY;
static DUSK_GAME_DATA bool sEyeMoveFlg; static bool sEyeMoveFlg;
static DUSK_GAME_DATA u8 sMorfFrame; static u8 sMorfFrame;
}; };
STATIC_ASSERT(sizeof(daMidna_matAnm_c) == 0x104); STATIC_ASSERT(sizeof(daMidna_matAnm_c) == 0x104);
@@ -420,8 +420,8 @@ public:
static u32 getOtherHeapSize() { return 0x1D0; } static u32 getOtherHeapSize() { return 0x1D0; }
static DUSK_GAME_DATA daMidna_texData_s const m_texDataTable[21]; static daMidna_texData_s const m_texDataTable[21];
static DUSK_GAME_DATA daMidna_anmData_s const m_anmDataTable[53]; static daMidna_anmData_s const m_anmDataTable[53];
private: private:
/* 0x568 */ request_of_phase_process_class mPhase; /* 0x568 */ request_of_phase_process_class mPhase;
+2 -2
View File
@@ -58,8 +58,8 @@ public:
static u32 getMirrorRoomPrm() { return 0xFF03; } static u32 getMirrorRoomPrm() { return 0xFF03; }
typedef int (daMirror_c::*entryModelFunc)(J3DModel*); typedef int (daMirror_c::*entryModelFunc)(J3DModel*);
static DUSK_GAME_DATA entryModelFunc m_entryModel; static entryModelFunc m_entryModel;
static DUSK_GAME_DATA daMirror_c* m_myObj; static daMirror_c* m_myObj;
/* 0x570 */ dMirror_packet_c mPacket; /* 0x570 */ dMirror_packet_c mPacket;
/* 0x6f8 */ J3DModel* mpModel; /* 0x6f8 */ J3DModel* mpModel;
+7 -1
View File
@@ -95,6 +95,12 @@ static void __THPAudioInitialize(THPAudioDecodeInfo* info, u8* ptr);
#define THP_TEXTURE_SET_COUNT 3 #define THP_TEXTURE_SET_COUNT 3
#endif #endif
#if TARGET_PC
namespace dusk {
void MoviePlayerShutdown();
}
#endif
struct daMP_THPPlayer { struct daMP_THPPlayer {
/* 0x000 */ DVDFileInfo fileInfo; /* 0x000 */ DVDFileInfo fileInfo;
/* 0x03C */ THPHeader header; /* 0x03C */ THPHeader header;
@@ -164,7 +170,7 @@ public:
static int daMP_c_Callback_Main(daMP_c*); static int daMP_c_Callback_Main(daMP_c*);
static int daMP_c_Callback_Draw(daMP_c*); static int daMP_c_Callback_Draw(daMP_c*);
static DUSK_GAME_DATA daMP_c* m_myObj; static daMP_c* m_myObj;
private: private:
/* 0x568 */ u32 (*mpGetMovieRestFrame)(void); /* 0x568 */ u32 (*mpGetMovieRestFrame)(void);
+2 -2
View File
@@ -131,8 +131,8 @@ public:
typedef void (daMyna_c::*ProcFunc)(); typedef void (daMyna_c::*ProcFunc)();
typedef int (daMyna_c::*BaseMotionFunc)(int); typedef int (daMyna_c::*BaseMotionFunc)(int);
static DUSK_GAME_DATA dCcD_SrcSph const mCcDSph; static dCcD_SrcSph const mCcDSph;
static DUSK_GAME_DATA daMyna_c::BaseMotionFunc mBaseMotionTBL[7]; static daMyna_c::BaseMotionFunc mBaseMotionTBL[7];
/* 0x56C */ request_of_phase_process_class mPhase; /* 0x56C */ request_of_phase_process_class mPhase;
/* 0x574 */ mDoExt_McaMorfSO* mpMorf; /* 0x574 */ mDoExt_McaMorfSO* mpMorf;
+1 -1
View File
@@ -91,7 +91,7 @@ public:
s16 getExTime() { return mExTime; } s16 getExTime() { return mExTime; }
static DUSK_GAME_DATA const char* m_arcNameList[6]; static const char* m_arcNameList[6];
/* 0x56C */ request_of_phase_process_class mPhase; /* 0x56C */ request_of_phase_process_class mPhase;
/* 0x574 */ J3DModel* mpModel; /* 0x574 */ J3DModel* mpModel;
+6 -6
View File
@@ -776,12 +776,12 @@ public:
return chkFindActor(daPy_getPlayerActorClass(), param_0, param_1); return chkFindActor(daPy_getPlayerActorClass(), param_0, param_1);
} }
static DUSK_GAME_DATA dCcD_SrcGObjInf const mCcDObjData; static dCcD_SrcGObjInf const mCcDObjData;
static DUSK_GAME_DATA dCcD_SrcCyl mCcDCyl; static dCcD_SrcCyl mCcDCyl;
static DUSK_GAME_DATA dCcD_SrcSph mCcDSph; static dCcD_SrcSph mCcDSph;
static DUSK_GAME_DATA fopAc_ac_c* mFindActorPtrs[50]; static fopAc_ac_c* mFindActorPtrs[50];
static DUSK_GAME_DATA s16 mSrchName; static s16 mSrchName;
static DUSK_GAME_DATA int mFindCount; static int mFindCount;
enum Mode { enum Mode {
/* 0 */ MODE_ENTER, /* 0 */ MODE_ENTER,
+6 -6
View File
@@ -113,9 +113,9 @@ public:
virtual void drawOtherMdls(); virtual void drawOtherMdls();
virtual bool dbgDraw(); virtual bool dbgDraw();
static DUSK_GAME_DATA dCcD_SrcGObjInf const mCcDObj; static dCcD_SrcGObjInf const mCcDObj;
static DUSK_GAME_DATA dCcD_SrcCyl mCcDCyl; static dCcD_SrcCyl mCcDCyl;
static DUSK_GAME_DATA dCcD_SrcSph mCcDSph; static dCcD_SrcSph mCcDSph;
public: public:
/* 0x56C */ dBgS_ObjAcch mAcch; /* 0x56C */ dBgS_ObjAcch mAcch;
@@ -173,9 +173,9 @@ public:
virtual int ToFore() { return 1; } virtual int ToFore() { return 1; }
virtual int ToBack() { return 1; } virtual int ToBack() { return 1; }
static DUSK_GAME_DATA const char* m_name; static const char* m_name;
static DUSK_GAME_DATA int m_dzb_id; static int m_dzb_id;
static DUSK_GAME_DATA MoveBGActor_SetFunc m_set_func; static MoveBGActor_SetFunc m_set_func;
public: public:
/* 0xA14 */ dBgW* mpBgw; /* 0xA14 */ dBgW* mpBgw;
+7 -7
View File
@@ -394,13 +394,13 @@ public:
void onHide() { mHide = true; } void onHide() { mHide = true; }
void offHide() { mHide = false; } void offHide() { mHide = false; }
static DUSK_GAME_DATA dCcD_SrcGObjInf const mCcDObjInfo; static dCcD_SrcGObjInf const mCcDObjInfo;
static DUSK_GAME_DATA dCcD_SrcCyl mCcDCyl; static dCcD_SrcCyl mCcDCyl;
static DUSK_GAME_DATA dCcD_SrcSph mCcDSph; static dCcD_SrcSph mCcDSph;
static DUSK_GAME_DATA fopAc_ac_c* mFindActorPList[100]; static fopAc_ac_c* mFindActorPList[100];
static DUSK_GAME_DATA s32 mFindCount; static s32 mFindCount;
static DUSK_GAME_DATA s16 mSrchActorName; static s16 mSrchActorName;
static DUSK_GAME_DATA char mFileNameBuf[0x15]; static char mFileNameBuf[0x15];
}; };
STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48);
+3 -3
View File
@@ -17,7 +17,7 @@ class daNpc_Aru_Param_c {
public: public:
virtual ~daNpc_Aru_Param_c() {} virtual ~daNpc_Aru_Param_c() {}
static DUSK_GAME_DATA daNpc_Aru_HIOParam const m; static daNpc_Aru_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -171,8 +171,8 @@ public:
u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; } u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; }
void setLastIn() { mLastGoatIn = true; } void setLastIn() { mLastGoatIn = true; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[7]; static char DUSK_CONST* DUSK_CONST mCutNameList[7];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[7]; static cutFunc DUSK_CONST mCutList[7];
private: private:
/* 0xE40 */ NPC_ARU_HIO_CLASS* mpHIO; /* 0xE40 */ NPC_ARU_HIO_CLASS* mpHIO;
+2 -2
View File
@@ -12,7 +12,7 @@ public:
daNpcAsh_Param_c() {} daNpcAsh_Param_c() {}
virtual ~daNpcAsh_Param_c() {} virtual ~daNpcAsh_Param_c() {}
static DUSK_GAME_DATA const daNpcAsh_HIOParam m; static const daNpcAsh_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -143,7 +143,7 @@ public:
inline bool step(s16, bool); inline bool step(s16, bool);
inline void playExpression(); inline void playExpression();
static DUSK_GAME_DATA EventFn mEvtSeqList[6]; static EventFn mEvtSeqList[6];
private: private:
/* 0xB48 */ Z2Creature mCreatureSound; /* 0xB48 */ Z2Creature mCreatureSound;
+2 -2
View File
@@ -12,7 +12,7 @@ class daNpcAshB_Param_c {
public: public:
virtual ~daNpcAshB_Param_c() {} virtual ~daNpcAshB_Param_c() {}
static DUSK_GAME_DATA const daNpcAshB_HIOParam m; static const daNpcAshB_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -135,7 +135,7 @@ public:
inline bool step(s16, int, f32); inline bool step(s16, int, f32);
inline void playExpression(); inline void playExpression();
static DUSK_GAME_DATA EventFn DUSK_CONST mEvtSeqList[2]; static EventFn DUSK_CONST mEvtSeqList[2];
private: private:
/* 0xB48 */ Z2Creature mCreatureSound; /* 0xB48 */ Z2Creature mCreatureSound;
+3 -3
View File
@@ -22,7 +22,7 @@ class daNpc_Bans_Param_c {
public: public:
virtual ~daNpc_Bans_Param_c() {} virtual ~daNpc_Bans_Param_c() {}
static DUSK_GAME_DATA daNpc_Bans_HIOParam const m; static daNpc_Bans_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -117,8 +117,8 @@ public:
return rv; return rv;
} }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[4]; static char DUSK_CONST* DUSK_CONST mCutNameList[4];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[4]; static cutFunc DUSK_CONST mCutList[4];
/* 0x0F7C */ mDoExt_McaMorfSO* mpScoopMorf; /* 0x0F7C */ mDoExt_McaMorfSO* mpScoopMorf;
/* 0x0F80 */ NPC_BANS_HIO_CLASS* mHIO; /* 0x0F80 */ NPC_BANS_HIO_CLASS* mHIO;
+3 -3
View File
@@ -15,7 +15,7 @@ class daNpc_Besu_Param_c {
public: public:
virtual ~daNpc_Besu_Param_c() {} virtual ~daNpc_Besu_Param_c() {}
static DUSK_GAME_DATA const daNpc_Besu_HIOParam m; static const daNpc_Besu_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -140,8 +140,8 @@ public:
u8 getPathID() { return (fopAcM_GetParam(this) & 0xff00) >> 8; } u8 getPathID() { return (fopAcM_GetParam(this) & 0xff00) >> 8; }
u8 getBitSW() { return (fopAcM_GetParam(this) & 0xff0000) >> 16; } u8 getBitSW() { return (fopAcM_GetParam(this) & 0xff0000) >> 16; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[15]; static char DUSK_CONST* DUSK_CONST mCutNameList[15];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[15]; static cutFunc DUSK_CONST mCutList[15];
private: private:
/* 0x0E40 */ mDoExt_McaMorfSO* mpCupModelMorf; /* 0x0E40 */ mDoExt_McaMorfSO* mpCupModelMorf;
+2 -2
View File
@@ -14,7 +14,7 @@ class daNpcBlueNS_Param_c {
public: public:
virtual ~daNpcBlueNS_Param_c() {} virtual ~daNpcBlueNS_Param_c() {}
static DUSK_GAME_DATA const daNpcBlueNS_HIOParam m; static const daNpcBlueNS_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -124,7 +124,7 @@ public:
return var_r30; return var_r30;
} }
static DUSK_GAME_DATA EventFn DUSK_CONST mEvtSeqList[]; static EventFn DUSK_CONST mEvtSeqList[];
/* 0xB48 */ Z2Creature mSound; /* 0xB48 */ Z2Creature mSound;
/* 0xBD8 */ u8 field_0xBD8[0xBDC - 0xBD8]; /* 0xBD8 */ u8 field_0xBD8[0xBDC - 0xBD8];
+3 -3
View File
@@ -16,7 +16,7 @@ struct daNpc_Bou_HIOParam {
public: public:
virtual ~daNpc_Bou_Param_c() {} virtual ~daNpc_Bou_Param_c() {}
static DUSK_GAME_DATA const daNpc_Bou_HIOParam m; static const daNpc_Bou_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -114,8 +114,8 @@ public:
virtual int drawDbgInfo(); virtual int drawDbgInfo();
virtual void changeAnm(int*, int*); virtual void changeAnm(int*, int*);
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[9]; static char DUSK_CONST* DUSK_CONST mCutNameList[9];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[9]; static cutFunc DUSK_CONST mCutList[9];
int getFlowNodeNo() { int getFlowNodeNo() {
u16 nodeNo = home.angle.x; u16 nodeNo = home.angle.x;
+2 -2
View File
@@ -29,7 +29,7 @@ class daNpcBouS_Param_c {
public: public:
virtual ~daNpcBouS_Param_c() {} virtual ~daNpcBouS_Param_c() {}
static DUSK_GAME_DATA daNpcBouS_HIOParam const m; static daNpcBouS_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -128,7 +128,7 @@ public:
mForcibleTalk = 1; mForcibleTalk = 1;
} }
static DUSK_GAME_DATA eventFunc mEvtSeqList[4]; static eventFunc mEvtSeqList[4];
private: private:
/* 0xB48 */ Z2Creature mSound; /* 0xB48 */ Z2Creature mSound;
+2 -2
View File
@@ -25,7 +25,7 @@ public:
J3DModelData* getObjMdlDataP(int); J3DModelData* getObjMdlDataP(int);
virtual ~daNpcCd_c() {} virtual ~daNpcCd_c() {}
static DUSK_GAME_DATA dCcD_SrcCyl const m_cylDat; static dCcD_SrcCyl const m_cylDat;
/* 0x56C */ request_of_phase_process_class mPhase1; /* 0x56C */ request_of_phase_process_class mPhase1;
/* 0x574 */ request_of_phase_process_class mPhase2; /* 0x574 */ request_of_phase_process_class mPhase2;
@@ -101,7 +101,7 @@ public:
STATIC_ASSERT(sizeof(daNpcCd_HIO_c) == 0x29BC); STATIC_ASSERT(sizeof(daNpcCd_HIO_c) == 0x29BC);
DUSK_GAME_EXTERN daNpcCd_HIO_c l_Cd_HIO; extern daNpcCd_HIO_c l_Cd_HIO;
inline f32 HIO_atnOfs(int param_1) { inline f32 HIO_atnOfs(int param_1) {
s16 rv; s16 rv;
if (param_1 < 16) { if (param_1 < 16) {
+2 -2
View File
@@ -87,7 +87,7 @@ struct daNpcCd2_HIO_c : public fOpAcm_HIO_entry_c {
/* 0x20C4 */ daNpcCd2_HIO_WChild_c field_0x20c4[14]; /* 0x20C4 */ daNpcCd2_HIO_WChild_c field_0x20c4[14];
}; };
DUSK_GAME_EXTERN daNpcCd2_HIO_c l_Cd2_HIO; extern daNpcCd2_HIO_c l_Cd2_HIO;
inline s16 Cd2_HIO_atnOfs(int param_1) { inline s16 Cd2_HIO_atnOfs(int param_1) {
s16 rv; s16 rv;
@@ -269,7 +269,7 @@ public:
J3DAnmTexPattern* getTexAnmP(int); J3DAnmTexPattern* getTexAnmP(int);
virtual ~daNpcCd2_c() {} virtual ~daNpcCd2_c() {}
static DUSK_GAME_DATA dCcD_SrcCyl const m_cylDat; static dCcD_SrcCyl const m_cylDat;
/* 0x56C */ request_of_phase_process_class mPhase1; /* 0x56C */ request_of_phase_process_class mPhase1;
/* 0x574 */ request_of_phase_process_class mPhase2; /* 0x574 */ request_of_phase_process_class mPhase2;
+46 -46
View File
@@ -334,52 +334,52 @@ public:
actionFunc mExecFn; actionFunc mExecFn;
}; };
static DUSK_GAME_DATA const ActionPair ActionTable[8]; static const ActionPair ActionTable[8];
static DUSK_GAME_DATA seqFunc* m_funcTbl[44]; static seqFunc* m_funcTbl[44];
static DUSK_GAME_DATA seqFunc m_seq00_funcTbl[2]; static seqFunc m_seq00_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq01_funcTbl[2]; static seqFunc m_seq01_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq02_funcTbl[2]; static seqFunc m_seq02_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq03_funcTbl[2]; static seqFunc m_seq03_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq04_funcTbl[2]; static seqFunc m_seq04_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq05_funcTbl[4]; static seqFunc m_seq05_funcTbl[4];
static DUSK_GAME_DATA seqFunc m_seq06_funcTbl[4]; static seqFunc m_seq06_funcTbl[4];
static DUSK_GAME_DATA seqFunc m_seq07_funcTbl[2]; static seqFunc m_seq07_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq08_funcTbl[7]; static seqFunc m_seq08_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq09_funcTbl[2]; static seqFunc m_seq09_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq10_funcTbl[2]; static seqFunc m_seq10_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq11_funcTbl[6]; static seqFunc m_seq11_funcTbl[6];
static DUSK_GAME_DATA seqFunc m_seq12_funcTbl[2]; static seqFunc m_seq12_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq13_funcTbl[6]; static seqFunc m_seq13_funcTbl[6];
static DUSK_GAME_DATA seqFunc m_seq14_funcTbl[2]; static seqFunc m_seq14_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq15_funcTbl[2]; static seqFunc m_seq15_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq16_funcTbl[7]; static seqFunc m_seq16_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq17_funcTbl[2]; static seqFunc m_seq17_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq18_funcTbl[2]; static seqFunc m_seq18_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq19_funcTbl[7]; static seqFunc m_seq19_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq20_funcTbl[2]; static seqFunc m_seq20_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq21_funcTbl[2]; static seqFunc m_seq21_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq22_funcTbl[4]; static seqFunc m_seq22_funcTbl[4];
static DUSK_GAME_DATA seqFunc m_seq23_funcTbl[7]; static seqFunc m_seq23_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq24_funcTbl[5]; static seqFunc m_seq24_funcTbl[5];
static DUSK_GAME_DATA seqFunc m_seq25_funcTbl[7]; static seqFunc m_seq25_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq26_funcTbl[3]; static seqFunc m_seq26_funcTbl[3];
static DUSK_GAME_DATA seqFunc m_seq27_funcTbl[2]; static seqFunc m_seq27_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq28_funcTbl[3]; static seqFunc m_seq28_funcTbl[3];
static DUSK_GAME_DATA seqFunc m_seq29_funcTbl[3]; static seqFunc m_seq29_funcTbl[3];
static DUSK_GAME_DATA seqFunc m_seq30_funcTbl[6]; static seqFunc m_seq30_funcTbl[6];
static DUSK_GAME_DATA seqFunc m_seq31_funcTbl[6]; static seqFunc m_seq31_funcTbl[6];
static DUSK_GAME_DATA seqFunc m_seq32_funcTbl[7]; static seqFunc m_seq32_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq33_funcTbl[7]; static seqFunc m_seq33_funcTbl[7];
static DUSK_GAME_DATA seqFunc m_seq34_funcTbl[9]; static seqFunc m_seq34_funcTbl[9];
static DUSK_GAME_DATA seqFunc m_seq35_funcTbl[2]; static seqFunc m_seq35_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq36_funcTbl[4]; static seqFunc m_seq36_funcTbl[4];
static DUSK_GAME_DATA seqFunc m_seq37_funcTbl[2]; static seqFunc m_seq37_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq38_funcTbl[2]; static seqFunc m_seq38_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq39_funcTbl[2]; static seqFunc m_seq39_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq40_funcTbl[3]; static seqFunc m_seq40_funcTbl[3];
static DUSK_GAME_DATA seqFunc m_seq41_funcTbl[2]; static seqFunc m_seq41_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq42_funcTbl[2]; static seqFunc m_seq42_funcTbl[2];
static DUSK_GAME_DATA seqFunc m_seq43_funcTbl[3]; static seqFunc m_seq43_funcTbl[3];
/* 0xAC8 */ J3DModel* field_0xac8; /* 0xAC8 */ J3DModel* field_0xac8;
/* 0xACC */ J3DModel* field_0xacc; /* 0xACC */ J3DModel* field_0xacc;
+2 -2
View File
@@ -11,7 +11,7 @@ class daNpcChat_Param_c {
public: public:
virtual ~daNpcChat_Param_c() {} virtual ~daNpcChat_Param_c() {}
static DUSK_GAME_DATA daNpcChat_HIOParam const m; static daNpcChat_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -102,7 +102,7 @@ public:
void setFear() { mFear = true; } void setFear() { mFear = true; }
void setTalkFlag() { mTalkFlag = true; } void setTalkFlag() { mTalkFlag = true; }
static DUSK_GAME_DATA eventFunc DUSK_CONST mEvtSeqList[1]; static eventFunc DUSK_CONST mEvtSeqList[1];
private: private:
/* 0xB48 */ Z2CreatureCitizen mSound; /* 0xB48 */ Z2CreatureCitizen mSound;
+2 -2
View File
@@ -12,7 +12,7 @@ class daNpcChin_Param_c {
public: public:
virtual ~daNpcChin_Param_c() {} virtual ~daNpcChin_Param_c() {}
static DUSK_GAME_DATA daNpcChin_HIOParam const m; static daNpcChin_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -183,7 +183,7 @@ public:
inline void ForcibleTalk_Off() { field_0xe06 = 0; } inline void ForcibleTalk_Off() { field_0xe06 = 0; }
inline u8 getForcibleTalk2() { return field_0xe06; } inline u8 getForcibleTalk2() { return field_0xe06; }
static DUSK_GAME_DATA eventFunc mEvtSeqList[8]; static eventFunc mEvtSeqList[8];
/* 0xB48 */ Z2Creature mSound; /* 0xB48 */ Z2Creature mSound;
/* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm;
+3 -3
View File
@@ -14,7 +14,7 @@ class daNpc_clerkA_Param_c {
public: public:
virtual ~daNpc_clerkA_Param_c() {} virtual ~daNpc_clerkA_Param_c() {}
static DUSK_GAME_DATA const daNpc_clerkA_HIOParam m; static const daNpc_clerkA_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -124,8 +124,8 @@ public:
u8 getMaxNumItem() { return (fopAcM_GetParam(this) & 0xF000000) >> 24; } u8 getMaxNumItem() { return (fopAcM_GetParam(this) & 0xF000000) >> 24; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[1]; static char DUSK_CONST* DUSK_CONST mCutNameList[1];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1]; static cutFunc DUSK_CONST mCutList[1];
private: private:
/* 0x0F7C */ NPC_CLERKA_HIO_CLASS* mpHIO; /* 0x0F7C */ NPC_CLERKA_HIO_CLASS* mpHIO;
+3 -3
View File
@@ -15,7 +15,7 @@ class daNpc_clerkB_Param_c {
public: public:
virtual ~daNpc_clerkB_Param_c() {} virtual ~daNpc_clerkB_Param_c() {}
static DUSK_GAME_DATA const daNpc_clerkB_HIOParam m; static const daNpc_clerkB_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -137,8 +137,8 @@ public:
u8 getMaxNumItem() { return (fopAcM_GetParam(this) & 0xF000000) >> 24; } u8 getMaxNumItem() { return (fopAcM_GetParam(this) & 0xF000000) >> 24; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[1]; static char DUSK_CONST* DUSK_CONST mCutNameList[1];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1]; static cutFunc DUSK_CONST mCutList[1];
private: private:
/* 0x0F7C */ mDoExt_bpkAnm mBpkAnm2; /* 0x0F7C */ mDoExt_bpkAnm mBpkAnm2;
+3 -3
View File
@@ -12,7 +12,7 @@ class daNpcClerkt_Param_c {
public: public:
virtual ~daNpcClerkt_Param_c() {} virtual ~daNpcClerkt_Param_c() {}
static DUSK_GAME_DATA const daNpcClerkt_HIOParam m; static const daNpcClerkt_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -125,8 +125,8 @@ public:
} }
} }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[1]; static char DUSK_CONST* DUSK_CONST mCutNameList[1];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1]; static cutFunc DUSK_CONST mCutList[1];
private: private:
/* 0x0F7C */ NPC_CLERKT_HIO_CLASS* mpHIO; /* 0x0F7C */ NPC_CLERKT_HIO_CLASS* mpHIO;
+1 -1
View File
@@ -295,7 +295,7 @@ public:
const daNpcCoach_Attr_c& attr() const { return M_attr; } const daNpcCoach_Attr_c& attr() const { return M_attr; }
static DUSK_GAME_DATA daNpcCoach_Attr_c const M_attr; static daNpcCoach_Attr_c const M_attr;
static u16 const ParticleName[10]; static u16 const ParticleName[10];
private: private:
/* 0x0568 */ daNpcChHorse_c mChHorse; /* 0x0568 */ daNpcChHorse_c mChHorse;
+3 -3
View File
@@ -12,7 +12,7 @@ class daNpc_Doc_Param_c {
public: public:
virtual ~daNpc_Doc_Param_c() {} virtual ~daNpc_Doc_Param_c() {}
static DUSK_GAME_DATA const daNpc_Doc_HIOParam m; static const daNpc_Doc_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -133,8 +133,8 @@ public:
return (fopAcM_GetParam(this) & 0xFF00) >> 8; return (fopAcM_GetParam(this) & 0xFF00) >> 8;
} }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[1]; static char DUSK_CONST* DUSK_CONST mCutNameList[1];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1]; static cutFunc DUSK_CONST mCutList[1];
private: private:
/* 0xE40 */ NPC_DOC_HIO_CLASS* mpHIO; /* 0xE40 */ NPC_DOC_HIO_CLASS* mpHIO;
+2 -2
View File
@@ -12,7 +12,7 @@ class daNpcDoorBoy_Param_c {
public: public:
virtual ~daNpcDoorBoy_Param_c() {} virtual ~daNpcDoorBoy_Param_c() {}
static DUSK_GAME_DATA daNpcDoorBoy_HIOParam const m; static daNpcDoorBoy_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -78,7 +78,7 @@ public:
inline int getTimeHour(); inline int getTimeHour();
inline bool isDummyTalk(); inline bool isDummyTalk();
static DUSK_GAME_DATA EventFn DUSK_CONST mEvtSeqList[1]; static EventFn DUSK_CONST mEvtSeqList[1];
private: private:
/* 0xB48 */ Z2CreatureCitizen mSound; /* 0xB48 */ Z2CreatureCitizen mSound;
+1 -1
View File
@@ -11,7 +11,7 @@ class daNpcDrSol_Param_c {
public: public:
virtual ~daNpcDrSol_Param_c() {} virtual ~daNpcDrSol_Param_c() {}
static DUSK_GAME_DATA const daNpcDrSol_HIOParam m; static const daNpcDrSol_HIOParam m;
}; };
#if DEBUG #if DEBUG
+3 -3
View File
@@ -94,7 +94,7 @@ class daNpc_Fairy_Param_c {
public: public:
virtual ~daNpc_Fairy_Param_c() {} virtual ~daNpc_Fairy_Param_c() {}
static DUSK_GAME_DATA daNpc_Fairy_HIOParam const m; static daNpc_Fairy_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -294,8 +294,8 @@ public:
u8 getSceneNo1() { return (fopAcM_GetParam(this) >> 8) & 0xFF; } u8 getSceneNo1() { return (fopAcM_GetParam(this) >> 8) & 0xFF; }
u8 getSceneNo2() { return (fopAcM_GetParam(this) >> 16) & 0xFF; } u8 getSceneNo2() { return (fopAcM_GetParam(this) >> 16) & 0xFF; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[18]; static char DUSK_CONST* DUSK_CONST mCutNameList[18];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[18]; static cutFunc DUSK_CONST mCutList[18];
private: private:
/* 0x0E40 */ NPC_FAIRY_HIO_CLASS* mHIO; /* 0x0E40 */ NPC_FAIRY_HIO_CLASS* mHIO;
/* 0x0E44 */ dCcD_Cyl mCyl; /* 0x0E44 */ dCcD_Cyl mCyl;
+3 -3
View File
@@ -13,7 +13,7 @@ class daNpc_FairySeirei_Param_c {
public: public:
virtual ~daNpc_FairySeirei_Param_c() {} virtual ~daNpc_FairySeirei_Param_c() {}
static DUSK_GAME_DATA daNpc_FairySeirei_HIOParam const m; static daNpc_FairySeirei_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -90,8 +90,8 @@ public:
int getSeneNo() { return (fopAcM_GetParam(this) >> 8) & 0xFF; } int getSeneNo() { return (fopAcM_GetParam(this) >> 8) & 0xFF; }
static DUSK_GAME_DATA DUSK_CONST char* mCutNameList[1]; static DUSK_CONST char* mCutNameList[1];
static DUSK_GAME_DATA DUSK_CONST cutFunc mCutList[1]; static DUSK_CONST cutFunc mCutList[1];
private: private:
/* 0xE40 */ NPC_FAIRY_SEIREI_HIO_CLASS* mpHIO; /* 0xE40 */ NPC_FAIRY_SEIREI_HIO_CLASS* mpHIO;
+3 -3
View File
@@ -11,7 +11,7 @@ class daNpc_Gnd_Param_c {
public: public:
virtual ~daNpc_Gnd_Param_c() {} virtual ~daNpc_Gnd_Param_c() {}
static DUSK_GAME_DATA const daNpc_Gnd_HIOParam m; static const daNpc_Gnd_HIOParam m;
}; };
#if DEBUG #if DEBUG
@@ -96,8 +96,8 @@ public:
s32 getNeckJointNo() { return 3; } s32 getNeckJointNo() { return 3; }
s32 getBackboneJointNo() { return 1; } s32 getBackboneJointNo() { return 1; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[1]; static char DUSK_CONST* DUSK_CONST mCutNameList[1];
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1]; static cutFunc DUSK_CONST mCutList[1];
private: private:
/* 0xE40 */ NPC_GND_HIO_CLASS* mpHIO; /* 0xE40 */ NPC_GND_HIO_CLASS* mpHIO;
+3 -3
View File
@@ -21,7 +21,7 @@ class daNpc_grA_Param_c {
public: public:
virtual ~daNpc_grA_Param_c() {} virtual ~daNpc_grA_Param_c() {}
static DUSK_GAME_DATA daNpc_grA_HIOParam const m; static daNpc_grA_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -138,9 +138,9 @@ public:
void addCarryNum() { field_0x1692++; } void addCarryNum() { field_0x1692++; }
u8 getPathNoFromParam() { return home.angle.z; } u8 getPathNoFromParam() { return home.angle.z; }
void setGateWalk() { field_0x14D0 = 1; } void setGateWalk() { field_0x14D0 = 1; }
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mEvtCutNameList[12]; static char DUSK_CONST* DUSK_CONST mEvtCutNameList[12];
typedef BOOL (daNpc_grA_c::*cut_type)(int); typedef BOOL (daNpc_grA_c::*cut_type)(int);
static DUSK_GAME_DATA cut_type DUSK_CONST mEvtCutList[]; static cut_type DUSK_CONST mEvtCutList[];
private: private:
typedef BOOL (daNpc_grA_c::*daNpc_grA_c_Action)(void*); typedef BOOL (daNpc_grA_c::*daNpc_grA_c_Action)(void*);
+3 -3
View File
@@ -12,7 +12,7 @@ class daNpc_grC_Param_c {
public: public:
virtual ~daNpc_grC_Param_c() {} virtual ~daNpc_grC_Param_c() {}
static DUSK_GAME_DATA daNpc_grC_HIOParam const m; static daNpc_grC_HIOParam const m;
}; };
#if DEBUG #if DEBUG
@@ -89,8 +89,8 @@ public:
void setPrtcl(); void setPrtcl();
void adjustShapeAngle() {} void adjustShapeAngle() {}
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mEvtCutNameList; static char DUSK_CONST* DUSK_CONST mEvtCutNameList;
static DUSK_GAME_DATA EventFn DUSK_CONST mEvtCutList[1]; static EventFn DUSK_CONST mEvtCutList[1];
private: private:
/* 0xB48 */ Z2Creature mSound; /* 0xB48 */ Z2Creature mSound;

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