mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-01 07:57:21 -04:00
Compare commits
494 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 589c6675fe | |||
| 0be48db605 | |||
| dbb9ce2c03 | |||
| cc808ab50c | |||
| 591c38e871 | |||
| a5bc71795e | |||
| 7682165478 | |||
| 26d0725c76 | |||
| 1b3b493fbf | |||
| f62a70f9d0 | |||
| ec2173db9f | |||
| 563944d4a3 | |||
| b8f69e82dd | |||
| 830b560933 | |||
| 57019bea30 | |||
| c590018059 | |||
| e7eefbb0cb | |||
| 7ee39edee7 | |||
| 6592871fa2 | |||
| 5a1368b355 | |||
| 6984ae83bf | |||
| e57c952deb | |||
| 4239cea3d5 | |||
| 93479100fc | |||
| 9bd34a0d02 | |||
| cce67c1809 | |||
| 6bf0dfd92a | |||
| 4d8fcfa551 | |||
| 6366ab61d1 | |||
| 7537f1c4a8 | |||
| a3de85fb4b | |||
| 08e0645ef8 | |||
| f20cf3c24e | |||
| b2dfdf4158 | |||
| 99689258a2 | |||
| 08345d01ed | |||
| 56d47d475f | |||
| 8a92efbe0d | |||
| 1790ad6faf | |||
| e39c139b97 | |||
| 54b3545736 | |||
| 2428ca2efe | |||
| 05d9cf0402 | |||
| 2651640ee0 | |||
| f8c5a8988b | |||
| 544964c1a5 | |||
| 59b76f7aae | |||
| 7bd3e9cafd | |||
| 8999c4c9c5 | |||
| 917def4732 | |||
| 0516282bb6 | |||
| 4466442cfb | |||
| d6f741947a | |||
| d855efe513 | |||
| 51a25206c2 | |||
| 28733f5c15 | |||
| b2ac2d6600 | |||
| f6b86d3f38 | |||
| b118fa19e1 | |||
| 68bebfad3a | |||
| a0f5b250b4 | |||
| cb70f2c3b3 | |||
| 5851954ca1 | |||
| c65f0bb0ac | |||
| 038254db48 | |||
| c1997b3d68 | |||
| 474a7dce00 | |||
| 382f33d021 | |||
| efbf82d4c7 | |||
| b743a762b4 | |||
| 302abd6b65 | |||
| 3f6ae4324b | |||
| dccded964b | |||
| ea09dd73c6 | |||
| c426b52a15 | |||
| 41e0a81c39 | |||
| 5b6f2f6e91 | |||
| bbea07ba9e | |||
| 0f0dca5514 | |||
| 3fb86dbac8 | |||
| 83adafff82 | |||
| 7e367c1e15 | |||
| 46e81963e2 | |||
| 4f1d4cde3d | |||
| 45c8fa9f19 | |||
| 87635d3cf7 | |||
| e5324c7562 | |||
| 03593def22 | |||
| 2ae5518c81 | |||
| bc45bf27c2 | |||
| 7d2c9776ea | |||
| fbf4fcc50c | |||
| 1868d698f5 | |||
| d858626be1 | |||
| f00ad8e0ea | |||
| 7b521aef02 | |||
| 4721b8da50 | |||
| b06af0e057 | |||
| 518dea482e | |||
| daf2f18369 | |||
| 9307d8abde | |||
| b3dbf2c71b | |||
| 4bb5f320c3 | |||
| f1357f09ed | |||
| e3eb63f158 | |||
| 47c0a399e1 | |||
| dfdd5250bd | |||
| ba7211126c | |||
| ef607434dd | |||
| f12838ea3b | |||
| dc88e11115 | |||
| e671ed748b | |||
| 98633a5cb6 | |||
| 6c1aeb0d0a | |||
| a2d41bcfba | |||
| 96ed5c671b | |||
| de12d277d0 | |||
| 3b8ec9efa6 | |||
| 39b079ddb9 | |||
| e2790d922a | |||
| afed2c1774 | |||
| 46a67c658c | |||
| 351afd6686 | |||
| 485374abba | |||
| 8ecd848307 | |||
| c4a13c8c10 | |||
| 313e9be99d | |||
| d79088ba05 | |||
| 3aa7abe73f | |||
| 8e38f27602 | |||
| 7543db2222 | |||
| 32e553e38d | |||
| 089a947c30 | |||
| 83a5ccce92 | |||
| 48de086d65 | |||
| 5a61b912bb | |||
| 4e92b22c5d | |||
| ede9697dae | |||
| 580b772c3c | |||
| 143b548102 | |||
| 15742c71f3 | |||
| 40f753e18b | |||
| 65f4048a41 | |||
| e78a198adf | |||
| 75d86ab296 | |||
| 62e48984bf | |||
| deb213d07a | |||
| 484c5e8bf3 | |||
| bb67fc991d | |||
| 7326a619da | |||
| 4ce5800a33 | |||
| 66a8af31b3 | |||
| 85fe76b5be | |||
| ffa1fd5da4 | |||
| 3d2c5633cd | |||
| 08ce522edb | |||
| ab007b4c44 | |||
| 2cf2442dc8 | |||
| 7354bfc163 | |||
| 7bca56ea80 | |||
| 42eb9ef518 | |||
| be4a1d8838 | |||
| fd523a7e4d | |||
| 650b56beee | |||
| 1e3f097e63 | |||
| 9fd5678ae4 | |||
| dcf6268444 | |||
| 1f4370af85 | |||
| ed458dc2b3 | |||
| 7cebc42266 | |||
| 0d819b215d | |||
| 8113fc3088 | |||
| 78bc0216fb | |||
| b74603c883 | |||
| 9e8b451462 | |||
| d25695be0e | |||
| ba9dc8e9ba | |||
| ddb9816158 | |||
| 33e19f58e0 | |||
| ece92765c9 | |||
| c2dea2ab8f | |||
| e0dea86134 | |||
| 8409c2ab9f | |||
| 3eb4181b9c | |||
| 0d33d44e75 | |||
| 6ea50f33e4 | |||
| 769b8f02c8 | |||
| d77da3fba3 | |||
| ea0c697afa | |||
| 6321bcf0d8 | |||
| 1e7e9b3513 | |||
| 63e7fb4187 | |||
| 453accc674 | |||
| a565601849 | |||
| e92a3b4a90 | |||
| 141ddafdc8 | |||
| 007561874d | |||
| b167124a70 | |||
| 879c68f8a3 | |||
| ccaee02c2e | |||
| ff498af6e8 | |||
| 9c3420bcc7 | |||
| 23a6719e99 | |||
| 95c1a93332 | |||
| 63a91bffde | |||
| d33b3c16e1 | |||
| 33e2ffbb6e | |||
| 491a73f517 | |||
| 54efc49bd8 | |||
| f6eaa64156 | |||
| ed1f21f333 | |||
| 0a0f1e9a04 | |||
| 64720ef0e0 | |||
| b213ae2faa | |||
| d7e0c240d0 | |||
| 56de23e2e6 | |||
| 0862408ee8 | |||
| b2b74e5c4d | |||
| 39da278394 | |||
| ec2f2753a2 | |||
| 89a0702d2b | |||
| 9d94e9684f | |||
| f8d01ae6d2 | |||
| 9f400543c2 | |||
| 3861bf5506 | |||
| 5c745735d7 | |||
| 886fb7f2db | |||
| 01d0d12af0 | |||
| c0f882845d | |||
| 7225fb25dc | |||
| 5ab46c604b | |||
| f3b29d97d0 | |||
| 9447f4e89b | |||
| 7db5386885 | |||
| 9c1617d423 | |||
| 4c4e3e4b10 | |||
| 4db50d2843 | |||
| ba5a59eee2 | |||
| 5e69c7bdce | |||
| 04d9640eff | |||
| 83480110fd | |||
| 5038068905 | |||
| 7388213715 | |||
| 0e1e64fe7d | |||
| f48a3be466 | |||
| 61835c05ba | |||
| 762a597eba | |||
| 69283fc611 | |||
| b0efe464c0 | |||
| a6fda86ebf | |||
| 4b363dab06 | |||
| 77ae5fd0b3 | |||
| 2890a663f3 | |||
| f263a33db2 | |||
| 99ee9c2f48 | |||
| 1cfb22fdd9 | |||
| bf85d511a8 | |||
| dc9dce2cd7 | |||
| 8333ae35a8 | |||
| ced018794f | |||
| bfb715e11a | |||
| 9e9f36e484 | |||
| 38031e2545 | |||
| 2dea7375ef | |||
| 48bfcec0a3 | |||
| 7a4c23fa33 | |||
| 0014be0e82 | |||
| 870bd6476c | |||
| 96d9b5e7b1 | |||
| 09a73d5828 | |||
| e14d1f1f68 | |||
| 9f6c39754b | |||
| eda9991e6a | |||
| 95e699fb63 | |||
| 618d5b5733 | |||
| 2ececa3206 | |||
| 4fddaba76b | |||
| 045df82445 | |||
| b3833be529 | |||
| f45aa6040e | |||
| 25b273a726 | |||
| 3e99420527 | |||
| f6e526b187 | |||
| 23567fba42 | |||
| 255a55d4c8 | |||
| d7ca855d9a | |||
| e8318e2eb3 | |||
| f4992aa378 | |||
| 97388be8e5 | |||
| dbad1a4832 | |||
| 40949474a1 | |||
| 1166b58447 | |||
| 2c7cfa8951 | |||
| 89621dbff5 | |||
| 18f688e4b3 | |||
| 354d9b2fde | |||
| bc7faadc02 | |||
| c265207c92 | |||
| 05678f1ddc | |||
| cf015c4219 | |||
| a11427a48f | |||
| c87d7e3875 | |||
| 75f6337985 | |||
| 71f33021cc | |||
| 5b52f13f4b | |||
| 0a8cbc8f08 | |||
| 28e907aafd | |||
| 7018796b93 | |||
| b28e21fa18 | |||
| afc53ce1b2 | |||
| 4b0564779f | |||
| dc5fd98cfd | |||
| e2c51ec45c | |||
| 38640354b0 | |||
| 0393fdad6d | |||
| 5fc0340603 | |||
| 99652c01ed | |||
| 580d50ab05 | |||
| cfa680f2d8 | |||
| e4e438e1ba | |||
| 4ec1a0e52c | |||
| f251a3497d | |||
| 05734d9e93 | |||
| 30e4291f14 | |||
| 88770b90ab | |||
| 5a22ce6321 | |||
| 62b30d2dad | |||
| 5a5004793a | |||
| d0cb0c001a | |||
| 7a246941f8 | |||
| c3ad0abd37 | |||
| 91d6ec1f26 | |||
| a863ea253e | |||
| f5789aaebd | |||
| 438fd2fe71 | |||
| 040094115b | |||
| d4bc2daa89 | |||
| 622920d8c0 | |||
| 2b9dd50a8d | |||
| ff44cdfd3c | |||
| 3b0cc4c712 | |||
| 71d73a9db4 | |||
| 4ef7511336 | |||
| 9b34fd8f8f | |||
| a5cc64c2fe | |||
| ce88c237a3 | |||
| cee8101b37 | |||
| 409663711b | |||
| decf925e5d | |||
| cbead7bbb0 | |||
| 05e5023354 | |||
| 3126605cd6 | |||
| 0b932c1993 | |||
| 5ed72f4af2 | |||
| 1a3aac4d05 | |||
| 573414dc83 | |||
| 7132655d42 | |||
| 318bf293ca | |||
| 3149f929c1 | |||
| 8acdbf03bf | |||
| 11a632511f | |||
| 33941d8ede | |||
| 01d217acb5 | |||
| 7c331fdb2c | |||
| f7d3cf32fd | |||
| 95ceb1241b | |||
| 5c9ff2f5fa | |||
| 6b5e251037 | |||
| 4905718024 | |||
| 00929789a1 | |||
| 8e3306f87f | |||
| 8ea4b7747d | |||
| 02852eb586 | |||
| 7d9d398844 | |||
| dfe6d10c07 | |||
| 80f4284e82 | |||
| c7c9b664e8 | |||
| e2de904f8a | |||
| 1f593812c8 | |||
| d3d0016d16 | |||
| b7adbde0d5 | |||
| 94bfb8c9e3 | |||
| 8949a3a8ee | |||
| 80b0d11319 | |||
| 49e8058f4e | |||
| fccce91ea5 | |||
| 8b117c8ed3 | |||
| e77fe61596 | |||
| 0da8b4c6dc | |||
| 726999c476 | |||
| f774cc689c | |||
| 498db43c62 | |||
| 89f1c6c71f | |||
| c801cb2a84 | |||
| f069be5789 | |||
| b4722177ca | |||
| a36695a240 | |||
| 148a3d23eb | |||
| e7e5363c0c | |||
| 93cc3bd2ce | |||
| 52a53b64dc | |||
| fa473d48a9 | |||
| 8774cfa31b | |||
| 8270ec3050 | |||
| 6113df21e0 | |||
| dbdb4daa58 | |||
| dd04da230f | |||
| 7606998ba6 | |||
| 0f0c10d26a | |||
| 88dd4a2aae | |||
| cc75af7cce | |||
| 7520998aca | |||
| ab28ae36e3 | |||
| 88826bd5f8 | |||
| 39a9dd4029 | |||
| 23fe55fdca | |||
| a31e388b3a | |||
| 3e241da2a4 | |||
| ce80d83c00 | |||
| f62fb69a4d | |||
| 782bf4e0b3 | |||
| 727066e54e | |||
| f13ecbaec7 | |||
| be390c3645 | |||
| fdfe379824 | |||
| da2cb85aa1 | |||
| 2b4598821b | |||
| 4cd911a114 | |||
| 5484cd69b5 | |||
| 1ff9421cea | |||
| c0e83af35e | |||
| 2c6d0b11dd | |||
| bab1cda97a | |||
| da24b6a1e2 | |||
| 2bb05b0248 | |||
| 96d82c5fc2 | |||
| 5175795814 | |||
| 049758431c | |||
| 762f103991 | |||
| 66aeeb8857 | |||
| d3a9c52ec5 | |||
| dea93938e6 | |||
| 890a42b3ee | |||
| 38f591c521 | |||
| 14ec080a23 | |||
| 48da572df0 | |||
| 0cb77802be | |||
| dacfe11d95 | |||
| cc58b41901 | |||
| 04a2417f02 | |||
| 9e74ffd9be | |||
| dec4045e25 | |||
| 4daf410cce | |||
| cf604b5fb0 | |||
| 8738e5b122 | |||
| 38bea19a7b | |||
| bf70de83f1 | |||
| f478751080 | |||
| a18ce4e6dd | |||
| e77bc5c9e5 | |||
| 7e39274da2 | |||
| 4ad05a3445 | |||
| 4e25db0f20 | |||
| 98b492bd89 | |||
| 461d59984f | |||
| 796a67f207 | |||
| 2d4247f10e | |||
| d4028fefa8 | |||
| 7e5726c255 | |||
| 1873330e61 | |||
| 9c9316466b | |||
| 123c809e14 | |||
| 8172e672de | |||
| 4d1771649a | |||
| c91925f243 | |||
| 87116b871b | |||
| 3547c57de0 | |||
| 2d8a60aa75 | |||
| dd773bc261 | |||
| 535c2f53c1 | |||
| c8cde246a9 | |||
| bc66d96d8b | |||
| 6c55f42ce2 | |||
| 679044f33d | |||
| ac53fdbbff | |||
| 0b78547ba1 | |||
| 0ebab8bad3 | |||
| ab7d3a5e03 | |||
| 2f79bbe067 | |||
| b8b5b7197c | |||
| 554a461c95 | |||
| 1efb6c4a80 | |||
| 377d6a0d25 | |||
| 72bed7a1ba |
+1
-1
@@ -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
|
||||||
|
|||||||
@@ -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/
|
|
||||||
|
|||||||
+160
-199
@@ -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_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_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_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_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_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_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_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")
|
||||||
@@ -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>
|
||||||
@@ -240,47 +299,7 @@ FetchContent_Declare(json
|
|||||||
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
|
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
|
||||||
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
|
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
|
||||||
)
|
)
|
||||||
message(STATUS "dusklight: Fetching miniz")
|
FetchContent_MakeAvailable(cxxopts json)
|
||||||
FetchContent_Declare(miniz
|
|
||||||
URL https://github.com/richgel999/miniz/releases/download/3.0.2/miniz-3.0.2.zip
|
|
||||||
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
)
|
|
||||||
|
|
||||||
set(_fetch_content_deps cxxopts json miniz)
|
|
||||||
if (DUSK_HAS_FUNCHOOK)
|
|
||||||
message(STATUS "dusklight: Fetching funchook")
|
|
||||||
# cmake/PatchFunchook.cmake patches funchook's cmake/capstone.cmake.in to inject a
|
|
||||||
# PATCH_COMMAND into capstone's inner ExternalProject. That PATCH_COMMAND runs
|
|
||||||
# cmake/PatchCapstone.cmake after capstone is cloned, which removes the
|
|
||||||
# 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
|
|
||||||
set(CAPSTONE_FIX_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/PatchCapstone.cmake")
|
|
||||||
FetchContent_Declare(funchook
|
|
||||||
GIT_REPOSITORY https://github.com/kubo/funchook.git
|
|
||||||
GIT_TAG v1.1.3
|
|
||||||
GIT_SHALLOW TRUE
|
|
||||||
GIT_PROGRESS TRUE
|
|
||||||
PATCH_COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=<SOURCE_DIR> -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PatchFunchook.cmake
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
)
|
|
||||||
set(FUNCHOOK_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
||||||
set(FUNCHOOK_BUILD_SHARED OFF CACHE BOOL "" FORCE)
|
|
||||||
set(FUNCHOOK_INSTALL OFF CACHE BOOL "" FORCE)
|
|
||||||
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
|
|
||||||
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 +320,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 +333,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_SOURCE_DIR}/version.h.in ${CMAKE_BINARY_DIR}/version.h)
|
||||||
|
|
||||||
include(files.cmake)
|
include(files.cmake)
|
||||||
|
|
||||||
@@ -330,16 +363,22 @@ 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
|
||||||
|
${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
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
|
||||||
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)
|
||||||
@@ -398,6 +437,8 @@ if (DUSK_MOVIE_SUPPORT)
|
|||||||
list(APPEND GAME_COMPILE_DEFS MOVIE_SUPPORT=1)
|
list(APPEND GAME_COMPILE_DEFS MOVIE_SUPPORT=1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
include(src/dusk/randomizer/randomizer.cmake)
|
||||||
|
|
||||||
set(DUSK_ENABLE_DISCORD_DEFAULT ON)
|
set(DUSK_ENABLE_DISCORD_DEFAULT ON)
|
||||||
if (DEFINED DUSK_ENABLE_DISCORD_RPC AND NOT DEFINED DUSK_ENABLE_DISCORD)
|
if (DEFINED DUSK_ENABLE_DISCORD_RPC AND NOT DEFINED DUSK_ENABLE_DISCORD)
|
||||||
set(DUSK_ENABLE_DISCORD_DEFAULT ${DUSK_ENABLE_DISCORD_RPC})
|
set(DUSK_ENABLE_DISCORD_DEFAULT ${DUSK_ENABLE_DISCORD_RPC})
|
||||||
@@ -407,12 +448,9 @@ 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 ()
|
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,7 +476,7 @@ 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
|
# game_base is for all other game code files
|
||||||
@@ -452,11 +490,16 @@ 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}
|
||||||
|
$<$<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()
|
||||||
@@ -468,7 +511,7 @@ if (CMAKE_CXX_LINK_GROUP_USING_RESCAN_SUPPORTED OR CMAKE_LINK_GROUP_USING_RESCAN
|
|||||||
set(JSYSTEM_LINK_LIBRARIES "$<LINK_GROUP:RESCAN,${JSYSTEM_LIBRARIES}>")
|
set(JSYSTEM_LINK_LIBRARIES "$<LINK_GROUP:RESCAN,${JSYSTEM_LIBRARIES}>")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES} ${miniz_SOURCE_DIR}/miniz.c)
|
set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES})
|
||||||
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)
|
||||||
@@ -479,69 +522,28 @@ if (ENABLE_ASAN)
|
|||||||
target_sources(dusklight PRIVATE src/dusk/asan_options.c)
|
target_sources(dusklight PRIVATE src/dusk/asan_options.c)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# Add embedded data to target
|
||||||
|
|
||||||
|
file(GLOB_RECURSE RANDOMIZER_DATA "src/dusk/randomizer/generator/data/*")
|
||||||
|
file(GLOB_RECURSE RANDOMIZER_ASSETS "src/dusk/randomizer/assets/*")
|
||||||
|
list(APPEND RANDOMIZER_DATA ${RANDOMIZER_ASSETS})
|
||||||
|
set(RANDO_ROOT_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
foreach (RANDOMIZER_FILE IN LISTS RANDOMIZER_DATA)
|
||||||
|
file(RELATIVE_PATH REL_PATH ${RANDO_ROOT_DATA_DIR} ${RANDOMIZER_FILE})
|
||||||
|
if(REL_PATH MATCHES "^src/dusk/randomizer/generator/data/tests")
|
||||||
|
message(STATUS "Skipping Embed: ${REL_PATH}")
|
||||||
|
continue()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
message(STATUS "Embedding File: ${REL_PATH}")
|
||||||
|
b_embed(dusklight ${REL_PATH})
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS})
|
target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS})
|
||||||
target_include_directories(dusklight PRIVATE ${miniz_SOURCE_DIR})
|
target_include_directories(dusklight PRIVATE ${GAME_INCLUDE_DIRS})
|
||||||
target_link_libraries(dusklight PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES})
|
target_link_libraries(dusklight PRIVATE aurora::main ${GAME_LIBS} ${JSYSTEM_LINK_LIBRARIES})
|
||||||
target_precompile_headers(dusklight PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>")
|
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 ()
|
|
||||||
|
|
||||||
# Hook reliability: guaranteed patchable entries on the game ABI surface, and no identical-code folding.
|
|
||||||
if (MSVC)
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
set(DUSK_PATCHABLE_ENTRY_FLAG $<$<COMPILE_LANGUAGE:C,CXX>:/hotpatch>)
|
|
||||||
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)
|
|
||||||
target_link_libraries(dusklight PRIVATE Psapi)
|
|
||||||
endif ()
|
|
||||||
if (APPLE)
|
|
||||||
include(cmake/AppleExports.cmake)
|
|
||||||
setup_apple_exports(dusklight)
|
|
||||||
elseif (ANDROID)
|
|
||||||
include(cmake/AndroidExports.cmake)
|
|
||||||
setup_android_exports(dusklight)
|
|
||||||
elseif (UNIX)
|
|
||||||
target_link_options(dusklight PRIVATE -rdynamic)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (TARGET crashpad_handler)
|
if (TARGET crashpad_handler)
|
||||||
add_dependencies(dusklight crashpad_handler)
|
add_dependencies(dusklight crashpad_handler)
|
||||||
add_custom_command(TARGET dusklight POST_BUILD
|
add_custom_command(TARGET dusklight POST_BUILD
|
||||||
@@ -560,9 +562,6 @@ 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)
|
||||||
@@ -603,17 +602,6 @@ if (WIN32)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include(cmake/ModSDK.cmake)
|
|
||||||
|
|
||||||
if (DUSK_ENABLE_CODE_MODS AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
||||||
add_custom_target(dusklight_mods) # Aggregate target for all in-tree mods
|
|
||||||
add_subdirectory(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)
|
||||||
set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios)
|
set(DUSK_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios)
|
||||||
@@ -621,7 +609,6 @@ 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)
|
|
||||||
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 +628,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}
|
||||||
@@ -652,34 +640,9 @@ if (APPLE)
|
|||||||
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
|
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
|
||||||
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
|
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
|
||||||
)
|
)
|
||||||
if (DUSK_ENTITLEMENTS)
|
|
||||||
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)
|
||||||
@@ -800,5 +763,3 @@ foreach (target IN LISTS BINARY_TARGETS)
|
|||||||
endif ()
|
endif ()
|
||||||
endforeach ()
|
endforeach ()
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
install_bundled_mods()
|
|
||||||
|
|||||||
+23
-38
@@ -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": {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ It aims to be as accurate as possible to the original while also providing new o
|
|||||||
|
|
||||||
You must dump your own copy of the game. Please see [this article](https://wiki.dolphin-emu.org/index.php?title=Ripping_Games) for instructions. After dumping, you can use a program like [Dolphin](https://dolphin-emu.org/) or [nodtool](https://github.com/encounter/nod/releases) to convert the `.iso` to `.rvz` to save space.
|
You must dump your own copy of the game. Please see [this article](https://wiki.dolphin-emu.org/index.php?title=Ripping_Games) for instructions. After dumping, you can use a program like [Dolphin](https://dolphin-emu.org/) or [nodtool](https://github.com/encounter/nod/releases) to convert the `.iso` to `.rvz` to save space.
|
||||||
|
|
||||||
Currently, only the GameCube 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. Install Dusklight
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
|
||||||
@@ -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()
|
|
||||||
@@ -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 ()
|
|
||||||
@@ -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()
|
|
||||||
@@ -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)
|
|
||||||
@@ -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()
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# Patches capstone's CMakeLists.txt for compatibility with CMake >= 4.0:
|
|
||||||
# - Bumps cmake_minimum_required to 3.10 (CMake >= 4.0 dropped < 3.5 support; < 3.10 warns)
|
|
||||||
# - Removes cmake_policy(SET CMP0048 OLD) (rejected by CMake >= 3.27)
|
|
||||||
file(READ "${DIR}/CMakeLists.txt" _content)
|
|
||||||
string(REGEX REPLACE
|
|
||||||
"cmake_minimum_required[ \t]*\\([ \t]*VERSION[ \t]+[0-9]+\\.[0-9]+(\\.[0-9]+)?[ \t]*\\)"
|
|
||||||
"cmake_minimum_required(VERSION 3.10)"
|
|
||||||
_content "${_content}")
|
|
||||||
string(REGEX REPLACE
|
|
||||||
"cmake_policy[ \t]*\\([ \t]*SET[ \t]+CMP0048[ \t]+OLD[ \t]*\\)"
|
|
||||||
"# cmake_policy(SET CMP0048 OLD)"
|
|
||||||
_content "${_content}")
|
|
||||||
file(WRITE "${DIR}/CMakeLists.txt" "${_content}")
|
|
||||||
@@ -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}")
|
|
||||||
@@ -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()
|
|
||||||
@@ -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()
|
|
||||||
-850
@@ -1,850 +0,0 @@
|
|||||||
# Dusklight Mod API
|
|
||||||
|
|
||||||
Mods are `.dusk` bundles: zip archives that can contain code (in the form of native libraries), resources, DVD overlay
|
|
||||||
files, and texture replacements. Mods may be enabled, disabled and reloaded at runtime.
|
|
||||||
|
|
||||||
When code mods are loaded, they get dynamically linked by the operating system to the running game process. The mod
|
|
||||||
exports lifecycle functions that Dusklight calls into (`mod_initialize`, `mod_update`, `mod_shutdown`), and the mod
|
|
||||||
communicates with the host via **services**: plain C APIs, individually versioned. Dusklight exports several built-in
|
|
||||||
services, and mods may export services of their own, permitting framework mods and cross-mod integration.
|
|
||||||
|
|
||||||
Beyond services, mods have full access to the original game's code: include game headers, call directly into any public
|
|
||||||
function, read and write data fields, and hook the vast majority of game functions.
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
1. [Getting Started](#getting-started)
|
|
||||||
2. [mod.json](#modjson)
|
|
||||||
3. [Anatomy of a Code Mod](#anatomy-of-a-code-mod)
|
|
||||||
4. [Services](#services)
|
|
||||||
5. [Built-in Services](#built-in-services)
|
|
||||||
6. [Hooking Game Functions](#hooking-game-functions)
|
|
||||||
7. [Asset Overlays](#asset-overlays)
|
|
||||||
8. [Runtime Lifecycle](#runtime-lifecycle)
|
|
||||||
9. [Error Handling](#error-handling)
|
|
||||||
10. [Advanced](#advanced)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
|
|
||||||
Fork the [mod template](https://github.com/TwilitRealm/mod-template), a self-contained CMake project that uses the
|
|
||||||
Dusklight mod SDK.
|
|
||||||
|
|
||||||
```
|
|
||||||
my_mod/
|
|
||||||
├── CMakeLists.txt
|
|
||||||
├── mod.json
|
|
||||||
├── src/mod.cpp
|
|
||||||
├── res/ (optional bundled resources)
|
|
||||||
├── overlay/ (optional game file overrides)
|
|
||||||
└── textures/ (optional texture replacements)
|
|
||||||
```
|
|
||||||
|
|
||||||
**CMakeLists.txt:**
|
|
||||||
|
|
||||||
```cmake
|
|
||||||
cmake_minimum_required(VERSION 3.26)
|
|
||||||
project(my_mod CXX)
|
|
||||||
|
|
||||||
if (NOT DUSKLIGHT_VERSION)
|
|
||||||
set(DUSKLIGHT_VERSION "76b56cd8b81809fce0a5c2a44e2f6d437591132f")
|
|
||||||
endif ()
|
|
||||||
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/FetchDusklight.cmake")
|
|
||||||
add_subdirectory("${DUSKLIGHT_DIR}/sdk" dusklight-sdk EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
add_mod(my_mod
|
|
||||||
FEATURES game fmt # remove game for service-only mods; add webgpu for GfxService
|
|
||||||
SOURCES src/mod.cpp
|
|
||||||
MOD_JSON mod.json
|
|
||||||
RES_DIR res # mod resources, including icon.png and banner.png
|
|
||||||
OVERLAY_DIR overlay # game file overlays; remove if unused
|
|
||||||
TEXTURES_DIR textures # texture replacements; remove if unused
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
Available features:
|
|
||||||
|
|
||||||
- `fmt`: Provides the header-only `{fmt}` library and the formatted logging helpers in `mods/svc/log.hpp`.
|
|
||||||
- `game`: Allows calling into and hooking game code. Mods that **only** use services may omit it, providing a wider
|
|
||||||
range of compatibility with Dusklight versions and a slightly faster build process.
|
|
||||||
- `webgpu`: Allows importing the WebGPU API (`webgpu/webgpu.h`). Must be enabled when using
|
|
||||||
[GfxService](#gfxservice-modssvcgfxh).
|
|
||||||
|
|
||||||
Building produces `my_mod.dusk` in `build/mods/`. Copy the `.dusk` into the user mods folder:
|
|
||||||
|
|
||||||
- Windows: `%APPDATA%\TwilitRealm\Dusklight\mods`
|
|
||||||
- Linux: `~/.local/share/TwilitRealm/Dusklight/mods`
|
|
||||||
- macOS: `~/Library/Application Support/TwilitRealm/Dusklight/mods`
|
|
||||||
|
|
||||||
Passing `--mods <dir>` on the command line replaces the user directory with one of your choosing.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## mod.json
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"id": "com.example.my_mod",
|
|
||||||
"name": "My Mod",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"author": "Your Name",
|
|
||||||
"description": "A short description shown in the mod manager.",
|
|
||||||
"icon": "res/my_icon.png",
|
|
||||||
"banner": "res/my_banner.png"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`id` is required: a unique, stable identifier (reverse-DNS style; periods, underscores, and alphanumerics). Everything
|
|
||||||
else is optional but recommended.
|
|
||||||
|
|
||||||
`icon` and `banner` are bundle-relative paths to PNG images for the in-game mod manager: the square icon (e.g.
|
|
||||||
512x512), the banner (~3.5:1). If omitted, `res/icon.png` and `res/banner.png` are used automatically when present.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Anatomy of a Code Mod
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include "mods/service.hpp"
|
|
||||||
#include "mods/svc/log.h"
|
|
||||||
|
|
||||||
DEFINE_MOD(); // once, in exactly one translation unit
|
|
||||||
IMPORT_SERVICE(LogService, svc_log); // resolved by the loader before mod_initialize
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
MOD_EXPORT ModResult mod_initialize(ModError* error) {
|
|
||||||
svc_log->info(mod_ctx, "hello from my_mod");
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
MOD_EXPORT ModResult mod_update(ModError* error) { // called every frame
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
MOD_EXPORT ModResult mod_shutdown(ModError* error) {
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
All three lifecycle exports are required. `mod_ctx` is your mod's identity token, set by the loader before
|
|
||||||
`mod_initialize` runs. Pass it as the first argument to every service call.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Services
|
|
||||||
|
|
||||||
A service is a struct of C function pointers with a version header. You declare what you use at file scope, and the
|
|
||||||
loader resolves it before your mod initializes:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(LogService, svc_log); // required, latest minor version
|
|
||||||
IMPORT_SERVICE_VERSION(LogService, svc_log, 0); // required, minimum minor version 0 (for backwards compatibility)
|
|
||||||
IMPORT_OPTIONAL_SERVICE(SomeService, svc_maybe); // may be null
|
|
||||||
```
|
|
||||||
|
|
||||||
A service must be imported in only **one** file (usually your `mod.cpp`). Other files may simply use `svc_log` or
|
|
||||||
`mods::log::` after including the appropriate header.
|
|
||||||
|
|
||||||
Each service is individually versioned, and there may be multiple major versions of a service provided at once,
|
|
||||||
allowing backwards compatibility with older mods while still changing services fundamentally if necessary. A **major**
|
|
||||||
bump is a breaking change, treated as a different service entirely. For **additive** changes, a service appends new
|
|
||||||
functions to the end of the struct without breaking existing callers and simply bumps the minor version.
|
|
||||||
|
|
||||||
`IMPORT_SERVICE` and `IMPORT_OPTIONAL_SERVICE` require the latest minor version compiled against, making every field in
|
|
||||||
the service safe to call. A mod can use `IMPORT_SERVICE_VERSION` (or its optional counterpart) with an older minor
|
|
||||||
version to remain compatible with older Dusklight versions, then use `SERVICE_HAS` to check at runtime for fields added
|
|
||||||
after that explicitly requested version.
|
|
||||||
|
|
||||||
The contract (see `sdk/include/mods/api.h` for the full version):
|
|
||||||
|
|
||||||
- **A required import is guaranteed valid.** If the service is missing or too old, the mod fails to load with a clear
|
|
||||||
error. No need to null check at call sites.
|
|
||||||
- **Anything at or below the minor version you imported can be called unconditionally.** The default macros import
|
|
||||||
the service type's current minor version; the versioned macros explicitly override that minimum.
|
|
||||||
- Optional imports may be null; check once in `mod_initialize`.
|
|
||||||
- Fields newer than your imported minor version must be gated behind `SERVICE_HAS(service, ServiceType, field)` plus a
|
|
||||||
null check.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Built-in Services
|
|
||||||
|
|
||||||
### LogService (`mods/svc/log.h`)
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(LogService, svc_log);
|
|
||||||
|
|
||||||
svc_log->info(mod_ctx, "spawned the thing");
|
|
||||||
svc_log->warn(mod_ctx, "that looks wrong");
|
|
||||||
svc_log->error(mod_ctx, "very bad");
|
|
||||||
svc_log->write(mod_ctx, LOG_LEVEL_DEBUG, "verbose details");
|
|
||||||
```
|
|
||||||
|
|
||||||
Messages appear in the console prefixed with your mod ID. Messages are plain UTF-8 strings and are copied before the
|
|
||||||
call returns. C++ mods can enable `add_mod(... FEATURES fmt)` and use the formatted logging helpers in
|
|
||||||
`mods/svc/log.hpp`:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <mods/svc/log.hpp>
|
|
||||||
|
|
||||||
mods::log::info("spawned actor {} at ({}, {})", actorName, x, y);
|
|
||||||
mods::log::warn("health is down to {:.1f}%", healthPercent);
|
|
||||||
```
|
|
||||||
|
|
||||||
### ResourceService (`mods/svc/resource.h`)
|
|
||||||
|
|
||||||
Loads files from the `res/` tree of your `.dusk` archive. Paths are relative to `res/` (pass `"config.txt"`, not
|
|
||||||
`"res/config.txt"`); absolute paths and `..` are rejected.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(ResourceService, svc_resource);
|
|
||||||
|
|
||||||
ResourceBuffer buf = RESOURCE_BUFFER_INIT;
|
|
||||||
if (svc_resource->load(mod_ctx, "config.txt", &buf) == MOD_OK) {
|
|
||||||
// buf.data / buf.size
|
|
||||||
svc_resource->free(mod_ctx, &buf);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Missing files return `MOD_UNAVAILABLE`. Always `free` what you `load`. Note that the bundle is read-only; for writable
|
|
||||||
storage, use the directory from `svc_host->mod_dir(mod_ctx)`.
|
|
||||||
|
|
||||||
### HostService (`mods/svc/host.h`)
|
|
||||||
|
|
||||||
Mod metadata and runtime interaction with the loader:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(HostService, svc_host);
|
|
||||||
|
|
||||||
const char* id = svc_host->mod_id(mod_ctx);
|
|
||||||
const char* dir = svc_host->mod_dir(mod_ctx); // writable per-mod directory
|
|
||||||
svc_host->fail(mod_ctx, MOD_ERROR, "something unrecoverable happened"); // disables the mod
|
|
||||||
```
|
|
||||||
|
|
||||||
`get_service`/`publish_service` provide dynamic service lookup; see [Exporting Services](#exporting-services).
|
|
||||||
|
|
||||||
**Lifecycle watches.** If your mod provides a service that hands out per-caller state (registrations, callbacks,
|
|
||||||
handles), watch other mods' lifecycle and drop what you hold for a mod when it detaches.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(HostService, svc_host);
|
|
||||||
|
|
||||||
void on_mod_lifecycle(ModContext* ctx, ModContext* subject, const char* subject_id,
|
|
||||||
ModLifecycleEvent event, void* user_data) {
|
|
||||||
if (event == MOD_LIFECYCLE_DETACHED) {
|
|
||||||
drop_state_for(subject); // same ModContext* the subject passed into your service
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t watch = 0;
|
|
||||||
svc_host->watch_mod_lifecycle(mod_ctx, on_mod_lifecycle, nullptr, &watch);
|
|
||||||
```
|
|
||||||
|
|
||||||
`MOD_LIFECYCLE_DETACHED` fires on the game thread at a lifecycle safe point, after the subject's `mod_shutdown` ran and
|
|
||||||
every service dropped its state. For your own mod's teardown, use `mod_shutdown` instead.
|
|
||||||
|
|
||||||
### HookService (`mods/svc/hook.h`)
|
|
||||||
|
|
||||||
Installs hooks on game functions and resolves symbols by name. You'll rarely call it directly; use the typed helpers in
|
|
||||||
`mods/svc/hook.hpp` described in [Hooking Game Functions](#hooking-game-functions).
|
|
||||||
|
|
||||||
### OverlayService (`mods/svc/overlay.h`)
|
|
||||||
|
|
||||||
Registers DVD file overlays at runtime: the dynamic counterpart to the static `overlay/` directory (see
|
|
||||||
[Asset Overlays](#asset-overlays)). Overlay a disc path with a file from your bundle, or with a caller-owned buffer
|
|
||||||
(copied on registration):
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(OverlayService, svc_overlay);
|
|
||||||
|
|
||||||
OverlayHandle handle = 0;
|
|
||||||
svc_overlay->add_file(mod_ctx, "/res/Msgus.arc", "res/replacement.arc", &handle);
|
|
||||||
svc_overlay->add_buffer(mod_ctx, "/generated.txt", data, size, nullptr);
|
|
||||||
svc_overlay->remove(mod_ctx, handle);
|
|
||||||
```
|
|
||||||
|
|
||||||
`disc_path` must be absolute (leading `/`) and is matched against the disc case-insensitively. Paths that don't exist
|
|
||||||
on the disc are added as new files. Changes are applied at the next frame boundary, and data the game already read
|
|
||||||
stays in memory until the file is re-read: sometimes a scene reload, and in the worst case, a full restart.
|
|
||||||
|
|
||||||
See [Asset Overlays](#asset-overlays) for priority and conflict handling.
|
|
||||||
|
|
||||||
### TextureService (`mods/svc/texture.h`)
|
|
||||||
|
|
||||||
Registers texture replacements at runtime: the dynamic counterpart to the static `textures/` directory (see
|
|
||||||
[Asset Overlays](#asset-overlays)). Two forms: raw texel data with an explicit key, or an encoded `.dds`/`.png` from
|
|
||||||
your bundle whose filename encodes the key:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(TextureService, svc_texture);
|
|
||||||
|
|
||||||
// Encoded file; filename follows the replacement naming convention.
|
|
||||||
TextureReplacementHandle handle = 0;
|
|
||||||
svc_texture->register_file(mod_ctx, "res/tex1_32x32_$_6.png", &handle);
|
|
||||||
|
|
||||||
// Raw data: match by texel-data pointer or by content hash (TEXTURE_KEY_SOURCE).
|
|
||||||
TextureKey key = TEXTURE_KEY_INIT;
|
|
||||||
key.kind = TEXTURE_KEY_POINTER;
|
|
||||||
key.pointer = someTexObj.data;
|
|
||||||
TextureData data = TEXTURE_DATA_INIT;
|
|
||||||
data.data = pixels; data.size = pixelsSize;
|
|
||||||
data.width = 32; data.height = 32; data.gx_format = GX_TF_RGBA8_PC;
|
|
||||||
svc_texture->register_data(mod_ctx, &key, &data, nullptr);
|
|
||||||
|
|
||||||
svc_texture->unregister(mod_ctx, handle);
|
|
||||||
```
|
|
||||||
|
|
||||||
Filenames use the same Dolphin-style convention as the user's `texture_replacements` directory:
|
|
||||||
`tex1_{w}x{h}_{texhash}[_{tluthash}]_{fmt}.dds|.png`, where hashes may be `$` (wildcard). `_mipN` sidecar files next to
|
|
||||||
a registered file are picked up automatically. Files are decoded lazily on first use by the renderer; raw data is copied
|
|
||||||
at registration. Registrations follow your mod's lifecycle.
|
|
||||||
|
|
||||||
See [Asset Overlays](#asset-overlays) for priority and conflict handling.
|
|
||||||
|
|
||||||
### ConfigService (`mods/svc/config.h`)
|
|
||||||
|
|
||||||
Persistent, mod-scoped configuration variables. Each var is stored in the user's `config.json` under
|
|
||||||
`mod.<escaped mod id>.<name>` (escaping: `.` → `_`, `_` → `__`, so `com.example.my_mod` becomes `com_example_my__mod`),
|
|
||||||
next to the host's own settings:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(ConfigService, svc_config);
|
|
||||||
|
|
||||||
ConfigVarDesc desc = CONFIG_VAR_DESC_INIT;
|
|
||||||
desc.name = "speedMultiplier"; // 1-64 chars from [A-Za-z0-9_-]; "enabled" is reserved
|
|
||||||
desc.type = CONFIG_VAR_FLOAT;
|
|
||||||
desc.default_float = 1.0;
|
|
||||||
ConfigVarHandle var = 0;
|
|
||||||
svc_config->register_var(mod_ctx, &desc, &var);
|
|
||||||
|
|
||||||
double speed = 1.0;
|
|
||||||
svc_config->get_float(mod_ctx, var, &speed);
|
|
||||||
svc_config->set_float(mod_ctx, var, 2.0);
|
|
||||||
|
|
||||||
// Optional: get notified when the value changes.
|
|
||||||
void on_speed_changed(ModContext* ctx, ConfigVarHandle var, const ConfigVarValue* value,
|
|
||||||
const ConfigVarValue* previous, void* user_data) {
|
|
||||||
/* value->float_value is the new value, previous->float_value the old one */
|
|
||||||
}
|
|
||||||
svc_config->subscribe(mod_ctx, var, on_speed_changed, nullptr, nullptr);
|
|
||||||
```
|
|
||||||
|
|
||||||
Types: `CONFIG_VAR_BOOL` (`bool`), `CONFIG_VAR_INT` (`int64_t`), `CONFIG_VAR_FLOAT` (`double`), `CONFIG_VAR_STRING`
|
|
||||||
(UTF-8; `get_string` copies into a caller buffer, pass a `NULL` buffer with size 0 to query the length). Accessors are
|
|
||||||
typed and must match the registration.
|
|
||||||
|
|
||||||
Change callbacks fire on the game thread whenever the value changes at runtime (your own `set_*` calls included).
|
|
||||||
Writes that store the same value are silent. Values applied from `config.json` or `--cvar` at registration do
|
|
||||||
**not** fire callbacks; read the value after `register_var` for the starting state.
|
|
||||||
|
|
||||||
### UiService (`mods/svc/ui.h`)
|
|
||||||
|
|
||||||
Integrate seamlessly with Dusklight's UI system: add controls and buttons to your mod's detail pane in the Mods window,
|
|
||||||
create custom windows and modal dialogs, apply custom RCSS stylesheets (anywhere!), and add menu bar tabs.
|
|
||||||
|
|
||||||
**Mod panel:** Registers or replaces the panel rendered in your mod's detail pane; `build` runs every time the detail
|
|
||||||
content is rebuilt, and `update` runs every frame while that mod is selected. While your mod is selected, the detail
|
|
||||||
pane carries your mod's id as a `mod-id` attribute (like custom window roots), so scoped RCSS can target it (e.g.
|
|
||||||
`[mod-id="com.example.mod"]`).
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(UiService, svc_ui);
|
|
||||||
|
|
||||||
UiElementHandle statusText = 0;
|
|
||||||
|
|
||||||
ModResult build(ModContext*, UiElementHandle panel, void*, ModError*) {
|
|
||||||
svc_ui->pane_add_section(mod_ctx, panel, "Status");
|
|
||||||
svc_ui->pane_add_text(mod_ctx, panel, "starting...", &statusText);
|
|
||||||
svc_ui->pane_add_progress(mod_ctx, panel, 0.5f, nullptr);
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
ModResult update(ModContext*, void*, ModError*) {
|
|
||||||
svc_ui->elem_set_text(mod_ctx, statusText, "running");
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
UiModsPanelDesc panel = UI_MODS_PANEL_DESC_INIT;
|
|
||||||
panel.build = build;
|
|
||||||
panel.update = update;
|
|
||||||
svc_ui->register_mods_panel(mod_ctx, &panel);
|
|
||||||
```
|
|
||||||
|
|
||||||
Element setters must match the element kind: `elem_set_text`/`elem_set_rml` on text rows, and `elem_set_progress` on
|
|
||||||
progress bars. `elem_set_class` sets or clears an RCSS class on any element handle, for styling via scoped or
|
|
||||||
per-window RCSS. A non-`MOD_OK` result from `build`/`update` fails your mod, as do exceptions thrown from any UI
|
|
||||||
callback.
|
|
||||||
|
|
||||||
**Controls:** `pane_add_control` adds an input row described by a `UiControlDesc`: `UI_CONTROL_BUTTON`,
|
|
||||||
`UI_CONTROL_TOGGLE`, `UI_CONTROL_NUMBER`, `UI_CONTROL_STRING`, or `UI_CONTROL_SELECT`. Values bind with callbacks or
|
|
||||||
directly to a config var.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
UiControlDesc control = UI_CONTROL_DESC_INIT;
|
|
||||||
control.kind = UI_CONTROL_TOGGLE;
|
|
||||||
control.label = "Enable rainbows";
|
|
||||||
control.help_rml = "Shown in the help pane while focused.";
|
|
||||||
control.binding = UI_BINDING_CONFIG_VAR;
|
|
||||||
control.config_var = myBoolVar; // from svc_config->register_var
|
|
||||||
svc_ui->pane_add_control(mod_ctx, leftPane, &control, nullptr);
|
|
||||||
```
|
|
||||||
|
|
||||||
`UI_BINDING_CONFIG_VAR` wires persistence, change notifications, and the modified indicator automatically. The var
|
|
||||||
type must match the control: `TOGGLE` = bool, `NUMBER` and `SELECT` = int, `STRING` = string. Float vars are not
|
|
||||||
bindable; use callbacks and convert. `help_rml` and `SELECT` option lists render in a help pane, so `SELECT` controls
|
|
||||||
are only available inside window tabs.
|
|
||||||
|
|
||||||
**Windows:** `window_push` pushes a tabbed two-pane window onto the document stack and shows it. Each tab's `build`
|
|
||||||
receives the window handle plus fresh left and right pane handles on every activation. The optional per-tab `update`
|
|
||||||
runs each frame while that tab is active. `on_closed` fires when the window is destroyed. `desc.rcss` optionally styles
|
|
||||||
that window's document only; custom windows carry the owning mod's id as a `mod-id` attribute on the window root, so
|
|
||||||
scoped RCSS can target your specific mod's windows (e.g. `window[mod-id="com.example.mod"]`).
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
UiTabDesc tabs[1] = {UI_TAB_DESC_INIT};
|
|
||||||
tabs[0].title = "Options";
|
|
||||||
tabs[0].build = build_options_tab;
|
|
||||||
|
|
||||||
UiWindowDesc desc = UI_WINDOW_DESC_INIT;
|
|
||||||
desc.tabs = tabs;
|
|
||||||
desc.tab_count = 1;
|
|
||||||
desc.on_closed = options_window_closed;
|
|
||||||
UiWindowHandle window = 0;
|
|
||||||
svc_ui->window_push(mod_ctx, &desc, &window);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Dialogs:** `dialog_push` shows a modal dialog. `variant` picks the style, `icon` optionally overrides the variant's
|
|
||||||
default icon, and actions become buttons. After an action's `on_pressed` returns, the dialog closes unless the action
|
|
||||||
sets `keep_open`. A `keep_open` action can close it later (or immediately) with `dialog_close`. Cancel fires
|
|
||||||
`on_dismiss` if present and always closes. `dialog_set_body`, `dialog_set_icon`, and `dialog_add_action` mutate a live
|
|
||||||
dialog.
|
|
||||||
|
|
||||||
**Toasts:** `push_toast` enqueues a notification. Titles and bodies accept RML. The optional `type` is applied as an
|
|
||||||
RCSS class; `warning` uses the built-in warning appearance, and mods can define their own types. A duration of 0 uses
|
|
||||||
the default of 5 seconds.
|
|
||||||
|
|
||||||
Toasts have a `mod-id` attribute, so `UI_SCOPE_OVERLAY` styles can use selectors such as
|
|
||||||
`toast[mod-id="com.example.randomizer"].success`.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
UiToastDesc toast = UI_TOAST_DESC_INIT;
|
|
||||||
toast.type = "success";
|
|
||||||
toast.title_rml = "Randomizer";
|
|
||||||
toast.body_rml = "<span>Seed loaded successfully.</span>";
|
|
||||||
toast.duration_ms = 3000;
|
|
||||||
svc_ui->push_toast(mod_ctx, &toast);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Menu bar tabs:** `register_menu_tab` adds a tab to the in-game menu bar. `on_selected` fires when the user activates
|
|
||||||
the tab: typically you'd push a window from it. The tab is removed by `unregister_menu_tab`, or automatically when the
|
|
||||||
mod is disabled.
|
|
||||||
|
|
||||||
**Custom styles:** `register_styles(scope, rcss, &handle)` applies an RCSS stylesheet to every document of a scope:
|
|
||||||
existing documents restyle immediately, and future ones pick it up when created. `register_styles_file(scope, path,
|
|
||||||
&handle)` reads the sheet from your bundle's `res/` directory. Scopes are `UI_SCOPE_PRELAUNCH`, `UI_SCOPE_WINDOW`,
|
|
||||||
`UI_SCOPE_MENU_BAR`, `UI_SCOPE_OVERLAY`, `UI_SCOPE_TOUCH_CONTROLS`, and `UI_SCOPE_GRAPHICS_TUNER`. Sheets apply after
|
|
||||||
host styles and may override them. Scope selectors tightly (use `[mod-id="..."]`!), especially for `UI_SCOPE_WINDOW`,
|
|
||||||
unless changing host UI is intentional.
|
|
||||||
|
|
||||||
### WindowService (`mods/svc/window.h`)
|
|
||||||
|
|
||||||
Allows creating new windows that can be rendered to via `GfxService`.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(WindowService, svc_window);
|
|
||||||
|
|
||||||
WindowDesc desc = WINDOW_DESC_INIT;
|
|
||||||
desc.title = "My auxiliary view";
|
|
||||||
desc.on_event = on_window_event;
|
|
||||||
WindowHandle window = 0;
|
|
||||||
svc_window->create_window(mod_ctx, &desc, &window);
|
|
||||||
```
|
|
||||||
|
|
||||||
Window callbacks run on the game thread. A close event is only a request; call `destroy_window` when the mod is ready to
|
|
||||||
close it. A window attached to a GfxService present target cannot be destroyed until that target is unregistered. Only
|
|
||||||
one present target may be attached to a WindowService window at a time.
|
|
||||||
|
|
||||||
New windows are hidden by default so a mod can finish attaching graphics before calling `show_window`.
|
|
||||||
|
|
||||||
### GfxService (`mods/svc/gfx.h`)
|
|
||||||
|
|
||||||
**Requires `add_mod(... FEATURES webgpu)`**
|
|
||||||
|
|
||||||
Direct WebGPU access at various stages of the rendering pipeline. Mods use the `wgpu*` C API (via `webgpu/webgpu.h`) for
|
|
||||||
custom draws and compute dispatches. Mods must manage their own WebGPU state, including pipelines and bind groups.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(GfxService, svc_gfx);
|
|
||||||
|
|
||||||
GfxDeviceInfo info = GFX_DEVICE_INFO_INIT;
|
|
||||||
svc_gfx->get_device_info(mod_ctx, &info);
|
|
||||||
```
|
|
||||||
|
|
||||||
`register_stage_hook` runs a game-thread callback during frame recording. The public stages are:
|
|
||||||
|
|
||||||
- `GFX_STAGE_SCENE_BEGIN`: world camera window after camera/projection/light setup
|
|
||||||
- `GFX_STAGE_SCENE_AFTER_TERRAIN`: after terrain/shadow lists, before object and translucent lists
|
|
||||||
- `GFX_STAGE_SCENE_AFTER_OPAQUE`: after sky/terrain/object opaque lists, before translucent lists
|
|
||||||
- `GFX_STAGE_FRAME_BEFORE_HUD`: 3D scene and wipe are complete, before 2D/HUD lists
|
|
||||||
- `GFX_STAGE_FRAME_AFTER_HUD`: full game scene, including HUD
|
|
||||||
|
|
||||||
Inside a stage callback, record work with `push_draw`, stream per-frame data with `push_verts`, `push_indices`,
|
|
||||||
`push_uniform`, or `push_storage`, snapshot the current frame with `resolve_pass`, and use `create_pass`/`resolve_pass`
|
|
||||||
for temporary offscreen passes. Draw callbacks run later on the render worker thread with the live
|
|
||||||
`WGPURenderPassEncoder`; they may use only their `GfxDrawContext` handles and raw `wgpu*` calls. Compute callbacks
|
|
||||||
registered with `register_compute_type` follow the same worker-thread rule and run on the frame command encoder.
|
|
||||||
|
|
||||||
All WGPU handles from the service are borrowed. Resolved target views are valid for the current frame only. GPU objects
|
|
||||||
created by a mod are owned by that mod and should be released in `mod_shutdown`.
|
|
||||||
|
|
||||||
#### External presentation
|
|
||||||
|
|
||||||
GfxService supports external presentation ("present targets") backed by either a WindowService window (via
|
|
||||||
`register_window_present_target`) or a plain `WGPUSurface` (via `register_present_target`).
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
GfxPresentTargetDesc target_desc = GFX_PRESENT_TARGET_DESC_INIT;
|
|
||||||
target_desc.render = render_auxiliary_view;
|
|
||||||
GfxPresentTargetHandle target = 0;
|
|
||||||
svc_gfx->register_window_present_target(mod_ctx, window, &target_desc, &target);
|
|
||||||
|
|
||||||
// From a stage callback:
|
|
||||||
svc_gfx->push_present(mod_ctx, target, &payload, sizeof(payload));
|
|
||||||
```
|
|
||||||
|
|
||||||
For WindowService windows, the surface is automatically reconfigured on window size changes.
|
|
||||||
For plain `WBPUSurface`s, `resize_present_target` must be used to resize.
|
|
||||||
|
|
||||||
To create a `WGPUSurface` manually, `GfxDeviceInfo` holds the `WGPUInstance` and `WGPUAdapter` which can be used with
|
|
||||||
`wgpuInstanceCreateSurface` and a chained `WGPUSurfaceSource*` struct.
|
|
||||||
|
|
||||||
`push_present` must be called every frame from a GfxService stage callback. If surface was lost, `push_present` returns
|
|
||||||
`MOD_ERROR`. Unregister and re-register the target before trying again.
|
|
||||||
|
|
||||||
### CameraService (`mods/svc/camera.h`)
|
|
||||||
|
|
||||||
Converts a game view provided by a render callback into WebGPU-convention camera data. Matrix fields are column-major
|
|
||||||
`float[16]` values using the matrix * column-vector convention (transpose of the game's row-major `Mtx`/`Mtx44` layout),
|
|
||||||
ready to copy into WGSL `mat4x4f` uniforms.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(CameraService, svc_camera);
|
|
||||||
|
|
||||||
CameraInfo camera = CAMERA_INFO_INIT;
|
|
||||||
if (svc_camera->get_camera(mod_ctx, game_view, &camera) == MOD_OK) {
|
|
||||||
// camera.view_from_world, camera.proj_from_view, camera.eye, ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`get_camera` returns `MOD_UNAVAILABLE` while the view is not a valid perspective camera, such as before the
|
|
||||||
first in-game frame. Projection matrices match the renderer's WebGPU clip convention and renderer depth convention
|
|
||||||
(reversed-Z by default).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Hooking Game Functions
|
|
||||||
|
|
||||||
**Requires `add_mod(... FEATURES game)`**
|
|
||||||
|
|
||||||
Mods may hook the vast majority of game functions, including file-local static, private and virtual functions.
|
|
||||||
`mods/svc/hook.hpp` provides typed helpers over the hook service:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include "mods/svc/hook.hpp"
|
|
||||||
|
|
||||||
IMPORT_SERVICE(HookService, svc_hook);
|
|
||||||
|
|
||||||
DEFINE_HOOK(&daAlink_c::posMove, LinkPosMove);
|
|
||||||
DEFINE_HOOK(&daAlink_c::execute, LinkExecute);
|
|
||||||
```
|
|
||||||
|
|
||||||
Every hook target must be **declared** at namespace scope with `DEFINE_HOOK` (a target you can name in C++) or
|
|
||||||
`DEFINE_HOOK_SYMBOL` (a symbol name).
|
|
||||||
|
|
||||||
### Pre-hooks
|
|
||||||
|
|
||||||
Run before the original. Return `HOOK_SKIP_ORIGINAL` to cancel it (post-hooks still run).
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
HookAction on_pos_move_pre(ModContext*, void* args, void* retval, void* userdata) {
|
|
||||||
daAlink_c* link = mods::arg<daAlink_c*>(args, 0); // arg 0 is `this`
|
|
||||||
if (link->shape_angle.y > 10000) {
|
|
||||||
return HOOK_SKIP_ORIGINAL;
|
|
||||||
}
|
|
||||||
return HOOK_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
mods::hook::add_pre<LinkPosMove>(on_pos_move_pre);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Post-hooks
|
|
||||||
|
|
||||||
Run after the original (or after a replace-hook, or after a cancelled original). `retval` points to the return value,
|
|
||||||
if any.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
void on_pos_move_post(ModContext*, void* args, void* retval, void* userdata) { ... }
|
|
||||||
|
|
||||||
mods::hook::add_post<LinkPosMove>(on_pos_move_post);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Replace-hooks
|
|
||||||
|
|
||||||
Substitute the original entirely. Call through to it via the declaration's `g_orig` if needed:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
void on_execute_replace(ModContext*, void* args, void* retval, void*) {
|
|
||||||
int result = LinkExecute::g_orig(mods::arg<daAlink_c*>(args, 0));
|
|
||||||
if (retval != nullptr) {
|
|
||||||
*static_cast<int*>(retval) = result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mods::hook::replace<LinkExecute>(on_execute_replace);
|
|
||||||
```
|
|
||||||
|
|
||||||
By default a second replace-hook on the same function is a conflict; `HookOptions` (`replace_policy`, `priority`,
|
|
||||||
`userdata`) controls this and callback ordering. Multiple mods can attach pre/post hooks to the same function
|
|
||||||
independently.
|
|
||||||
|
|
||||||
### Hooking by name
|
|
||||||
|
|
||||||
Functions you can't name in C++ (file-local statics, private class members, anything not in a header) can be hooked by
|
|
||||||
symbol name instead. You must supply the signature along with the name.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
DEFINE_HOOK_SYMBOL("daAlink_hookshotAtHitCallBack",
|
|
||||||
void(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*), HookshotHit);
|
|
||||||
|
|
||||||
mods::hook::add_pre<HookshotHit>(on_hookshot_hit_pre);
|
|
||||||
...
|
|
||||||
HookshotHit::g_orig(link, atObjInf, target, tgObjInf); // call through to the original
|
|
||||||
```
|
|
||||||
|
|
||||||
Class member functions must include `Class*` as the first argument.
|
|
||||||
|
|
||||||
Two spellings work on every platform:
|
|
||||||
|
|
||||||
- **Display names** (`daAlink_c::posMove`, `fapGm_Before`): the qualified name with no parameter list. They carry no
|
|
||||||
signature, so overload sets (and file-local statics sharing a name) return `MOD_CONFLICT`.
|
|
||||||
- **Decorated names** (`_ZN9daAlink_c7posMoveEv` / `?posMove@daAlink_c@@...`): the platform's mangled spelling in
|
|
||||||
dlsym convention (no Mach-O leading underscore). The escape hatch for overloads.
|
|
||||||
|
|
||||||
Installing fails with `MOD_UNAVAILABLE` when it didn't resolve (missing, ambiguous, or no symbol manifest). Unlike
|
|
||||||
`DEFINE_HOOK`, the signature is **not** compiler-checked: a mismatched signature will corrupt the
|
|
||||||
call.
|
|
||||||
|
|
||||||
### Reading and writing arguments
|
|
||||||
|
|
||||||
`args` is an array of pointers to the arguments. For member functions, index 0 is `this`; parameters follow in
|
|
||||||
declaration order.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
T value = mods::arg<T>(args, n); // copy
|
|
||||||
T& ref = mods::arg_ref<T>(args, n); // read/write reference
|
|
||||||
```
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
DEFINE_HOOK(fopAcM_createItem, CreateItem);
|
|
||||||
|
|
||||||
// fpc_ProcID fopAcM_createItem(..., int itemNo, ...): turn heart drops into green rupees
|
|
||||||
HookAction on_create_item_pre(ModContext*, void* args, void*, void*) {
|
|
||||||
int& itemNo = mods::arg_ref<int>(args, 1);
|
|
||||||
if (itemNo == dItemNo_HEART_e) {
|
|
||||||
itemNo = dItemNo_GREEN_RUPEE_e;
|
|
||||||
}
|
|
||||||
return HOOK_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
mods::hook::add_pre<CreateItem>(on_create_item_pre);
|
|
||||||
```
|
|
||||||
|
|
||||||
For reference parameters (e.g. `const cXyz& pos`), `arg_ref<cXyz>` yields a direct reference.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Asset Overlays
|
|
||||||
|
|
||||||
Files placed under `overlay/` in the `.dusk` archive override game files at the corresponding path, equivalent to
|
|
||||||
replacing files in the .iso. This requires no code: an archive with just `mod.json` and `overlay/` is a complete mod.
|
|
||||||
|
|
||||||
Files placed under `textures/` register as texture replacements, and act just like the user's general
|
|
||||||
`texture_replacements/` directory: Dolphin-style naming, matched by texture hash
|
|
||||||
(`tex1_{w}x{h}_{texhash}[_{tluthash}]_{fmt}.dds|.png`, `$` as a hash wildcard). Subdirectories are scanned recursively;
|
|
||||||
only the filename needs to match.
|
|
||||||
|
|
||||||
Both mechanisms are tied to the mod's lifecycle: disabling the mod removes its overrides (files revert to the disc
|
|
||||||
contents on their next open; added files stop existing), and reloading serves the new bundle's content. However, game
|
|
||||||
data the engine already read stays as-is until it is loaded again, which may require a scene change or, in the worst
|
|
||||||
case, a full restart. Texture replacements usually take effect immediately.
|
|
||||||
|
|
||||||
If multiple sources replace the same file or texture, the last one wins: runtime registrations override static
|
|
||||||
`textures/` or `overlay/` files, and later-loaded mods override earlier ones. Cross-mod conflicts log warnings.
|
|
||||||
**All** mod-provided texture replacements override the user's `texture_replacements/`.
|
|
||||||
|
|
||||||
To configure overlays and texture replacements at runtime instead, see [OverlayService](#overlayservice-modssvcoverlayh)
|
|
||||||
and [TextureService](#textureservice-modssvctextureh).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Runtime Lifecycle
|
|
||||||
|
|
||||||
Mods can be disabled, re-enabled, and reloaded at runtime without restarting the game (the enabled state persists as the
|
|
||||||
`mod.<escaped id>.enabled` config var). Write your mod assuming this happens:
|
|
||||||
|
|
||||||
- **Disable** calls `mod_shutdown`, removes your hooks, services, overlays, and texture replacements (both static and
|
|
||||||
runtime-registered), and unloads your library.
|
|
||||||
- **Enable** and **Reload** load a *fresh copy* of your library, imports are re-resolved, and `mod_initialize` runs
|
|
||||||
again. You never see a second `mod_initialize` on the same image, so just make `mod_shutdown` release anything the
|
|
||||||
loader doesn't manage for you (threads, files, game-side state you mutated).
|
|
||||||
- **Reload** additionally re-reads the `.dusk` from disk, picking up a rebuilt library and changed assets. This is the
|
|
||||||
fast iteration loop during development: rebuild, click Reload.
|
|
||||||
|
|
||||||
**Dependents restart too.** Disabling or reloading a mod that exports services shuts down the mods importing them
|
|
||||||
first (in reverse dependency order) and brings them back afterward. A mod whose *required* provider is disabled stays
|
|
||||||
suspended and resumes automatically when the provider returns. Mods with an *optional* import of a disabled provider
|
|
||||||
restart with that import null.
|
|
||||||
|
|
||||||
**One caution for hooks:** lifecycle changes are applied between frames, which is safe for hooks on functions
|
|
||||||
that return every frame (effectively everything you'd normally hook). Avoid hooking a function that stays on
|
|
||||||
the stack for the whole session (e.g. the outermost main loop); a mod that does cannot be safely unloaded.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
Service calls report failure through `ModResult` return values (`MOD_OK`, `MOD_UNAVAILABLE`,
|
|
||||||
`MOD_INVALID_ARGUMENT`, ...). Lifecycle exports additionally receive a `ModError*`: fill it (e.g. with
|
|
||||||
`mods::set_error(error, code, "message")`) and return the code, and the loader disables the mod and shows the
|
|
||||||
message to the user.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
MOD_EXPORT ModResult mod_initialize(ModError* error) {
|
|
||||||
if (!load_my_data()) {
|
|
||||||
return mods::set_error(error, MOD_ERROR, "failed to load data");
|
|
||||||
}
|
|
||||||
return MOD_OK;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Throwing exceptions out of lifecycle functions also disables the mod (they are caught by the loader), but prefer
|
|
||||||
explicit results.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Advanced
|
|
||||||
|
|
||||||
### Exporting Services
|
|
||||||
|
|
||||||
Mods may export services of their own, permitting framework mods and cross-mod integration. Define the interface in a
|
|
||||||
header both mods share:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
// my_mod_api.h
|
|
||||||
#include "mods/api.h"
|
|
||||||
|
|
||||||
#define MY_MOD_SERVICE_ID "com.example.my_mod.api"
|
|
||||||
#define MY_MOD_SERVICE_MAJOR 1u
|
|
||||||
#define MY_MOD_SERVICE_MINOR 0u
|
|
||||||
|
|
||||||
typedef struct MyModService {
|
|
||||||
ServiceHeader header;
|
|
||||||
ModResult (*do_thing)(ModContext* ctx, int value);
|
|
||||||
} MyModService;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#include "mods/service.hpp"
|
|
||||||
template <>
|
|
||||||
struct mods::ServiceTraits<MyModService> {
|
|
||||||
static constexpr const char* id = MY_MOD_SERVICE_ID;
|
|
||||||
static constexpr uint16_t major_version = MY_MOD_SERVICE_MAJOR;
|
|
||||||
static constexpr uint16_t minor_version = MY_MOD_SERVICE_MINOR;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
```
|
|
||||||
|
|
||||||
**Provider:**
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ModResult do_thing(ModContext* ctx, int value) { ... }
|
|
||||||
|
|
||||||
constexpr MyModService g_service{
|
|
||||||
.header = SERVICE_HEADER(MyModService, MY_MOD_SERVICE_MAJOR, MY_MOD_SERVICE_MINOR),
|
|
||||||
.do_thing = do_thing,
|
|
||||||
};
|
|
||||||
EXPORT_SERVICE(g_service);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Consumer:**
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(MyModService, svc_my_mod);
|
|
||||||
// or IMPORT_OPTIONAL_SERVICE if the dependency is optional
|
|
||||||
|
|
||||||
svc_my_mod->do_thing(mod_ctx, 42);
|
|
||||||
```
|
|
||||||
|
|
||||||
The loader registers all exports before resolving any imports, so declaration order between mods doesn't matter. Note
|
|
||||||
that the `ctx` a provider receives identifies the *calling* mod.
|
|
||||||
|
|
||||||
#### Dependencies between mods
|
|
||||||
|
|
||||||
Service imports are also dependency declarations: the loader initializes mods in dependency order, so by the time your
|
|
||||||
`mod_initialize` runs, every mod you import services from (required *or* optional) has already finished its own
|
|
||||||
`mod_initialize`. This includes deferred services: a service the provider publishes during its initialization resolves
|
|
||||||
into your import slot just like a static export.
|
|
||||||
|
|
||||||
Consequences of that contract:
|
|
||||||
|
|
||||||
- If a provider fails to load, every mod that *requires* one of its services is disabled too, with an error naming the
|
|
||||||
provider. Optional imports of a failed provider simply resolve to `NULL`.
|
|
||||||
- Mods whose **required** imports form a cycle all fail to load. If the cycle runs through an **optional** import, the
|
|
||||||
loader breaks it there: the optional import still resolves, but its provider may not be initialized yet when you run.
|
|
||||||
- `svc_host->get_service(...)` is outside this system. It sees whatever is published at call time and gives no
|
|
||||||
initialization-order guarantee, which also makes it the escape hatch for intentionally cyclic designs.
|
|
||||||
|
|
||||||
Mods shut down in reverse initialization order, so services you import remain safe to call from `mod_shutdown`.
|
|
||||||
|
|
||||||
Rules for providers:
|
|
||||||
|
|
||||||
- Service IDs are global and use reverse-DNS names (e.g. `com.mydomain.mod.service`)
|
|
||||||
- Every function pointer covered by your declared minor version must be populated.
|
|
||||||
- Within a major version, only append fields; never reorder, remove, or repurpose them. Breaking changes require a major
|
|
||||||
bump (which is, in effect, a new service).
|
|
||||||
- Only one provider per `(id, major)` pair may be registered; duplicates are load errors.
|
|
||||||
|
|
||||||
For services whose construction can't happen at static-init time, declare the export with `EXPORT_DEFERRED_SERVICE(...)`
|
|
||||||
and publish the pointer later via `svc_host->publish_service(...)`. Consumers can fetch services dynamically with
|
|
||||||
`svc_host->get_service(...)`; prefer manifest imports whenever possible, since they give the loader dependency
|
|
||||||
information and fail fast with good errors.
|
|
||||||
|
|
||||||
### Native Runtime Libraries
|
|
||||||
|
|
||||||
`RUNTIME_LIBRARIES` passed to `add_mod` are packaged beside the mod's native module in `lib/<platform>/`. Dusklight
|
|
||||||
extracts the whole directory before loading the mod, so libraries linked by the mod resolve normally. The SDK links the
|
|
||||||
mod itself with `$ORIGIN` on Linux and `@loader_path` on Apple platforms; runtime libraries with their own non-system
|
|
||||||
dependencies must also be built with origin-relative lookup paths. On Windows, Dusklight uses an isolated DLL search
|
|
||||||
rooted at this directory.
|
|
||||||
|
|
||||||
```cmake
|
|
||||||
add_mod(my_mod
|
|
||||||
SOURCES src/mod.cpp
|
|
||||||
MOD_JSON mod.json
|
|
||||||
RUNTIME_LIBRARIES "${VENDOR_RUNTIME_LIBRARY}")
|
|
||||||
```
|
|
||||||
|
|
||||||
SDKs that load plugins by directory can pass them the absolute runtime path from the current HostService:
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
IMPORT_SERVICE(HostService, svc_host);
|
|
||||||
|
|
||||||
const char* nativeDir = svc_host->native_dir(mod_ctx); // read-only
|
|
||||||
```
|
|
||||||
|
|
||||||
Libraries loaded explicitly by the mod remain its responsibility: stop their threads and unload them during
|
|
||||||
`mod_shutdown`. Do not write into `native_dir`; use `mod_dir` for writable state. Native library namespaces are
|
|
||||||
process-wide on some platforms, so two mods cannot safely assume that incompatible libraries with the same filename
|
|
||||||
will remain isolated.
|
|
||||||
Vendored
+1
-1
Submodule extern/aurora updated: 0bddb86249...9087a409da
+164
-98
@@ -1411,105 +1411,71 @@ 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/ImGuiMenuRandomizer.cpp
|
||||||
|
src/dusk/imgui/ImGuiMenuRandomizer.hpp
|
||||||
|
src/dusk/imgui/ImGuiArchipelagoDebug.cpp
|
||||||
|
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 +1484,11 @@ 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/cosmetics.hpp
|
||||||
|
src/dusk/ui/cosmetics.cpp
|
||||||
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 +1497,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 +1510,8 @@ 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/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 +1526,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 +1538,119 @@ 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/ui/rando_config.cpp
|
||||||
src/dusk/update_check.hpp
|
src/dusk/ui/rando_config.hpp
|
||||||
|
src/dusk/ui/rando_seed_generation.cpp
|
||||||
|
src/dusk/ui/rando_seed_generation.hpp
|
||||||
|
src/dusk/ui/archi_connect_modal.cpp
|
||||||
|
src/dusk/ui/archi_connect_modal.hpp
|
||||||
|
src/dusk/achievements.cpp
|
||||||
|
src/dusk/iso_validate.cpp
|
||||||
|
src/dusk/livesplit.cpp
|
||||||
|
src/dusk/offset_ptr.cpp
|
||||||
|
src/dusk/OSContext.cpp
|
||||||
|
src/dusk/OSReport.cpp
|
||||||
|
src/dusk/OSThread.cpp
|
||||||
|
src/dusk/OSMutex.cpp
|
||||||
|
src/dusk/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/dusk/cosmetics/color_utils.hpp
|
||||||
src/helpers/offset_ptr.cpp
|
src/dusk/cosmetics/color_utils.cpp
|
||||||
src/helpers/string.cpp
|
src/dusk/cosmetics/texture_utils.hpp
|
||||||
|
src/dusk/cosmetics/texture_utils.cpp
|
||||||
|
# Randomizer files
|
||||||
|
src/dusk/randomizer/game/flags.cpp
|
||||||
|
src/dusk/randomizer/game/flags.h
|
||||||
|
src/dusk/randomizer/game/messages.cpp
|
||||||
|
src/dusk/randomizer/game/messages.hpp
|
||||||
|
src/dusk/randomizer/game/stages.cpp
|
||||||
|
src/dusk/randomizer/game/stages.h
|
||||||
|
src/dusk/randomizer/game/tools.cpp
|
||||||
|
src/dusk/randomizer/game/tools.h
|
||||||
|
src/dusk/randomizer/game/verify_item_functions.cpp
|
||||||
|
src/dusk/randomizer/game/verify_item_functions.h
|
||||||
|
src/dusk/randomizer/game/randomizer_context.cpp
|
||||||
|
src/dusk/randomizer/game/randomizer_context.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/area.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/area.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/dungeon.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/dungeon.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/entrance.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/entrance.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/entrance_shuffle.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/entrance_shuffle.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/fill.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/fill.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/bits.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/bits.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/flatten.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/flatten.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/simplify_algebraic.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/flatten/simplify_algebraic.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/hints.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/hints.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/item.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/item.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/item_pool.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/item_pool.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/location.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/location.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/plandomizer.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/plandomizer.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/requirement.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/requirement.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/search.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/search.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/spoiler_log.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/spoiler_log.hpp
|
||||||
|
src/dusk/randomizer/generator/logic/world.cpp
|
||||||
|
src/dusk/randomizer/generator/logic/world.hpp
|
||||||
|
src/dusk/randomizer/generator/randomizer.cpp
|
||||||
|
src/dusk/randomizer/generator/randomizer.hpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/config.cpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/config.hpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/packed_bits.hpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/seed.cpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/seed.hpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/settings.cpp
|
||||||
|
src/dusk/randomizer/generator/seedgen/settings.hpp
|
||||||
|
src/dusk/randomizer/generator/test/test.cpp
|
||||||
|
src/dusk/randomizer/generator/test/test.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/base64pp.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/color.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/color.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/crc32.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/common.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/common.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/container.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/endian.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/endian.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/exception.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/file.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/file.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/general.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/log.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/log.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/math.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/path.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/path.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/platform.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/platform.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/random.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/random.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/string.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/string.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/text.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/text.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/thread_local.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/time.cpp
|
||||||
|
src/dusk/randomizer/generator/utility/time.hpp
|
||||||
|
src/dusk/randomizer/generator/utility/yaml.hpp
|
||||||
|
# Archipelago Files
|
||||||
|
src/dusk/archipelago/archipelago_context.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(DUSK_HTTP_BACKEND_FILES
|
set(DUSK_HTTP_BACKEND_FILES
|
||||||
|
|||||||
@@ -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,16 +165,19 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
dusklight =
|
dusklight =
|
||||||
pkgs.stdenv.mkDerivation {
|
if !aurora then
|
||||||
pname = "dusklight";
|
throw needSubmodules
|
||||||
version = versionSuffix;
|
else
|
||||||
src = ./.;
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "dusklight";
|
||||||
|
version = versionSuffix;
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
postUnpack = ''
|
postUnpack = ''
|
||||||
chmod -R u+w "$sourceRoot"
|
chmod -R u+w "$sourceRoot"
|
||||||
substituteInPlace "$sourceRoot/extern/aurora/CMakeLists.txt" \
|
substituteInPlace "$sourceRoot/extern/aurora/CMakeLists.txt" \
|
||||||
--replace-warn "add_subdirectory(tests)" ""
|
--replace-warn "add_subdirectory(tests)" ""
|
||||||
'';
|
'';
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
pkgs.cmake
|
pkgs.cmake
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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() {}
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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*);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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*);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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() {}
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
bool isResetting() { return mResettingFlag; }
|
bool isResetting() { return mResettingFlag; }
|
||||||
|
|
||||||
static Z2AudioMgr* getInterface() { return mAudioMgrPtr; }
|
static Z2AudioMgr* getInterface() { return mAudioMgrPtr; }
|
||||||
static DUSK_GAME_DATA Z2AudioMgr* mAudioMgrPtr;
|
static Z2AudioMgr* mAudioMgrPtr;
|
||||||
|
|
||||||
/* 0x0514 */ virtual bool startSound(JAISoundID soundID, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr);
|
/* 0x0514 */ virtual bool startSound(JAISoundID soundID, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr);
|
||||||
/* 0x0518 */ bool mResettingFlag;
|
/* 0x0518 */ bool mResettingFlag;
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -46,8 +46,13 @@ public:
|
|||||||
s32 getSeLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 0); }
|
s32 getSeLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 0); }
|
||||||
s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); }
|
s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); }
|
||||||
u8 getDemoSeWaveNum() { return loadedDemoWave; }
|
u8 getDemoSeWaveNum() { return loadedDemoWave; }
|
||||||
|
#if TARGET_PC
|
||||||
|
u8 getLoadedSeWave_1() { return loadedSeWave_1;}
|
||||||
|
u8 getLoadedSeWave_2() { return loadedSeWave_2;}
|
||||||
|
#endif
|
||||||
|
|
||||||
// private:
|
|
||||||
|
private:
|
||||||
/* 0x00 */ JAISoundID BGM_ID;
|
/* 0x00 */ JAISoundID BGM_ID;
|
||||||
/* 0x04 */ int sceneNum;
|
/* 0x04 */ int sceneNum;
|
||||||
/* 0x08 */ int timer;
|
/* 0x08 */ int timer;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
+135
-127
@@ -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;
|
||||||
@@ -3912,21 +3912,27 @@ public:
|
|||||||
u16 getReadyItem() { return dComIfGp_getSelectItem(mSelectItemId); }
|
u16 getReadyItem() { return dComIfGp_getSelectItem(mSelectItemId); }
|
||||||
|
|
||||||
static u32 getOtherHeapSize() { return 0xF0A60; }
|
static u32 getOtherHeapSize() { return 0xF0A60; }
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
u16 getEventId() { return mMsgFlow.getEventId(); }
|
||||||
|
|
||||||
static DUSK_GAME_DATA daAlink_BckData const m_mainBckShield[20];
|
bool checkSwimming() {return checkModeFlg(MODE_SWIMMING);}
|
||||||
static DUSK_GAME_DATA daAlink_BckData const m_mainBckSword[5];
|
#endif
|
||||||
static DUSK_GAME_DATA daAlink_BckData const m_mainBckFishing[28];
|
|
||||||
static DUSK_GAME_DATA daAlink_AnmData const m_anmDataTable[ANM_MAX];
|
|
||||||
static DUSK_GAME_DATA daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX];
|
|
||||||
static DUSK_GAME_DATA daAlink_FaceTexData const m_faceTexDataTable[];
|
|
||||||
static DUSK_GAME_DATA Vec const m_handLeftOutSidePos;
|
|
||||||
static DUSK_GAME_DATA Vec const m_handRightOutSidePos;
|
|
||||||
static DUSK_GAME_DATA Vec const m_handLeftInSidePos;
|
|
||||||
static DUSK_GAME_DATA Vec const m_handRightInSidePos;
|
|
||||||
|
|
||||||
static DUSK_GAME_DATA const daAlink_procInitTable m_procInitTable[];
|
static daAlink_BckData const m_mainBckShield[20];
|
||||||
static DUSK_GAME_DATA daAlink_procFunc m_demoInitTable[];
|
static daAlink_BckData const m_mainBckSword[5];
|
||||||
static DUSK_GAME_DATA const EffParamProc m_fEffParamProc[];
|
static daAlink_BckData const m_mainBckFishing[28];
|
||||||
|
static daAlink_AnmData const m_anmDataTable[ANM_MAX];
|
||||||
|
static daAlink_WlAnmData const m_wlAnmDataTable[WANM_MAX];
|
||||||
|
static daAlink_FaceTexData const m_faceTexDataTable[];
|
||||||
|
static Vec const m_handLeftOutSidePos;
|
||||||
|
static Vec const m_handRightOutSidePos;
|
||||||
|
static Vec const m_handLeftInSidePos;
|
||||||
|
static Vec const m_handRightInSidePos;
|
||||||
|
|
||||||
|
static const daAlink_procInitTable m_procInitTable[];
|
||||||
|
static daAlink_procFunc m_demoInitTable[];
|
||||||
|
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 +4655,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 +4706,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 +4752,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 +4798,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 +4840,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 +4870,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 +4904,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 +4942,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 +4970,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 +5021,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 +5083,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 +5110,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 +5152,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 +5203,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 +5231,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 +5279,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 +5313,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 +5349,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 +5386,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 +5463,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 +5519,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 +5556,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 +5601,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 +5640,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 +5695,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 +5725,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 +5754,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 +5780,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 +5809,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 +5845,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 +5892,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 +5926,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 +5965,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 +5998,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 +6033,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 +6063,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 +6099,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 +6146,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 +6198,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 +6237,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 +6282,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 +6318,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 +6362,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 +6397,8 @@ public:
|
|||||||
|
|
||||||
class daAlinkHIO_huLight_c0 {
|
class daAlinkHIO_huLight_c0 {
|
||||||
public:
|
public:
|
||||||
static DUSK_GAME_DATA daAlinkHIO_huLight_c1 const m;
|
static daAlinkHIO_huLight_c1 IF_NOT_DUSK(const) m;
|
||||||
|
IF_DUSK(static daAlinkHIO_huLight_c1 const original;)
|
||||||
};
|
};
|
||||||
|
|
||||||
class daAlinkHIO_wlLight_c1 {
|
class daAlinkHIO_wlLight_c1 {
|
||||||
@@ -6410,7 +6417,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 +6436,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 +6472,8 @@ public:
|
|||||||
|
|
||||||
class daAlinkHIO_kandelaar_c0 {
|
class daAlinkHIO_kandelaar_c0 {
|
||||||
public:
|
public:
|
||||||
static DUSK_GAME_DATA daAlinkHIO_kandelaar_c1 const m;
|
static daAlinkHIO_kandelaar_c1 IF_NOT_DUSK(const) m;
|
||||||
|
IF_DUSK(static daAlinkHIO_kandelaar_c1 const original;)
|
||||||
};
|
};
|
||||||
|
|
||||||
class daAlinkHIO_kandelaar_c : public daAlinkHIO_data_c {
|
class daAlinkHIO_kandelaar_c : public daAlinkHIO_data_c {
|
||||||
@@ -6504,7 +6512,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 +6538,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 +6578,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 +6616,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 +6672,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 +6702,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 +6730,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 +6777,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 +6810,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 +6858,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 +6917,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 +6957,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 +6995,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 +7070,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 +7146,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 +7189,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 +7228,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 +7260,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 +7294,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 +7324,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 +7369,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 +7398,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 +7434,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 +7473,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 +7505,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 +7540,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 +7574,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 +7607,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 +7634,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 +7684,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 +7719,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 +7755,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 +7792,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 +7827,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 +7868,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 +7896,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 +7932,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 +7969,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 +8009,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 +8054,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 +8101,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 +8137,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 +8194,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 +8223,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 +8253,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 +8308,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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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*);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class daNpc_Grd_Param_c {
|
|||||||
public:
|
public:
|
||||||
virtual ~daNpc_Grd_Param_c() {}
|
virtual ~daNpc_Grd_Param_c() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA daNpc_Grd_HIOParam const m;
|
static daNpc_Grd_HIOParam const m;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -81,8 +81,8 @@ public:
|
|||||||
BOOL ECut_nodToGrz(int);
|
BOOL ECut_nodToGrz(int);
|
||||||
void adjustShapeAngle() {}
|
void adjustShapeAngle() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mEvtCutNameList[2];
|
static char DUSK_CONST* DUSK_CONST mEvtCutNameList[2];
|
||||||
static DUSK_GAME_DATA cutFunc DUSK_CONST mEvtCutList[2];
|
static cutFunc DUSK_CONST mEvtCutList[2];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0xB48 */ Z2Creature mSound;
|
/* 0xB48 */ Z2Creature mSound;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class daNpc_grM_Param_c {
|
|||||||
public:
|
public:
|
||||||
virtual ~daNpc_grM_Param_c() {}
|
virtual ~daNpc_grM_Param_c() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA daNpc_grM_HIOParam const m;
|
static daNpc_grM_HIOParam const m;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -131,8 +131,8 @@ public:
|
|||||||
BOOL checkChangeJoint(int param_0) { return param_0 == JNT_HEAD; }
|
BOOL checkChangeJoint(int param_0) { return param_0 == JNT_HEAD; }
|
||||||
BOOL checkRemoveJoint(int param_0) { return param_0 == JNT_MOUTH; }
|
BOOL checkRemoveJoint(int param_0) { return param_0 == JNT_MOUTH; }
|
||||||
|
|
||||||
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList[2];
|
static char DUSK_CONST* DUSK_CONST mCutNameList[2];
|
||||||
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[2];
|
static cutFunc DUSK_CONST mCutList[2];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x0F7C */ NPC_GRM_HIO_CLASS* mpHIO;
|
/* 0x0F7C */ NPC_GRM_HIO_CLASS* mpHIO;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class daNpc_grMC_Param_c {
|
|||||||
public:
|
public:
|
||||||
virtual ~daNpc_grMC_Param_c() {}
|
virtual ~daNpc_grMC_Param_c() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA daNpc_grMC_HIOParam const m;
|
static daNpc_grMC_HIOParam const m;
|
||||||
};
|
};
|
||||||
|
|
||||||
class daNpc_grMC_c : public dShopSystem_c {
|
class daNpc_grMC_c : public dShopSystem_c {
|
||||||
@@ -124,8 +124,8 @@ public:
|
|||||||
BOOL checkRemoveJoint(int param_1) { return param_1 == JNT_MOUTH; }
|
BOOL checkRemoveJoint(int param_1) { return param_1 == JNT_MOUTH; }
|
||||||
u16 getEyeballMaterialNo() { return 1; };
|
u16 getEyeballMaterialNo() { return 1; };
|
||||||
|
|
||||||
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mCutNameList;
|
static char DUSK_CONST* DUSK_CONST mCutNameList;
|
||||||
static DUSK_GAME_DATA cutFunc DUSK_CONST mCutList[1];
|
static cutFunc DUSK_CONST mCutList[1];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x0F7C */ NPC_GRMC_HIO_CLASS* mpHIO;
|
/* 0x0F7C */ NPC_GRMC_HIO_CLASS* mpHIO;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class daNpc_grO_Param_c {
|
|||||||
public:
|
public:
|
||||||
virtual ~daNpc_grO_Param_c() {}
|
virtual ~daNpc_grO_Param_c() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA daNpc_grO_HIOParam const m;
|
static daNpc_grO_HIOParam const m;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -85,8 +85,8 @@ public:
|
|||||||
int test(void*);
|
int test(void*);
|
||||||
void adjustShapeAngle() {}
|
void adjustShapeAngle() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA char DUSK_CONST* DUSK_CONST mEvtCutNameList[3];
|
static char DUSK_CONST* DUSK_CONST mEvtCutNameList[3];
|
||||||
static DUSK_GAME_DATA cutFunc DUSK_CONST mEvtCutList[3];
|
static cutFunc DUSK_CONST mEvtCutList[3];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0xB48 */ Z2Creature mSound;
|
/* 0xB48 */ Z2Creature mSound;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class daNpc_grR_Param_c {
|
|||||||
public:
|
public:
|
||||||
virtual ~daNpc_grR_Param_c() {}
|
virtual ~daNpc_grR_Param_c() {}
|
||||||
|
|
||||||
static DUSK_GAME_DATA daNpc_grR_HIOParam const m;
|
static daNpc_grR_HIOParam const m;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -83,8 +83,8 @@ public:
|
|||||||
int test(void*);
|
int test(void*);
|
||||||
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 cutFunc DUSK_CONST mEvtCutList[1];
|
static cutFunc 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
Reference in New Issue
Block a user