mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-04 11:19:58 -04:00
Compare commits
637 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d204de47bf | |||
| 23dc0cdbf0 | |||
| 861efaa053 | |||
| 8e41e0195e | |||
| e9359a92d7 | |||
| 0c78376ba8 | |||
| 8c001f7968 | |||
| ef43b94370 | |||
| 76efa02beb | |||
| aeeb1ccdd2 | |||
| 93c7d0d64d | |||
| 1b76b2650c | |||
| 45196886b0 | |||
| 80af15c95b | |||
| 4c5e3b933e | |||
| 5eddcb9653 | |||
| 6dd50c955c | |||
| 4db65b9845 | |||
| ede6827369 | |||
| 2c9b20841d | |||
| 2b9ed729a3 | |||
| f39195c5e0 | |||
| a0f42c0c80 | |||
| d1e9d5af2f | |||
| 61b2e6ce4d | |||
| e73244bca5 | |||
| a4f25ecb28 | |||
| 39b546b81f | |||
| 1bd4585994 | |||
| c896bb39ea | |||
| 3366613354 | |||
| 79b1f4ab4d | |||
| 157f4f9df2 | |||
| 9d5d8dd13a | |||
| b0f1fbee1c | |||
| 40e3f7d057 | |||
| 764fc0b96f | |||
| 1b4a842eec | |||
| 08c7261262 | |||
| 07b440a1c9 | |||
| e7ab978a30 | |||
| 3a02e129e7 | |||
| 93c6106770 | |||
| b08d994e32 | |||
| 0665a78c84 | |||
| 4db8b51f24 | |||
| 800da8dbff | |||
| a0ecdb1735 | |||
| c948bffd32 | |||
| 4bcf4ca354 | |||
| bfd9917ca1 | |||
| 7f6212f9b7 | |||
| 80245387f3 | |||
| 0a1fea4bc7 | |||
| 4ec7b01213 | |||
| 5187fe90c3 | |||
| a86fa9c162 | |||
| 4ec8c1aaee | |||
| 97d032f8b5 | |||
| 286532904a | |||
| 04b5861f29 | |||
| 453e958068 | |||
| e7d2fbcc0b | |||
| 8f71c70d14 | |||
| df23edcb69 | |||
| daff157027 | |||
| 0c23bd4332 | |||
| 7562486449 | |||
| 5e08b810fc | |||
| c66cccf660 | |||
| 3b1118229b | |||
| 491da372a1 | |||
| a2f463d146 | |||
| 63b3ce4849 | |||
| 8280ac00a0 | |||
| 45ef0d72b1 | |||
| ad9c460ec9 | |||
| 23dc9bc39a | |||
| bf23d44389 | |||
| d0b9b6d10f | |||
| 2f83753260 | |||
| eeb0ad77a4 | |||
| 594cadcf7d | |||
| 4290726691 | |||
| 80dd5ff278 | |||
| 08efb9a3cf | |||
| d8a1dd1da4 | |||
| 13dd3c3932 | |||
| dd7885da9c | |||
| 5a05433a2b | |||
| c3ff3884d7 | |||
| e42c4d3174 | |||
| 06c77a6818 | |||
| 4d4a80891f | |||
| 71c892368d | |||
| d2a1dda523 | |||
| 78179eb93f | |||
| 34e10d3844 | |||
| 65e8577253 | |||
| a4fcc10f5f | |||
| a2c2988666 | |||
| abec043249 | |||
| 699d069b0a | |||
| 4d67033ff8 | |||
| 84ffd67622 | |||
| 1c85ee63eb | |||
| 81c7213993 | |||
| be82e606b2 | |||
| 44da1a9f7d | |||
| d0f8ea56f9 | |||
| e472b36cef | |||
| 3934e09c8f | |||
| 3136816ce9 | |||
| 6fd3762ffc | |||
| 97a1190713 | |||
| 73a3bd9ae8 | |||
| fc533dbdc7 | |||
| 6217e071d2 | |||
| 673ca7f686 | |||
| 29a1cff7ea | |||
| 3c5152a67b | |||
| 1c1a849095 | |||
| 89d393e57a | |||
| 2f27687d80 | |||
| 167a50c01d | |||
| 313f03f5e5 | |||
| 6cfdc3d8a3 | |||
| 9c24a0bc4b | |||
| b99ad920c4 | |||
| 912b18eca1 | |||
| 9e651a51db | |||
| c8b6e997a7 | |||
| 928e187524 | |||
| cf12d19860 | |||
| e3a3ac56fb | |||
| d15ed81cd5 | |||
| ff054f6f47 | |||
| 667cf70fa0 | |||
| 73eb401c93 | |||
| b11f3add06 | |||
| 92f888a152 | |||
| 78ed5cc716 | |||
| 3968b67c5d | |||
| 119830c979 | |||
| 647394c875 | |||
| c50d777309 | |||
| 4954685cca | |||
| 39d43a8d8f | |||
| b4761cc54e | |||
| 9aee2e9cfe | |||
| 7c7c8b228e | |||
| ca7714dafd | |||
| 1ad5ab8632 | |||
| c4e7838089 | |||
| 7313712263 | |||
| aa48d95f24 | |||
| c5baabbe9c | |||
| 1d2716139f | |||
| 742ad2c150 | |||
| 18eb0692f0 | |||
| b5f98f69db | |||
| 47593d0eb4 | |||
| 4404fce369 | |||
| 72c20f4dd0 | |||
| 3240885bfd | |||
| 7f0955f022 | |||
| c21bce0093 | |||
| 4e23472ed5 | |||
| cfe1f2304b | |||
| de6568d750 | |||
| 3aafe7fa16 | |||
| c1e65d19e7 | |||
| 5fdf954994 | |||
| 230868af3c | |||
| 66154d9de8 | |||
| 93ec3c7dbd | |||
| 945ce3e4bc | |||
| 782a8573e9 | |||
| 4e0ca51159 | |||
| 3cd160e1b2 | |||
| 93a236a9d2 | |||
| eaf3bc2f40 | |||
| 5ca0a2ba06 | |||
| ccd2bdbaac | |||
| 08321699cd | |||
| 7300c0e0f5 | |||
| 7e562824fe | |||
| ed8b5c96b9 | |||
| 14bccdffa6 | |||
| 39e465bcab | |||
| e53bb3a12d | |||
| 50fccd393f | |||
| 7993740ac8 | |||
| 8e5bb8ae59 | |||
| 8fefdd4114 | |||
| 64c8cee21b | |||
| 25fe686573 | |||
| 1c1ea98fdd | |||
| e098104f8f | |||
| 3c5ade5565 | |||
| b2ad75027e | |||
| fdfbf83b88 | |||
| 1b9ca0949e | |||
| 827037f0fa | |||
| d84c5790f5 | |||
| 49eb2282af | |||
| 741f9ecfab | |||
| 37b8122962 | |||
| 5f2cf68e80 | |||
| 74f2c58b29 | |||
| 208433047a | |||
| 2c01430035 | |||
| 5121437bcf | |||
| f61bd3e5ad | |||
| 835e409b32 | |||
| 010bdb7e25 | |||
| 7ba22b7714 | |||
| efcb19a3d0 | |||
| 55455bb1b5 | |||
| e49be12297 | |||
| 75f4940f5e | |||
| 8047330952 | |||
| 9105dcb078 | |||
| b8e38e03e2 | |||
| 331352878e | |||
| 62a88f1e9a | |||
| 43b603e70b | |||
| 95e6ac54cf | |||
| c4b2e2e501 | |||
| dccba23980 | |||
| bf27d10519 | |||
| 6c27011e32 | |||
| 6220990dc5 | |||
| 93e9767c9f | |||
| c774f53dad | |||
| 7fbfe5ad88 | |||
| ef02037990 | |||
| 23cc18ba0e | |||
| 924dbc7715 | |||
| 742f4938f2 | |||
| 02e0f586d3 | |||
| 5717aeef85 | |||
| da9b99f650 | |||
| 901ce2ee4c | |||
| dd2b993cd5 | |||
| 83577d3b82 | |||
| 1cb8b19520 | |||
| d109cd891e | |||
| 63c4002ca6 | |||
| 6954efcd15 | |||
| 78c2147771 | |||
| c938d5468e | |||
| 35590c5312 | |||
| e976b10e2a | |||
| 3949706b28 | |||
| ce55916845 | |||
| 9b252cbdd2 | |||
| 97fa09f6ee | |||
| 0e7a7cccb9 | |||
| 1c0cdcc176 | |||
| 280305c2ba | |||
| d1f1d579bc | |||
| eeeb3ffe25 | |||
| 1ee0f862e1 | |||
| 6b327c9f61 | |||
| f148e0ebc1 | |||
| 6f20f4d629 | |||
| 94670270d6 | |||
| 8e21247a97 | |||
| aa84004cb4 | |||
| e1c201f4bd | |||
| 425a1d15a0 | |||
| e3ad41792a | |||
| c1ba10fc8b | |||
| 1c5686f71b | |||
| b9e0f2b9ca | |||
| ede175f141 | |||
| a301874e30 | |||
| 9b4a9a6bd9 | |||
| 04274b1884 | |||
| ca783b8424 | |||
| 2e4c2b5b46 | |||
| 4c09d8b910 | |||
| fb1b260d09 | |||
| 98eb8f718e | |||
| 68b2e0ee2d | |||
| 81771a0522 | |||
| 93c8bcc210 | |||
| 176bf5f0c4 | |||
| 65a5945778 | |||
| 8f7b9cdfdd | |||
| acecba7ff7 | |||
| 507e0aadbc | |||
| 8406d9b192 | |||
| 6f3170cb56 | |||
| 835582224e | |||
| 52879f50f0 | |||
| 2b505f1be4 | |||
| f089f9024d | |||
| 43fb421a93 | |||
| f06d6b50a9 | |||
| 2c987b0211 | |||
| 3d860ad454 | |||
| b5bf19569b | |||
| 5a7f5cb4a7 | |||
| 1affefbbfc | |||
| e4ff38a712 | |||
| f2ac4d6f44 | |||
| 48b98a5432 | |||
| a4752154f7 | |||
| 0d973a497b | |||
| ab4eccf1df | |||
| e0c449f28e | |||
| ce9a5c06d5 | |||
| 2bbba1e4e8 | |||
| 39298f8d8f | |||
| 32b4c0567a | |||
| 7ff1b5332e | |||
| 5e77a60bd6 | |||
| 9629c000bd | |||
| 9dc5fed686 | |||
| 2cc9db77dd | |||
| 8aa08c9443 | |||
| dca3e2eba6 | |||
| 57061fba38 | |||
| cee6a24309 | |||
| 62edb3abc6 | |||
| 1c9e1c0a66 | |||
| a06aeb10c1 | |||
| b84b309e00 | |||
| 62eecb3ccd | |||
| ec07572ced | |||
| b45e2fa34d | |||
| 289a718446 | |||
| 292a2a6c34 | |||
| 2e8415b950 | |||
| dbf1f6e354 | |||
| 9a2fe9745d | |||
| b5ca343fac | |||
| 88c7ff63ff | |||
| 7a438ad30f | |||
| 89649de7c3 | |||
| a1960eaa33 | |||
| d6820c9233 | |||
| 5c4bb8d33d | |||
| e3ce1f01c9 | |||
| 9b6b344ecf | |||
| 3db85d5b44 | |||
| b5871d72d9 | |||
| b70a714f88 | |||
| cad5a8d1bc | |||
| 93f8a5fa8f | |||
| b0809ea78c | |||
| b0e9033736 | |||
| 1ac6df8de7 | |||
| 5899b2157a | |||
| 44f3828f68 | |||
| 3f560b060c | |||
| 3185f578fb | |||
| 4fc09799b6 | |||
| fe0e3cad72 | |||
| 37d1aa7f40 | |||
| 4a12554bf4 | |||
| fecd1d5683 | |||
| bce9bf6fd9 | |||
| fbf63b075a | |||
| b86d6e90e2 | |||
| 6425b452e7 | |||
| 1657fe8083 | |||
| ecd74a4cbd | |||
| 36dc43c602 | |||
| d92515f0d4 | |||
| f147dcac0c | |||
| ee4c84f39b | |||
| b8a83c6f59 | |||
| 4462c0ef69 | |||
| c803bfb545 | |||
| 2623c44cab | |||
| 24dd02fc81 | |||
| a97602b6dc | |||
| e2943e90dc | |||
| 3cb7fbd030 | |||
| afe54f22ab | |||
| e15f5bcee9 | |||
| 1e372a856d | |||
| b26896cad5 | |||
| f75faf6b06 | |||
| b48d9aa052 | |||
| d899706208 | |||
| 3e05789b58 | |||
| 9a7b62cbc6 | |||
| 8e0f0e878e | |||
| 79344edf0d | |||
| e59bfd1a9c | |||
| 4d12cc8ea2 | |||
| 2ed2268579 | |||
| 94a99e8da0 | |||
| ddaf50c01d | |||
| 7566949b42 | |||
| bb6db3caea | |||
| 2dc494dc1c | |||
| 3c25633ee9 | |||
| d99ed2729b | |||
| 782455d48b | |||
| 47863b34c2 | |||
| 92391d5eb8 | |||
| 0d37cb4e54 | |||
| ea528ed9d9 | |||
| f7b880c5ea | |||
| ff78bc8d6c | |||
| 6503b4e7eb | |||
| 30b7087f30 | |||
| 0c1372f986 | |||
| 8fb4ba8924 | |||
| 5f675c6f2b | |||
| b3333241c5 | |||
| e39079c0f8 | |||
| c3317d9232 | |||
| a4777045fe | |||
| bbe8ea6aa6 | |||
| d662db69f0 | |||
| 9b259143be | |||
| 025cb58493 | |||
| b3dee825e8 | |||
| f6c5aac3c8 | |||
| 25e9064d09 | |||
| 5f33489465 | |||
| 3e1e8f1244 | |||
| 23a91a37be | |||
| eaae8b6137 | |||
| a886f8a2df | |||
| 6df7b1e9cd | |||
| 206c02b527 | |||
| a05d1a9ee6 | |||
| ed0df01b8d | |||
| 0f9d563a3e | |||
| f3fb65495e | |||
| 196f33005e | |||
| 90c0bdded0 | |||
| f856f871bb | |||
| e75ea18ef0 | |||
| 50e2d9d1a7 | |||
| 5c84978c3c | |||
| 3859f39729 | |||
| 3498ded9d9 | |||
| 24b468f2a2 | |||
| 8784958c40 | |||
| c1231885fe | |||
| 2b65a696dd | |||
| 02924549be | |||
| 6cf94b4491 | |||
| 30aa2dd527 | |||
| 8e121a7e51 | |||
| 34ec362876 | |||
| ba58d2486e | |||
| f7b5350d60 | |||
| 9ddfcc38c9 | |||
| cee66a6fd5 | |||
| 574b6197a2 | |||
| 6fc8628144 | |||
| ca9330b412 | |||
| 1b792eb964 | |||
| 0e5ea0d3b1 | |||
| 977ad16806 | |||
| 41420bc71c | |||
| 5ec5f8864a | |||
| 60e8836968 | |||
| e755148f16 | |||
| 0bf663141a | |||
| 17949e526b | |||
| d7dced7ddf | |||
| 4e264d6a22 | |||
| c8e89a0f99 | |||
| c61e32cd4f | |||
| 274bf61b3e | |||
| 05b2a5cbe9 | |||
| aa838c8003 | |||
| d5aabe9f9e | |||
| 171dbdd0a1 | |||
| b2c09d56d6 | |||
| f0e8379fa5 | |||
| 1fea4f02ed | |||
| 35ea13c53a | |||
| 78b0563c0e | |||
| 5fab665f21 | |||
| 109f0a50e5 | |||
| 746910c59f | |||
| ae4806ae4f | |||
| 1c00e2cdde | |||
| 78301a8a83 | |||
| ca798049b3 | |||
| daf4b1dfeb | |||
| 5bdd31a5af | |||
| 3cb5e5172b | |||
| d625c7ab0c | |||
| c2045391c8 | |||
| f04a0ffcf1 | |||
| dfdac1c1cd | |||
| f4b361ab02 | |||
| 5f3d3012ff | |||
| 0897ef1132 | |||
| 8b89dbcbf0 | |||
| f24e944ab0 | |||
| 23130d5a57 | |||
| 1e6e1976e3 | |||
| 4453316bb0 | |||
| 14aeefb813 | |||
| c991c7c407 | |||
| 251c6e7aec | |||
| cf2357fff2 | |||
| 06e6b0d47e | |||
| a83b4186af | |||
| dc5de83436 | |||
| 77425b4b25 | |||
| 5a109313cb | |||
| d8a7927602 | |||
| cccddee106 | |||
| 6c252c6d26 | |||
| b06c1911c6 | |||
| 7c9e99220a | |||
| bfd8b9f453 | |||
| 53e8662335 | |||
| ae54f024cd | |||
| 9aa391c5bf | |||
| ec48249934 | |||
| 6a8f3516f9 | |||
| 79d4835784 | |||
| b1a4783e38 | |||
| 0038afa392 | |||
| 5fcffa0b4f | |||
| 9e9d11ae89 | |||
| 97bd84725c | |||
| 19c86b1b73 | |||
| ca247095da | |||
| c350b7b8ed | |||
| ac3d3314c4 | |||
| f916a48db0 | |||
| 6963a4b554 | |||
| 4466bf4e12 | |||
| c4d01b82a6 | |||
| 42e8d9ab9d | |||
| 9c562ff740 | |||
| 1787de517c | |||
| 832e567620 | |||
| 319efbe662 | |||
| 6f34bb050a | |||
| a2a56122e2 | |||
| 58f2679def | |||
| 396ea02fe5 | |||
| 8100ddb990 | |||
| d78c46a628 | |||
| 1e93657ab5 | |||
| 366e47245e | |||
| 4c53ba91be | |||
| cf080523cb | |||
| a15d0af139 | |||
| d99205ecc6 | |||
| dd3a61d84c | |||
| 595a6f1c9e | |||
| 18d70df188 | |||
| 46f6dc67c1 | |||
| 6267b79da3 | |||
| 62f3d09076 | |||
| 4b3c559df3 | |||
| 30a99c22f1 | |||
| 360cb37028 | |||
| 4b6b41a6aa | |||
| faa8618124 | |||
| 89acf923e0 | |||
| c42a33154c | |||
| 871d18e294 | |||
| c157564da6 | |||
| ecc3b00c51 | |||
| a074e30147 | |||
| 2ce272d586 | |||
| e1636e20bd | |||
| 9904720e5a | |||
| 9910320fb4 | |||
| b43a9e2ccc | |||
| 23d81492e6 | |||
| 65b0ec3f90 | |||
| 91248d10db | |||
| f76a4d7087 | |||
| c7b609945b | |||
| 6ca6ea8065 | |||
| 315f621176 | |||
| 10d9a818c2 | |||
| e3761784af | |||
| d85556a063 | |||
| c43f33a5bc | |||
| e63897d1f7 | |||
| 35a69e7ff1 | |||
| 8b9f09bda5 | |||
| 32cddc725b | |||
| 55eec3b0de | |||
| 1cf14f176c | |||
| 74550b031f | |||
| 2f84f0eaa4 | |||
| 3ed7ef1c88 | |||
| eace147652 | |||
| 53c005c4f1 | |||
| a4ff97564c | |||
| c6beeba14f | |||
| e470278717 | |||
| 783230b654 | |||
| 4e7711725a | |||
| e5bf7606ec | |||
| aa377cd5c1 | |||
| bb9a88d7dc | |||
| 341e97ba82 | |||
| 8d3cb51157 | |||
| 7fff3b5ae0 | |||
| 6beb73b7a6 | |||
| c239a5a226 | |||
| b3f8fecfe4 | |||
| 6dcf4942f5 | |||
| cd7e429a66 | |||
| fcfcb35929 | |||
| 82b20be436 | |||
| 33101d8050 | |||
| 05160a968c | |||
| 623f29eb24 | |||
| 0a3833818a | |||
| 4f276252a3 | |||
| d17c629ce0 | |||
| 5bcc969778 | |||
| 8afb1141ab | |||
| 8c5673d9b8 | |||
| 916dfcd9da | |||
| d9a0ef760f | |||
| 842210e539 | |||
| 39d951d0cb | |||
| a4be0841e5 | |||
| 95470b830f | |||
| 31c5397ae3 | |||
| 0d76b90144 | |||
| a6690c2052 |
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
Language: Cpp
|
Language: Cpp
|
||||||
Standard: C++03
|
Standard: C++03
|
||||||
AccessModifierOffset: -4
|
AccessModifierOffset: -4
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: DontAlign
|
||||||
AlignConsecutiveAssignments: false
|
AlignConsecutiveAssignments: false
|
||||||
AlignConsecutiveDeclarations: false
|
AlignConsecutiveDeclarations: false
|
||||||
AlignOperands: true
|
AlignOperands: true
|
||||||
|
|||||||
+86
-26
@@ -8,7 +8,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# SCCACHE_GHA_ENABLED: "true"
|
SCCACHE_GHA_ENABLED: "true"
|
||||||
RUSTC_WRAPPER: "sccache"
|
RUSTC_WRAPPER: "sccache"
|
||||||
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- name: GCC x86_64
|
- name: GCC x86_64
|
||||||
runner: [self-hosted, Linux]
|
runner: ubuntu-latest
|
||||||
preset: gcc
|
preset: gcc
|
||||||
artifact_arch: x86_64
|
artifact_arch: x86_64
|
||||||
# - name: GCC aarch64
|
# - name: GCC aarch64
|
||||||
@@ -41,7 +41,6 @@ jobs:
|
|||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: 'false' # disabled for self-hosted
|
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y install ninja-build clang lld openssl libcurl4-openssl-dev \
|
sudo apt-get -y install ninja-build clang lld openssl libcurl4-openssl-dev \
|
||||||
@@ -51,8 +50,7 @@ jobs:
|
|||||||
libxss-dev libfuse2 libusb-1.0-0-dev libdecor-0-dev libpipewire-0.3-dev libunwind-dev
|
libxss-dev libfuse2 libusb-1.0-0-dev libdecor-0-dev libpipewire-0.3-dev libunwind-dev
|
||||||
|
|
||||||
- name: Setup sccache
|
- name: Setup sccache
|
||||||
if: 'false' # disabled for self-hosted
|
uses: mozilla-actions/sccache-action@v0.0.10
|
||||||
uses: mozilla-actions/sccache-action@v0.0.9
|
|
||||||
|
|
||||||
- name: Print sccache stats
|
- name: Print sccache stats
|
||||||
run: sccache --show-stats
|
run: sccache --show-stats
|
||||||
@@ -67,17 +65,16 @@ jobs:
|
|||||||
run: ci/build-appimage.sh
|
run: ci/build-appimage.sh
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
if: startsWith(github.event.ref, 'refs/tags/v')
|
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: dusk-${{env.DUSK_VERSION}}-linux-${{matrix.preset}}-${{matrix.artifact_arch}}
|
name: dusklight-${{env.DUSK_VERSION}}-linux-${{matrix.preset}}-${{matrix.artifact_arch}}
|
||||||
path: |
|
path: |
|
||||||
build/install/Dusk-*.AppImage
|
build/install/Dusklight-*.AppImage
|
||||||
build/install/debug.tar.*
|
build/install/debug.tar.*
|
||||||
|
|
||||||
build-apple:
|
build-apple:
|
||||||
name: Build Apple (${{matrix.name}})
|
name: Build Apple (${{matrix.name}})
|
||||||
runs-on: [self-hosted, macOS]
|
runs-on: macos-latest
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -86,14 +83,14 @@ jobs:
|
|||||||
platform: macos
|
platform: macos
|
||||||
preset: x-macos-ci-arm64
|
preset: x-macos-ci-arm64
|
||||||
artifact_name: macos-appleclang-arm64
|
artifact_name: macos-appleclang-arm64
|
||||||
# - name: AppleClang macOS x86_64
|
- name: AppleClang macOS x86_64
|
||||||
# platform: macos
|
platform: macos
|
||||||
# preset: x-macos-ci-x86_64
|
preset: x-macos-ci-x86_64
|
||||||
# artifact_name: macos-appleclang-x86_64
|
artifact_name: macos-appleclang-x86_64
|
||||||
# - name: AppleClang iOS arm64
|
- name: AppleClang iOS arm64
|
||||||
# platform: ios
|
platform: ios
|
||||||
# preset: x-ios-ci
|
preset: x-ios-ci
|
||||||
# artifact_name: ios-appleclang-arm64
|
artifact_name: ios-appleclang-arm64
|
||||||
# - name: AppleClang tvOS arm64
|
# - name: AppleClang tvOS arm64
|
||||||
# platform: tvos
|
# platform: tvos
|
||||||
# preset: x-tvos-ci
|
# preset: x-tvos-ci
|
||||||
@@ -106,7 +103,6 @@ jobs:
|
|||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: 'false'
|
|
||||||
run: brew install cmake ninja
|
run: brew install cmake ninja
|
||||||
|
|
||||||
- name: Install Rust iOS target
|
- name: Install Rust iOS target
|
||||||
@@ -128,7 +124,7 @@ jobs:
|
|||||||
rustup target add x86_64-apple-darwin
|
rustup target add x86_64-apple-darwin
|
||||||
|
|
||||||
- name: Setup sccache
|
- name: Setup sccache
|
||||||
uses: mozilla-actions/sccache-action@v0.0.9
|
uses: mozilla-actions/sccache-action@v0.0.10
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
run: cmake --preset ${{matrix.preset}}
|
run: cmake --preset ${{matrix.preset}}
|
||||||
@@ -137,14 +133,80 @@ jobs:
|
|||||||
run: cmake --build --preset ${{matrix.preset}}
|
run: cmake --build --preset ${{matrix.preset}}
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
if: startsWith(github.event.ref, 'refs/tags/v')
|
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: dusk-${{env.DUSK_VERSION}}-${{matrix.artifact_name}}
|
name: dusklight-${{env.DUSK_VERSION}}-${{matrix.artifact_name}}
|
||||||
path: |
|
path: |
|
||||||
build/install/Dusk.app
|
build/install/Dusklight.app
|
||||||
build/install/debug.tar.*
|
build/install/debug.tar.*
|
||||||
|
|
||||||
|
build-android:
|
||||||
|
name: Build Android (${{matrix.name}})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Clang arm64-v8a
|
||||||
|
preset: x-android-ci-arm64
|
||||||
|
abi: arm64-v8a
|
||||||
|
artifact_arch: arm64
|
||||||
|
rust_target: aarch64-linux-android
|
||||||
|
|
||||||
|
env:
|
||||||
|
ANDROID_NDK_VERSION: "29.0.14206865"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get -y install ninja-build
|
||||||
|
|
||||||
|
- name: Setup Java
|
||||||
|
uses: actions/setup-java@v5
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: 17
|
||||||
|
|
||||||
|
- name: Setup Android SDK
|
||||||
|
uses: android-actions/setup-android@v4
|
||||||
|
|
||||||
|
- name: Install Android SDK packages
|
||||||
|
run: sdkmanager "platforms;android-36" "build-tools;36.1.0" "ndk;${ANDROID_NDK_VERSION}"
|
||||||
|
|
||||||
|
- name: Install Rust Android target
|
||||||
|
run: |
|
||||||
|
rustup toolchain install stable
|
||||||
|
rustup target add ${{matrix.rust_target}}
|
||||||
|
|
||||||
|
- name: Setup sccache
|
||||||
|
uses: mozilla-actions/sccache-action@v0.0.10
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
run: cmake --preset ${{matrix.preset}}
|
||||||
|
|
||||||
|
- name: Build native library
|
||||||
|
run: cmake --build --preset ${{matrix.preset}} --target dusklight
|
||||||
|
|
||||||
|
- name: Stage stripped JNI library
|
||||||
|
run: ANDROID_STAGE_ABIS="${{matrix.abi}}" platforms/android/scripts/stage-jni-libs.sh
|
||||||
|
|
||||||
|
- name: Build APK
|
||||||
|
working-directory: platforms/android
|
||||||
|
run: ./gradlew :app:assembleRelease --rerun-tasks
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: dusklight-${{env.DUSK_VERSION}}-android-${{matrix.artifact_arch}}
|
||||||
|
path: platforms/android/app/build/outputs/apk/release/app-${{matrix.abi}}-release-unsigned.apk
|
||||||
|
|
||||||
build-windows:
|
build-windows:
|
||||||
name: Build Windows (${{matrix.name}})
|
name: Build Windows (${{matrix.name}})
|
||||||
runs-on: ${{matrix.runner}}
|
runs-on: ${{matrix.runner}}
|
||||||
@@ -154,7 +216,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- name: MSVC x86_64
|
- name: MSVC x86_64
|
||||||
runner: [self-hosted, Windows]
|
runner: windows-latest
|
||||||
preset: msvc
|
preset: msvc
|
||||||
msvc_arch: amd64
|
msvc_arch: amd64
|
||||||
vcpkg_arch: x64
|
vcpkg_arch: x64
|
||||||
@@ -191,7 +253,6 @@ jobs:
|
|||||||
uses: mozilla-actions/sccache-action@v0.0.9
|
uses: mozilla-actions/sccache-action@v0.0.9
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: 'false' # disabled for self-hosted
|
|
||||||
run: |
|
run: |
|
||||||
choco install ninja
|
choco install ninja
|
||||||
vcpkg install freetype:${{matrix.vcpkg_arch}}-windows-static zstd:${{matrix.vcpkg_arch}}-windows-static
|
vcpkg install freetype:${{matrix.vcpkg_arch}}-windows-static zstd:${{matrix.vcpkg_arch}}-windows-static
|
||||||
@@ -203,10 +264,9 @@ jobs:
|
|||||||
run: cmake --build --preset x-windows-ci-${{matrix.preset}}
|
run: cmake --build --preset x-windows-ci-${{matrix.preset}}
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
if: startsWith(github.event.ref, 'refs/tags/v')
|
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: dusk-${{env.DUSK_VERSION}}-win32-msvc-${{matrix.artifact_arch}}
|
name: dusklight-${{env.DUSK_VERSION}}-win32-msvc-${{matrix.artifact_arch}}
|
||||||
path: |
|
path: |
|
||||||
build/install/*.exe
|
build/install/*.exe
|
||||||
build/install/*.dll
|
build/install/*.dll
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ compile_commands.json
|
|||||||
# MacOS
|
# MacOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
# direnv / nix
|
||||||
|
.direnv/
|
||||||
|
.envrc
|
||||||
|
|
||||||
# ISOs
|
# ISOs
|
||||||
*.iso
|
*.iso
|
||||||
|
|
||||||
|
|||||||
Vendored
+2
-2
@@ -2,11 +2,11 @@
|
|||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "(gdb) Launch Dusk MSVC",
|
"name": "(gdb) Launch Dusklight MSVC",
|
||||||
"type": "cppvsdbg",
|
"type": "cppvsdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "${command:cmake.launchTargetPath}",
|
"program": "${command:cmake.launchTargetPath}",
|
||||||
"args": ["-l", "1", "--dvd", "${workspaceRoot}/orig/GZ2E01/GZ2E01.iso"],
|
"args": ["-l", "1", "--dvd", "${workspaceRoot}/orig/GZ2E01/GZ2E01.iso", "--console"],
|
||||||
"MIMode": "gdb",
|
"MIMode": "gdb",
|
||||||
"miDebuggerPath": "gdb",
|
"miDebuggerPath": "gdb",
|
||||||
"symbolSearchPath": "${command:cmake.launchTargetPath}",
|
"symbolSearchPath": "${command:cmake.launchTargetPath}",
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"cmake.buildDirectory": "${workspaceFolder}/build/dusk/${buildType}/${variant:tp_version}",
|
"cmake.buildDirectory": "${workspaceFolder}/build/dusklight/${buildType}/${variant:tp_version}",
|
||||||
"cmake.generator": "Ninja",
|
"cmake.generator": "Ninja",
|
||||||
"cmake.configureSettings": {
|
"cmake.configureSettings": {
|
||||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||||
|
|||||||
+173
-91
@@ -48,13 +48,15 @@ else ()
|
|||||||
message(STATUS "Unable to find git, commit information will not be available")
|
message(STATUS "Unable to find git, commit information will not be available")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (DUSK_WC_DESCRIBE MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)(-([0-9]+).*)?$")
|
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(DUSK_SHORT_VERSION_STRING "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
|
||||||
if (CMAKE_MATCH_5)
|
set(DUSK_VERSION_TWEAK "0")
|
||||||
set(DUSK_VERSION_STRING "${DUSK_SHORT_VERSION_STRING}.${CMAKE_MATCH_5}")
|
if (DUSK_WC_DESCRIBE MATCHES "^v[0-9]+\\.[0-9]+\\.[0-9]+-([0-9]+)(-dirty)?$")
|
||||||
else ()
|
set(DUSK_VERSION_TWEAK "${CMAKE_MATCH_1}")
|
||||||
set(DUSK_VERSION_STRING "${DUSK_SHORT_VERSION_STRING}.0")
|
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 ()
|
endif ()
|
||||||
|
set(DUSK_VERSION_STRING "${DUSK_SHORT_VERSION_STRING}.${DUSK_VERSION_TWEAK}")
|
||||||
else ()
|
else ()
|
||||||
set(DUSK_WC_DESCRIBE "UNKNOWN-VERSION")
|
set(DUSK_WC_DESCRIBE "UNKNOWN-VERSION")
|
||||||
set(DUSK_VERSION_STRING "0.0.0.0")
|
set(DUSK_VERSION_STRING "0.0.0.0")
|
||||||
@@ -65,11 +67,11 @@ endif ()
|
|||||||
if(DEFINED ENV{GITHUB_ENV})
|
if(DEFINED ENV{GITHUB_ENV})
|
||||||
file(APPEND "$ENV{GITHUB_ENV}" "DUSK_VERSION=${DUSK_WC_DESCRIBE}\n")
|
file(APPEND "$ENV{GITHUB_ENV}" "DUSK_VERSION=${DUSK_WC_DESCRIBE}\n")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Dusk version set to ${DUSK_WC_DESCRIBE}")
|
message(STATUS "Dusklight version set to ${DUSK_WC_DESCRIBE}")
|
||||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
||||||
project(dusk LANGUAGES C CXX VERSION ${DUSK_VERSION_STRING})
|
project(dusklight LANGUAGES C CXX VERSION ${DUSK_VERSION_STRING})
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
enable_language(OBJC)
|
enable_language(OBJC OBJCXX)
|
||||||
endif ()
|
endif ()
|
||||||
if (APPLE AND NOT TVOS AND CMAKE_SYSTEM_NAME STREQUAL tvOS)
|
if (APPLE AND NOT TVOS AND CMAKE_SYSTEM_NAME STREQUAL tvOS)
|
||||||
# ios.toolchain.cmake hack for SDL
|
# ios.toolchain.cmake hack for SDL
|
||||||
@@ -90,37 +92,51 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||||
|
|
||||||
|
# Folder-based instead of target-based organization
|
||||||
|
# in Visual Studio and Xcode generators
|
||||||
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "_cmake")
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
|
if (CMAKE_SYSTEM_NAME STREQUAL Linux)
|
||||||
set(DAWN_USE_WAYLAND ON CACHE BOOL "Enable support for Wayland surface" FORCE)
|
set(DAWN_USE_WAYLAND ON CACHE BOOL "Enable support for Wayland surface" FORCE)
|
||||||
endif ()
|
endif ()
|
||||||
set(AURORA_ENABLE_DVD ON CACHE BOOL "Enable DVD API support" FORCE)
|
set(AURORA_ENABLE_DVD ON CACHE BOOL "Enable DVD API support" FORCE)
|
||||||
set(AURORA_ENABLE_CARD ON CACHE BOOL "Enable CARD API support" FORCE)
|
set(AURORA_ENABLE_CARD ON CACHE BOOL "Enable CARD API support" FORCE)
|
||||||
|
set(AURORA_ENABLE_RMLUI ON CACHE BOOL "Enable RmlUi UI support" FORCE)
|
||||||
add_subdirectory(extern/aurora EXCLUDE_FROM_ALL)
|
add_subdirectory(extern/aurora EXCLUDE_FROM_ALL)
|
||||||
|
target_compile_definitions(aurora_mtx PRIVATE MTX_USE_PS=1)
|
||||||
|
|
||||||
add_subdirectory(libs/freeverb)
|
add_subdirectory(libs/freeverb)
|
||||||
|
|
||||||
option(DUSK_BUILD_WARNINGS "Enable compiler warnings (off by default)")
|
option(DUSK_BUILD_WARNINGS "Enable compiler warnings (off by default)")
|
||||||
option(DUSK_SELECTED_OPT "If on, selected parts of the project will be compiled with optimizations on Debug, intending to make the game run at 30 FPS. Note for MSVC: you will need to remove '/RTC1' from your debug flags in CMake.")
|
option(DUSK_SELECTED_OPT "If on, selected parts of the project will be compiled with optimizations on Debug, intending to make the game run at 30 FPS. Note for MSVC: you will need to remove '/RTC1' from your debug flags in CMake.")
|
||||||
option(DUSK_MOVIE_SUPPORT "If on, compile against libjpeg-turbo to enable THP file decoding" ON)
|
option(DUSK_MOVIE_SUPPORT "If on, compile against libjpeg-turbo to enable THP file decoding" ON)
|
||||||
|
option(DUSK_ENABLE_UPDATE_CHECKER "Enable update checking support" ON)
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
set(DUSK_MOVIE_SUPPORT OFF)
|
set(DUSK_MOVIE_SUPPORT OFF)
|
||||||
set(NOD_COMPRESS_BZIP2 OFF CACHE BOOL "" FORCE)
|
|
||||||
set(NOD_COMPRESS_LZMA OFF CACHE BOOL "" FORCE)
|
|
||||||
set(NOD_COMPRESS_ZLIB OFF CACHE BOOL "" FORCE)
|
|
||||||
set(NOD_COMPRESS_ZSTD OFF CACHE BOOL "" FORCE)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
option(DUSK_ENABLE_SENTRY_NATIVE "Enable sentry-native crash reporting support" OFF)
|
option(DUSK_ENABLE_SENTRY_NATIVE "Enable sentry-native crash reporting support" OFF)
|
||||||
set(DUSK_SENTRY_DSN "" CACHE STRING "Sentry DSN")
|
set(DUSK_SENTRY_DSN "" CACHE STRING "Sentry DSN")
|
||||||
set(DUSK_SENTRY_ENVIRONMENT "development" CACHE STRING "Sentry environment")
|
set(DUSK_SENTRY_ENVIRONMENT "development" CACHE STRING "Sentry environment")
|
||||||
|
|
||||||
|
# Edit & Continue
|
||||||
|
if (MSVC)
|
||||||
|
if ("${CMAKE_MSVC_DEBUG_INFORMATION_FORMAT}" STREQUAL "" AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "EditAndContinue")
|
||||||
|
endif ()
|
||||||
|
if (CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "EditAndContinue")
|
||||||
|
add_link_options("/INCREMENTAL")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
if (DUSK_MOVIE_SUPPORT)
|
if (DUSK_MOVIE_SUPPORT)
|
||||||
find_package(libjpeg-turbo 3.0 CONFIG QUIET)
|
find_package(libjpeg-turbo 3.0 CONFIG QUIET)
|
||||||
if (libjpeg-turbo_FOUND)
|
if (libjpeg-turbo_FOUND)
|
||||||
message(STATUS "dusk: Using system libjpeg-turbo")
|
message(STATUS "dusklight: Using system libjpeg-turbo")
|
||||||
else ()
|
else ()
|
||||||
message(STATUS "dusk: Fetching libjpeg-turbo")
|
message(STATUS "dusklight: Fetching libjpeg-turbo")
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
set(_jpeg_install_dir ${CMAKE_BINARY_DIR}/libjpeg-turbo-install)
|
set(_jpeg_install_dir ${CMAKE_BINARY_DIR}/libjpeg-turbo-install)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
@@ -144,6 +160,7 @@ if (DUSK_MOVIE_SUPPORT)
|
|||||||
CMAKE_C_COMPILER_LAUNCHER
|
CMAKE_C_COMPILER_LAUNCHER
|
||||||
CMAKE_MAKE_PROGRAM
|
CMAKE_MAKE_PROGRAM
|
||||||
CMAKE_MSVC_RUNTIME_LIBRARY
|
CMAKE_MSVC_RUNTIME_LIBRARY
|
||||||
|
CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
|
||||||
CMAKE_OSX_ARCHITECTURES
|
CMAKE_OSX_ARCHITECTURES
|
||||||
DEPLOYMENT_TARGET
|
DEPLOYMENT_TARGET
|
||||||
ENABLE_ARC
|
ENABLE_ARC
|
||||||
@@ -209,13 +226,13 @@ endif ()
|
|||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
|
|
||||||
# Declare all dependencies first so CMake can download them in parallel
|
# Declare all dependencies first so CMake can download them in parallel
|
||||||
message(STATUS "dusk: Fetching cxxopts")
|
message(STATUS "dusklight: Fetching cxxopts")
|
||||||
FetchContent_Declare(cxxopts
|
FetchContent_Declare(cxxopts
|
||||||
URL https://github.com/jarro2783/cxxopts/archive/refs/tags/v3.3.1.tar.gz
|
URL https://github.com/jarro2783/cxxopts/archive/refs/tags/v3.3.1.tar.gz
|
||||||
URL_HASH SHA256=3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072
|
URL_HASH SHA256=3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072
|
||||||
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
||||||
)
|
)
|
||||||
message(STATUS "dusk: Fetching nlohmann/json")
|
message(STATUS "dusklight: Fetching nlohmann/json")
|
||||||
FetchContent_Declare(json
|
FetchContent_Declare(json
|
||||||
URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz
|
URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz
|
||||||
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
|
URL_HASH SHA256=42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa
|
||||||
@@ -224,7 +241,7 @@ FetchContent_Declare(json
|
|||||||
FetchContent_MakeAvailable(cxxopts json)
|
FetchContent_MakeAvailable(cxxopts json)
|
||||||
|
|
||||||
if (DUSK_ENABLE_SENTRY_NATIVE)
|
if (DUSK_ENABLE_SENTRY_NATIVE)
|
||||||
message(STATUS "dusk: Fetching sentry-native")
|
message(STATUS "dusklight: Fetching sentry-native")
|
||||||
set(SENTRY_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
set(SENTRY_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||||
set(SENTRY_BACKEND crashpad CACHE STRING "" FORCE)
|
set(SENTRY_BACKEND crashpad CACHE STRING "" FORCE)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
@@ -269,36 +286,32 @@ include(files.cmake)
|
|||||||
|
|
||||||
# TODO: version handling for res includes
|
# TODO: version handling for res includes
|
||||||
|
|
||||||
set(DUSK_BUNDLE_NAME Dusk)
|
set(DUSK_BUNDLE_NAME Dusklight)
|
||||||
set(DUSK_BUNDLE_IDENTIFIER dev.twilitrealm.dusk)
|
set(DUSK_BUNDLE_IDENTIFIER dev.twilitrealm.dusk)
|
||||||
set(DUSK_COMPANY_NAME "Twilit Realm")
|
set(DUSK_COMPANY_NAME "Twilit Realm")
|
||||||
set(DUSK_FILE_DESCRIPTION "Dusk")
|
set(DUSK_FILE_DESCRIPTION "Dusklight")
|
||||||
set(DUSK_PRODUCT_NAME "Dusk")
|
set(DUSK_PRODUCT_NAME "Dusklight")
|
||||||
set(DUSK_COPYRIGHT "Copyright (C) Twilit Realm contributors")
|
set(DUSK_COPYRIGHT "Copyright (C) Twilit Realm contributors")
|
||||||
set(DUSK_GAME_NAME "GZ2E")
|
|
||||||
set(DUSK_GAME_VERSION "01")
|
|
||||||
set(DUSK_TP_VERSION ${DUSK_GAME_NAME}${DUSK_GAME_VERSION})
|
|
||||||
|
|
||||||
message(STATUS "dusk: Game Version: ${DUSK_TP_VERSION}")
|
source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${REL_FILES})
|
||||||
|
source_group("dusklight" FILES ${DUSK_FILES} ${DUSK_HTTP_BACKEND_FILES})
|
||||||
|
|
||||||
source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${JSYSTEM_FILES} ${JSYSTEM_DEBUG_FILES} ${REL_FILES})
|
set(GAME_COMPILE_DEFS TARGET_PC WIDESCREEN_SUPPORT=1 AVOID_UB=1 VERSION=0 MTX_USE_PS=1)
|
||||||
source_group("dusk" FILES ${DUSK_FILES})
|
|
||||||
|
|
||||||
set(GAME_COMPILE_DEFS TARGET_PC WIDESCREEN_SUPPORT=1 AVOID_UB=1 VERSION=0
|
|
||||||
DUSK_TP_VERSION="${DUSK_TP_VERSION}" DUSK_GAME_NAME="${DUSK_GAME_NAME}" DUSK_GAME_VERSION="${DUSK_GAME_VERSION}")
|
|
||||||
|
|
||||||
set(GAME_INCLUDE_DIRS
|
set(GAME_INCLUDE_DIRS
|
||||||
include
|
include
|
||||||
src
|
src
|
||||||
assets/${DUSK_TP_VERSION}
|
assets/GZ2E01 # TODO: make this dynamic if needed?
|
||||||
libs/JSystem/include
|
libs/JSystem/include
|
||||||
libs
|
libs
|
||||||
extern/aurora/include/dolphin
|
extern/aurora/include/dolphin
|
||||||
extern
|
extern
|
||||||
${CMAKE_BINARY_DIR})
|
${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
set(GAME_LIBS aurora::core aurora::gx aurora::gd aurora::si aurora::vi aurora::pad aurora::mtx aurora::os aurora::dvd
|
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)
|
||||||
|
|
||||||
list(APPEND GAME_LIBS libzstd_static)
|
list(APPEND GAME_LIBS libzstd_static)
|
||||||
|
|
||||||
@@ -307,6 +320,45 @@ if (DUSK_ENABLE_SENTRY_NATIVE)
|
|||||||
list(APPEND GAME_COMPILE_DEFS DUSK_ENABLE_SENTRY_NATIVE=1 SENTRY_BUILD_STATIC=1)
|
list(APPEND GAME_COMPILE_DEFS DUSK_ENABLE_SENTRY_NATIVE=1 SENTRY_BUILD_STATIC=1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND GAME_LIBS Ws2_32)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/no_backend.cpp)
|
||||||
|
if (DUSK_ENABLE_UPDATE_CHECKER)
|
||||||
|
list(APPEND GAME_COMPILE_DEFS DUSK_ENABLE_UPDATE_CHECKER=1)
|
||||||
|
if (WIN32)
|
||||||
|
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/winhttp.cpp)
|
||||||
|
list(APPEND GAME_LIBS winhttp)
|
||||||
|
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_WINHTTP=1)
|
||||||
|
message(STATUS "dusklight: Enabled update checker (WinHTTP)")
|
||||||
|
elseif (ANDROID)
|
||||||
|
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/android.cpp)
|
||||||
|
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_ANDROID=1)
|
||||||
|
message(STATUS "dusklight: Enabled update checker (Android)")
|
||||||
|
elseif (APPLE)
|
||||||
|
find_library(FOUNDATION_FRAMEWORK Foundation REQUIRED)
|
||||||
|
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/url_session.mm)
|
||||||
|
set_source_files_properties(src/dusk/http/url_session.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
||||||
|
list(APPEND GAME_LIBS ${FOUNDATION_FRAMEWORK})
|
||||||
|
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_URLSESSION=1)
|
||||||
|
message(STATUS "dusklight: Enabled update checker (NSURLSession)")
|
||||||
|
elseif (CMAKE_SYSTEM_NAME STREQUAL Linux)
|
||||||
|
find_package(CURL QUIET OPTIONAL_COMPONENTS HTTPS SSL)
|
||||||
|
if (CURL_FOUND AND CURL_HTTPS_FOUND AND CURL_SSL_FOUND)
|
||||||
|
set(DUSK_HTTP_BACKEND_SOURCE src/dusk/http/curl.cpp)
|
||||||
|
list(APPEND GAME_LIBS CURL::libcurl)
|
||||||
|
list(APPEND GAME_COMPILE_DEFS DUSK_HTTP_BACKEND_LIBCURL=1)
|
||||||
|
message(STATUS "dusklight: Enabled update checker (libcurl)")
|
||||||
|
else ()
|
||||||
|
message(STATUS "dusklight: Disabled update checker (libcurl + HTTPS/SSL not found)")
|
||||||
|
endif ()
|
||||||
|
else ()
|
||||||
|
message(STATUS "dusklight: Disabled update checker (unsupported platform)")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
list(APPEND DUSK_FILES ${DUSK_HTTP_BACKEND_SOURCE})
|
||||||
|
|
||||||
if (DUSK_MOVIE_SUPPORT)
|
if (DUSK_MOVIE_SUPPORT)
|
||||||
if (TARGET libjpeg-turbo::turbojpeg-static)
|
if (TARGET libjpeg-turbo::turbojpeg-static)
|
||||||
list(APPEND GAME_LIBS libjpeg-turbo::turbojpeg-static)
|
list(APPEND GAME_LIBS libjpeg-turbo::turbojpeg-static)
|
||||||
@@ -316,14 +368,13 @@ if (DUSK_MOVIE_SUPPORT)
|
|||||||
list(APPEND GAME_COMPILE_DEFS MOVIE_SUPPORT=1)
|
list(APPEND GAME_COMPILE_DEFS MOVIE_SUPPORT=1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Edit & Continue
|
set(DUSK_ENABLE_DISCORD_DEFAULT ON)
|
||||||
if (MSVC)
|
if (DEFINED DUSK_ENABLE_DISCORD_RPC AND NOT DEFINED DUSK_ENABLE_DISCORD)
|
||||||
if ("${CMAKE_MSVC_DEBUG_INFORMATION_FORMAT}" STREQUAL "" AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
set(DUSK_ENABLE_DISCORD_DEFAULT ${DUSK_ENABLE_DISCORD_RPC})
|
||||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "EditAndContinue")
|
endif ()
|
||||||
endif ()
|
option(DUSK_ENABLE_DISCORD "Enable Discord Rich Presence support" ${DUSK_ENABLE_DISCORD_DEFAULT})
|
||||||
if (CMAKE_MSVC_DEBUG_INFORMATION_FORMAT STREQUAL "EditAndContinue")
|
if (DUSK_ENABLE_DISCORD AND NOT ANDROID AND NOT IOS AND NOT TVOS)
|
||||||
add_link_options("/INCREMENTAL")
|
list(APPEND GAME_COMPILE_DEFS DUSK_DISCORD=1)
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
@@ -332,62 +383,86 @@ endif ()
|
|||||||
|
|
||||||
# game_debug is for game code files that we know work when compiled with DEBUG=1
|
# game_debug is for game code files that we know work when compiled with DEBUG=1
|
||||||
# Of course, if building a release build, this distinction is irrelevant
|
# Of course, if building a release build, this distinction is irrelevant
|
||||||
add_library(game_debug OBJECT ${JSYSTEM_DEBUG_FILES} ${SSYSTEM_FILES}
|
set(GAME_DEBUG_FILES
|
||||||
|
${SSYSTEM_FILES}
|
||||||
src/dusk/audio/DuskAudioSystem.cpp
|
src/dusk/audio/DuskAudioSystem.cpp
|
||||||
src/dusk/audio/JASCriticalSection.cpp
|
src/dusk/audio/JASCriticalSection.cpp
|
||||||
src/dusk/audio/DuskDsp.cpp
|
src/dusk/audio/DuskDsp.cpp
|
||||||
src/dusk/audio/Adpcm.cpp
|
src/dusk/audio/Adpcm.cpp
|
||||||
src/dusk/audio/DspStub.cpp
|
src/dusk/audio/DspStub.cpp
|
||||||
src/dusk/imgui/ImGuiAudio.cpp)
|
src/dusk/imgui/ImGuiAudio.cpp
|
||||||
|
)
|
||||||
|
set_source_files_properties(
|
||||||
|
${GAME_DEBUG_FILES}
|
||||||
|
PROPERTIES
|
||||||
|
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
|
||||||
add_library(game_base OBJECT ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${JSYSTEM_FILES} ${REL_FILES} ${DUSK_FILES} ${DOLPHIN_FILES})
|
set(GAME_BASE_FILES
|
||||||
|
${DOLZEL_FILES}
|
||||||
|
${Z2AUDIOLIB_FILES}
|
||||||
|
${REL_FILES}
|
||||||
|
${DUSK_FILES}
|
||||||
|
${DOLPHIN_FILES}
|
||||||
|
)
|
||||||
|
set_source_files_properties(
|
||||||
|
${GAME_BASE_FILES}
|
||||||
|
PROPERTIES
|
||||||
|
COMPILE_DEFINITIONS "NDEBUG=1;NDEBUG_DEFINED=1;DEBUG_DEFINED=0;$<$<CONFIG:Debug>:PARTIAL_DEBUG=1>"
|
||||||
|
)
|
||||||
|
|
||||||
target_compile_definitions(game_debug PRIVATE ${GAME_COMPILE_DEFS} $<$<CONFIG:Debug>:DEBUG=1> $<$<CONFIG:Debug>:PARTIAL_DEBUG=1>)
|
foreach(jsystem_lib IN LISTS JSYSTEM_LIBRARIES)
|
||||||
target_compile_definitions(game_base PRIVATE ${GAME_COMPILE_DEFS} NDEBUG=1 NDEBUG_DEFINED=1 DEBUG_DEFINED=0 $<$<CONFIG:Debug>:PARTIAL_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})
|
||||||
|
set_target_properties(${jsystem_lib} PROPERTIES FOLDER "JSystem")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
# only apply PCH to game_base since not all headers are necessarily validated with DEBUG=1
|
set(JSYSTEM_LINK_LIBRARIES ${JSYSTEM_LIBRARIES})
|
||||||
target_precompile_headers(game_base PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/include/dusk_pch.hpp>")
|
if (CMAKE_CXX_LINK_GROUP_USING_RESCAN_SUPPORTED OR CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED)
|
||||||
|
# GNU ld resolves static archives in a single left-to-right pass. The split
|
||||||
target_include_directories(game_debug PRIVATE ${GAME_INCLUDE_DIRS})
|
# JSystem libraries reference each other, so they need a RESCAN group there.
|
||||||
target_include_directories(game_base PRIVATE ${GAME_INCLUDE_DIRS})
|
set(JSYSTEM_LINK_LIBRARIES "$<LINK_GROUP:RESCAN,${JSYSTEM_LIBRARIES}>")
|
||||||
|
|
||||||
# This implicitly pulls in the library include directories even though no
|
|
||||||
# linking actually takes place for object libraries
|
|
||||||
target_link_libraries(game_debug PRIVATE ${GAME_LIBS})
|
|
||||||
target_link_libraries(game_base PRIVATE ${GAME_LIBS})
|
|
||||||
|
|
||||||
# Combined game library
|
|
||||||
add_library(game STATIC
|
|
||||||
$<TARGET_OBJECTS:game_base>
|
|
||||||
$<TARGET_OBJECTS:game_debug>)
|
|
||||||
target_link_libraries(game PUBLIC ${GAME_LIBS})
|
|
||||||
|
|
||||||
if(ANDROID)
|
|
||||||
add_library(dusk SHARED src/dusk/main.cpp)
|
|
||||||
set_target_properties(dusk PROPERTIES OUTPUT_NAME main)
|
|
||||||
else ()
|
|
||||||
add_executable(dusk src/dusk/main.cpp)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_compile_definitions(dusk PRIVATE TARGET_PC AVOID_UB=1 VERSION=0)
|
set(DUSK_FILES src/dusk/main.cpp ${GAME_BASE_FILES} ${GAME_DEBUG_FILES})
|
||||||
target_include_directories(dusk PRIVATE include)
|
if(ANDROID)
|
||||||
target_link_libraries(dusk PRIVATE game aurora::main)
|
add_library(dusklight SHARED ${DUSK_FILES})
|
||||||
|
set_target_properties(dusklight PROPERTIES OUTPUT_NAME main)
|
||||||
|
else ()
|
||||||
|
add_executable(dusklight ${DUSK_FILES})
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_compile_definitions(dusklight PRIVATE ${GAME_COMPILE_DEFS})
|
||||||
|
target_include_directories(dusklight PRIVATE ${GAME_INCLUDE_DIRS})
|
||||||
|
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>")
|
||||||
if (TARGET crashpad_handler)
|
if (TARGET crashpad_handler)
|
||||||
add_dependencies(dusk crashpad_handler)
|
add_dependencies(dusklight crashpad_handler)
|
||||||
|
add_custom_command(TARGET dusklight POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
"$<TARGET_FILE:crashpad_handler>"
|
||||||
|
"$<TARGET_FILE_DIR:dusklight>"
|
||||||
|
COMMENT "Copying crashpad handler"
|
||||||
|
)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
# SDLActivity loads SDL_main via dlsym on Android. Since aurora::main is a static
|
# SDLActivity loads SDL_main via dlsym on Android. Since aurora::main is a static
|
||||||
# archive, force an undefined reference so the linker keeps the SDL_main object.
|
# archive, force an undefined reference so the linker keeps the SDL_main object.
|
||||||
target_link_options(dusk PRIVATE "-Wl,-u,SDL_main")
|
target_link_options(dusklight PRIVATE "-Wl,-u,SDL_main")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT APPLE)
|
if (NOT APPLE)
|
||||||
add_custom_command(TARGET dusk POST_BUILD
|
add_custom_command(TARGET dusklight POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||||
"${CMAKE_SOURCE_DIR}/res"
|
"${CMAKE_SOURCE_DIR}/res"
|
||||||
"$<TARGET_FILE_DIR:dusk>/res"
|
"$<TARGET_FILE_DIR:dusklight>/res"
|
||||||
COMMENT "Copying resources"
|
COMMENT "Copying resources"
|
||||||
)
|
)
|
||||||
endif ()
|
endif ()
|
||||||
@@ -395,9 +470,9 @@ endif ()
|
|||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(DUSK_WINDOWS_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/windows)
|
set(DUSK_WINDOWS_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/windows)
|
||||||
set(DUSK_WINDOWS_ICON_PNG ${CMAKE_CURRENT_SOURCE_DIR}/res/icon.png)
|
set(DUSK_WINDOWS_ICON_PNG ${CMAKE_CURRENT_SOURCE_DIR}/res/icon.png)
|
||||||
set(DUSK_WINDOWS_ICON_ICO ${CMAKE_CURRENT_BINARY_DIR}/dusk.ico)
|
set(DUSK_WINDOWS_ICON_ICO ${CMAKE_CURRENT_BINARY_DIR}/dusklight.ico)
|
||||||
set(DUSK_WINDOWS_RC ${CMAKE_CURRENT_BINARY_DIR}/dusk.rc)
|
set(DUSK_WINDOWS_RC ${CMAKE_CURRENT_BINARY_DIR}/dusklight.rc)
|
||||||
set(DUSK_WINDOWS_MANIFEST ${CMAKE_CURRENT_BINARY_DIR}/dusk.manifest)
|
set(DUSK_WINDOWS_MANIFEST ${CMAKE_CURRENT_BINARY_DIR}/dusklight.manifest)
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${DUSK_WINDOWS_ICON_ICO}
|
OUTPUT ${DUSK_WINDOWS_ICON_ICO}
|
||||||
@@ -410,14 +485,14 @@ if (WIN32)
|
|||||||
COMMENT "Generating Windows icon"
|
COMMENT "Generating Windows icon"
|
||||||
)
|
)
|
||||||
|
|
||||||
configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusk.manifest.in ${DUSK_WINDOWS_MANIFEST} @ONLY)
|
configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusklight.manifest.in ${DUSK_WINDOWS_MANIFEST} @ONLY)
|
||||||
configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusk.rc.in ${DUSK_WINDOWS_RC} @ONLY)
|
configure_file(${DUSK_WINDOWS_RESOURCE_DIR}/dusklight.rc.in ${DUSK_WINDOWS_RC} @ONLY)
|
||||||
|
|
||||||
target_sources(dusk PRIVATE ${DUSK_WINDOWS_ICON_ICO} ${DUSK_WINDOWS_RC})
|
target_sources(dusklight PRIVATE ${DUSK_WINDOWS_ICON_ICO} ${DUSK_WINDOWS_RC})
|
||||||
set_target_properties(dusk PROPERTIES WIN32_EXECUTABLE TRUE)
|
set_target_properties(dusklight PROPERTIES WIN32_EXECUTABLE TRUE)
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
target_link_options(dusk PRIVATE /MANIFEST:NO)
|
target_link_options(dusklight PRIVATE /MANIFEST:NO)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
@@ -433,10 +508,10 @@ if (APPLE)
|
|||||||
file(GLOB_RECURSE DUSK_RESOURCE_FILES
|
file(GLOB_RECURSE DUSK_RESOURCE_FILES
|
||||||
"${DUSK_RESOURCE_DIR}/Assets.car"
|
"${DUSK_RESOURCE_DIR}/Assets.car"
|
||||||
"${DUSK_RESOURCE_DIR}/Base.lproj/*"
|
"${DUSK_RESOURCE_DIR}/Base.lproj/*"
|
||||||
"${DUSK_RESOURCE_DIR}/Dusk.icns")
|
"${DUSK_RESOURCE_DIR}/Dusklight.icns")
|
||||||
file(GLOB_RECURSE DUSK_APP_RESOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/res/*")
|
file(GLOB_RECURSE DUSK_APP_RESOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/res/*")
|
||||||
target_sources(dusk PRIVATE ${DUSK_RESOURCE_FILES})
|
target_sources(dusklight PRIVATE ${DUSK_RESOURCE_FILES})
|
||||||
target_sources(dusk PRIVATE ${DUSK_APP_RESOURCE_FILES})
|
target_sources(dusklight PRIVATE ${DUSK_APP_RESOURCE_FILES})
|
||||||
foreach (FILE ${DUSK_RESOURCE_FILES})
|
foreach (FILE ${DUSK_RESOURCE_FILES})
|
||||||
file(RELATIVE_PATH NEW_FILE "${DUSK_RESOURCE_DIR}" ${FILE})
|
file(RELATIVE_PATH NEW_FILE "${DUSK_RESOURCE_DIR}" ${FILE})
|
||||||
get_filename_component(NEW_FILE_PATH ${NEW_FILE} DIRECTORY)
|
get_filename_component(NEW_FILE_PATH ${NEW_FILE} DIRECTORY)
|
||||||
@@ -448,29 +523,36 @@ if (APPLE)
|
|||||||
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_target_properties(
|
set_target_properties(
|
||||||
dusk 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}
|
||||||
MACOSX_BUNDLE_BUNDLE_VERSION ${DUSK_VERSION_STRING}
|
MACOSX_BUNDLE_BUNDLE_VERSION ${DUSK_VERSION_STRING}
|
||||||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${DUSK_SHORT_VERSION_STRING}
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${DUSK_SHORT_VERSION_STRING}
|
||||||
MACOSX_BUNDLE_INFO_PLIST ${DUSK_INFO_PLIST}
|
MACOSX_BUNDLE_INFO_PLIST ${DUSK_INFO_PLIST}
|
||||||
OUTPUT_NAME Dusk
|
OUTPUT_NAME Dusklight
|
||||||
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
|
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "YES"
|
||||||
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
|
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
|
||||||
)
|
)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (APPLE AND NOT IOS AND NOT TVOS)
|
||||||
|
find_library(APPKIT_FRAMEWORK AppKit REQUIRED)
|
||||||
|
target_sources(dusklight PRIVATE src/dusk/file_select_macos.mm)
|
||||||
|
set_source_files_properties(src/dusk/file_select_macos.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
||||||
|
target_link_libraries(dusklight PRIVATE ${APPKIT_FRAMEWORK})
|
||||||
|
endif ()
|
||||||
|
|
||||||
if (IOS)
|
if (IOS)
|
||||||
find_library(UIKIT_FRAMEWORK UIKit REQUIRED)
|
find_library(UIKIT_FRAMEWORK UIKit REQUIRED)
|
||||||
find_library(UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK UniformTypeIdentifiers REQUIRED)
|
find_library(UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK UniformTypeIdentifiers REQUIRED)
|
||||||
target_sources(dusk PRIVATE src/dusk/ios/FileSelectDialog.m)
|
target_sources(dusklight PRIVATE src/dusk/ios/FileSelectDialog.m)
|
||||||
set_source_files_properties(src/dusk/ios/FileSelectDialog.m PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
set_source_files_properties(src/dusk/ios/FileSelectDialog.m PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
||||||
target_link_libraries(dusk PRIVATE ${UIKIT_FRAMEWORK} ${UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK})
|
target_link_libraries(dusklight PRIVATE ${UIKIT_FRAMEWORK} ${UNIFORM_TYPE_IDENTIFIERS_FRAMEWORK})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake)
|
include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake)
|
||||||
aurora_copy_runtime_dlls(dusk)
|
aurora_copy_runtime_dlls(dusklight)
|
||||||
|
|
||||||
if (DUSK_SELECTED_OPT)
|
if (DUSK_SELECTED_OPT)
|
||||||
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
|
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
|
||||||
@@ -508,13 +590,13 @@ function(get_target_prefix target result_var)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
endfunction()
|
endfunction()
|
||||||
list(APPEND BINARY_TARGETS dusk)
|
list(APPEND BINARY_TARGETS dusklight)
|
||||||
set(EXTRA_TARGETS "")
|
set(EXTRA_TARGETS "")
|
||||||
if (TARGET crashpad_handler)
|
if (TARGET crashpad_handler)
|
||||||
list(APPEND EXTRA_TARGETS crashpad_handler)
|
list(APPEND EXTRA_TARGETS crashpad_handler)
|
||||||
endif ()
|
endif ()
|
||||||
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
aurora_install_runtime_dlls(dusk ${CMAKE_INSTALL_PREFIX})
|
aurora_install_runtime_dlls(dusklight ${CMAKE_INSTALL_PREFIX})
|
||||||
if (NOT APPLE)
|
if (NOT APPLE)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/res DESTINATION ${CMAKE_INSTALL_PREFIX})
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/res DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
endif ()
|
endif ()
|
||||||
|
|||||||
+43
-5
@@ -352,13 +352,41 @@
|
|||||||
"ANDROID_ABI": "x86_64"
|
"ANDROID_ABI": "x86_64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "x-android-ci",
|
||||||
|
"hidden": true,
|
||||||
|
"inherits": [
|
||||||
|
"android-base",
|
||||||
|
"ci"
|
||||||
|
],
|
||||||
|
"cacheVariables": {
|
||||||
|
"DUSK_ENABLE_SENTRY_NATIVE": {
|
||||||
|
"type": "BOOL",
|
||||||
|
"value": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x-android-ci-arm64",
|
||||||
|
"binaryDir": "${sourceDir}/build/android-arm64",
|
||||||
|
"inherits": [
|
||||||
|
"x-android-ci"
|
||||||
|
],
|
||||||
|
"cacheVariables": {
|
||||||
|
"ANDROID_ABI": "arm64-v8a",
|
||||||
|
"Rust_CARGO_TARGET": "aarch64-linux-android"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "x-linux-ci",
|
"name": "x-linux-ci",
|
||||||
"hidden": true,
|
"hidden": true,
|
||||||
"inherits": [
|
"inherits": [
|
||||||
"relwithdebinfo",
|
"relwithdebinfo",
|
||||||
"ci"
|
"ci"
|
||||||
]
|
],
|
||||||
|
"cacheVariables": {
|
||||||
|
"AURORA_SDL3_PROVIDER": "vendor"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "x-linux-ci-gcc",
|
"name": "x-linux-ci-gcc",
|
||||||
@@ -409,6 +437,7 @@
|
|||||||
"x-macos-ci"
|
"x-macos-ci"
|
||||||
],
|
],
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
|
"AURORA_DAWN_PROVIDER": "vendor",
|
||||||
"CMAKE_OSX_ARCHITECTURES": "x86_64",
|
"CMAKE_OSX_ARCHITECTURES": "x86_64",
|
||||||
"Rust_CARGO_TARGET": "x86_64-apple-darwin"
|
"Rust_CARGO_TARGET": "x86_64-apple-darwin"
|
||||||
}
|
}
|
||||||
@@ -522,7 +551,7 @@
|
|||||||
"description": "iOS release build with debug info",
|
"description": "iOS release build with debug info",
|
||||||
"displayName": "iOS RelWithDebInfo",
|
"displayName": "iOS RelWithDebInfo",
|
||||||
"targets": [
|
"targets": [
|
||||||
"dusk"
|
"dusklight"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -531,7 +560,7 @@
|
|||||||
"description": "tvOS release build with debug info",
|
"description": "tvOS release build with debug info",
|
||||||
"displayName": "tvOS RelWithDebInfo",
|
"displayName": "tvOS RelWithDebInfo",
|
||||||
"targets": [
|
"targets": [
|
||||||
"dusk"
|
"dusklight"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -540,7 +569,7 @@
|
|||||||
"description": "Android arm64-v8a release build with debug info",
|
"description": "Android arm64-v8a release build with debug info",
|
||||||
"displayName": "Android arm64-v8a RelWithDebInfo",
|
"displayName": "Android arm64-v8a RelWithDebInfo",
|
||||||
"targets": [
|
"targets": [
|
||||||
"dusk"
|
"dusklight"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -549,7 +578,16 @@
|
|||||||
"description": "Android x86_64 release build with debug info",
|
"description": "Android x86_64 release build with debug info",
|
||||||
"displayName": "Android x86_64 RelWithDebInfo",
|
"displayName": "Android x86_64 RelWithDebInfo",
|
||||||
"targets": [
|
"targets": [
|
||||||
"dusk"
|
"dusklight"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x-android-ci-arm64",
|
||||||
|
"configurePreset": "x-android-ci-arm64",
|
||||||
|
"description": "(Internal) Android CI arm64-v8a",
|
||||||
|
"displayName": "(Internal) Android CI arm64-v8a",
|
||||||
|
"targets": [
|
||||||
|
"dusklight"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,59 +1,69 @@
|
|||||||

|
<div align="center">
|
||||||
|
<img src="res/logo.png" alt="Logo" width="640">
|
||||||
|
|
||||||
- ### **[Official Website](https://twilitrealm.dev)**
|
<p align="center">
|
||||||
- ### **[Discord](https://discord.gg/QACynxeyna)**
|
<a href="https://twilitrealm.dev">Official Website</a>
|
||||||
|
•
|
||||||
|
<a href="https://discord.gg/6NpMhefCK9">Discord</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
# Overview
|
||||||
|
|
||||||
|
Dusklight is a reverse-engineered reimplementation of Twilight Princess.
|
||||||
|
|
||||||
|
It aims to be as accurate as possible to the original while also providing new options, enhancements, and tools to customize your experience.
|
||||||
|
|
||||||
# Setup
|
# Setup
|
||||||
**⚠️Dusk does NOT provide any copyrighted assets. You must provide your own copy of the game.**
|
|
||||||
|
|
||||||
### 1. Verify your ROM dump
|
> [!IMPORTANT]
|
||||||
First make sure your dump of the game is clean and supported by Dusk. You can do this by checking the sha1 hash of your dump against this list of supported versions.
|
> Dusklight does *not* provide any copyrighted assets. You must provide your own copy of the original game.
|
||||||
|
|
||||||
| Version | sha1 hash |
|
> [!IMPORTANT]
|
||||||
| ------------ | ---------------------------------------- |
|
> At a minimum, Dusklight requires a GPU with support for either D3D12, Vulkan, or Metal. Your experience with specific hardware, operating systems, and drivers may vary. In particular, older Intel iGPUs have a high likelihood of incompatibility. We are also aware of a number of issues on devices with Adreno GPUs and are working to resolve them.
|
||||||
| GameCube USA | 75edd3ddff41f125d1b4ce1a40378f1b565519e7 |
|
|
||||||
|
|
||||||
### 2. Download [Dusk](https://github.com/TwilitRealm/dusk/releases)
|
### 1. Verify your dump
|
||||||
|
|
||||||
|
First, make sure your dump of the game is clean and supported by Dusklight. You can do this by checking the SHA-1 hash of your dump against this list of supported versions:
|
||||||
|
|
||||||
|
| Version | SHA-1 hash |
|
||||||
|
|--------------| ------------------------------------------ |
|
||||||
|
| GameCube USA | `75edd3ddff41f125d1b4ce1a40378f1b565519e7` |
|
||||||
|
| GameCube EUR | `2601822a488eeb86fb89db16ca8f29c2c953e1ca` |
|
||||||
|
|
||||||
|
*Support for other versions of the game is planned in the future.
|
||||||
|
|
||||||
|
### 2. Download [Dusklight](https://github.com/TwilitRealm/dusklight/releases)
|
||||||
|
|
||||||
### 3. Setup the game
|
### 3. Setup the game
|
||||||
#### Windows
|
**Windows / macOS / Linux**
|
||||||
- Extract the zip folder
|
- Extract the .zip file
|
||||||
- Place your dump of the game into the same folder where you extracted to
|
- Launch Dusklight
|
||||||
- Launch `dusk.exe`
|
- Press **Select Disc Image** and provide the path to your supported game dump
|
||||||
|
- Press **Play**!
|
||||||
|
|
||||||
#### macOS
|
**iOS**
|
||||||
- TODO
|
- Follow the [iOS setup guide](docs/ios-install-altstore.md)
|
||||||
|
|
||||||
#### Linux
|
**Android**
|
||||||
- TODO
|
- Install the Dusklight APK
|
||||||
|
- Launch Dusklight
|
||||||
#### iOS
|
- Press **Select Disc Image** and provide the path to your supported game dump
|
||||||
- TODO
|
- Press **Play**!
|
||||||
|
|
||||||
#### android
|
|
||||||
- TODO
|
|
||||||
|
|
||||||
# Building
|
# Building
|
||||||
If you'd like to build Dusk from source, please read the [build instructions](docs/building.md).
|
|
||||||
|
If you'd like to build Dusklight from source, please read the [build instructions](docs/building.md).
|
||||||
|
|
||||||
|
Pull requests are welcomed! Note that we do not accept contributions that are primarily AI-generated and will close your PR if we suspect as much. Please also see the [code conventions](docs/code-conventions.md).
|
||||||
|
|
||||||
# Credits
|
# Credits
|
||||||
- Taka
|
|
||||||
- encounter
|
|
||||||
- Antidote
|
|
||||||
- caseif
|
|
||||||
- CraftyBoss
|
|
||||||
- crowell
|
|
||||||
- dooplecks
|
|
||||||
- gymnast86
|
|
||||||
- Irastris
|
|
||||||
- kipcode66
|
|
||||||
- Lars
|
|
||||||
- LunarSoap
|
|
||||||
- Maddie
|
|
||||||
- MelonSpeedruns
|
|
||||||
- Pheenoh
|
|
||||||
- PJB
|
|
||||||
- Roeming
|
|
||||||
- YunataSavior
|
|
||||||
|
|
||||||
Special thanks to the TP Decomp team, the GC/Wii Decomp community, the Aurora developers, and the TP speedrunning community.
|
Special thanks to the [TP decompilation](https://github.com/zeldaret/tp) team, the GC/Wii decompilation community, the [Aurora](https://github.com/encounter/aurora) developers, the [TP speedrunning community](https://zsrtp.link), and all [contributors](https://github.com/TwilitRealm/dusklight/graphs/contributors).
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<div align="center">
|
||||||
|
<a href="https://github.com/encounter/aurora">
|
||||||
|
<img src="assets/aurora-powered.png" alt="Powered by Aurora" width="800">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 85 KiB |
@@ -0,0 +1,66 @@
|
|||||||
|
<svg width="600" height="600" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="150" cy="150" r="105" fill="none" stroke="white" stroke-width="4"/>
|
||||||
|
<circle cx="150" cy="150" r="95" fill="none" stroke="white" stroke-width="4"/>
|
||||||
|
<circle cx="150" cy="150" r="60" fill="none" stroke="white" stroke-width="4"/>
|
||||||
|
<circle cx="150" cy="150" r="75" fill="none" stroke="white" stroke-width="4"/>
|
||||||
|
|
||||||
|
<defs>
|
||||||
|
<line id="ray" x1="150" y1="55" x2="150" y2="45"/>
|
||||||
|
<clipPath id="zigzag-clip">
|
||||||
|
<circle cx="150" cy="150" r="75"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<g stroke="white" stroke-width="3">
|
||||||
|
<use href="#ray"/>
|
||||||
|
<use href="#ray" transform="rotate(18 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(36 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(54 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(72 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(90 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(108 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(126 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(144 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(162 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(180 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(198 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(216 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(234 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(252 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(270 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(288 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(306 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(324 150 150)"/>
|
||||||
|
<use href="#ray" transform="rotate(342 150 150)"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<polygon fill="none" stroke="white" stroke-width="4" opacity="1" clip-path="url(#zigzag-clip)"
|
||||||
|
points="
|
||||||
|
126.82,78.67
|
||||||
|
150,90
|
||||||
|
173.18,78.67
|
||||||
|
185.27,101.46
|
||||||
|
210.68,105.92
|
||||||
|
207.06,131.46
|
||||||
|
225,150
|
||||||
|
207.06,168.54
|
||||||
|
210.68,194.08
|
||||||
|
185.27,198.54
|
||||||
|
173.18,221.33
|
||||||
|
150,210
|
||||||
|
126.82,221.33
|
||||||
|
114.73,198.54
|
||||||
|
89.32,194.08
|
||||||
|
92.94,168.54
|
||||||
|
75,150
|
||||||
|
92.94,131.46
|
||||||
|
89.32,105.92
|
||||||
|
114.73,101.46
|
||||||
|
"/>
|
||||||
|
|
||||||
|
<g fill="none" stroke="white" stroke-width="4">
|
||||||
|
<polygon points="150,105 130,140 170,140"/>
|
||||||
|
<polygon points="130,140 110,175 150,175"/>
|
||||||
|
<polygon points="170,140 150,175 190,175"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
+17
-9
@@ -1,18 +1,26 @@
|
|||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
shopt -s extglob
|
|
||||||
|
if [[ -n "${GITHUB_WORKSPACE:-}" ]]; then
|
||||||
|
cd "$GITHUB_WORKSPACE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
build_dir="$PWD/build"
|
||||||
|
linuxdeploy="$build_dir/linuxdeploy-$(uname -m).AppImage"
|
||||||
|
|
||||||
# Get linuxdeploy
|
# Get linuxdeploy
|
||||||
cd "$RUNNER_WORKSPACE"
|
mkdir -p "$build_dir"
|
||||||
curl -fOL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$(uname -m).AppImage
|
curl -fL "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$(uname -m).AppImage" -o "$linuxdeploy"
|
||||||
chmod +x linuxdeploy-$(uname -m).AppImage
|
chmod +x "$linuxdeploy"
|
||||||
|
|
||||||
# Build AppImage
|
# Build AppImage
|
||||||
cd "$GITHUB_WORKSPACE"
|
|
||||||
mkdir -p build/appdir/usr/{bin,share/{applications,icons/hicolor}}
|
mkdir -p build/appdir/usr/{bin,share/{applications,icons/hicolor}}
|
||||||
cp -r build/install/!(*.*) build/appdir/usr/bin
|
for install_path in build/install/*; do
|
||||||
|
[[ "$(basename "$install_path")" == *.* ]] && continue
|
||||||
|
cp -r "$install_path" build/appdir/usr/bin
|
||||||
|
done
|
||||||
cp -r platforms/freedesktop/{16x16,32x32,48x48,64x64,128x128,256x256,512x512,1024x1024} build/appdir/usr/share/icons/hicolor
|
cp -r platforms/freedesktop/{16x16,32x32,48x48,64x64,128x128,256x256,512x512,1024x1024} build/appdir/usr/share/icons/hicolor
|
||||||
cp platforms/freedesktop/dusk.desktop build/appdir/usr/share/applications
|
cp platforms/freedesktop/dusklight.desktop build/appdir/usr/share/applications
|
||||||
|
|
||||||
cd build/install
|
cd build/install
|
||||||
VERSION="$DUSK_VERSION" NO_STRIP=1 "$RUNNER_WORKSPACE"/linuxdeploy-$(uname -m).AppImage \
|
VERSION="$DUSK_VERSION" NO_STRIP=1 "$linuxdeploy" \
|
||||||
-l /usr/lib/x86_64-linux-gnu/libusb-1.0.so --appdir "$GITHUB_WORKSPACE"/build/appdir --output appimage
|
-l /usr/lib/x86_64-linux-gnu/libusb-1.0.so --appdir "$build_dir/appdir" --output appimage
|
||||||
|
|||||||
@@ -13,13 +13,3 @@ buildType:
|
|||||||
short: RelWithDebInfo
|
short: RelWithDebInfo
|
||||||
long: Optimized, with debug symbols
|
long: Optimized, with debug symbols
|
||||||
buildType: RelWithDebInfo
|
buildType: RelWithDebInfo
|
||||||
|
|
||||||
tp_version:
|
|
||||||
default: GZ2E01
|
|
||||||
description: TP Version
|
|
||||||
choices:
|
|
||||||
GZ2E01:
|
|
||||||
short: GZ2E01
|
|
||||||
long: GZ2E01
|
|
||||||
settings:
|
|
||||||
DUSK_TP_VERSION: GZ2E01
|
|
||||||
|
|||||||
+5
-5
@@ -36,10 +36,10 @@
|
|||||||
sudo dnf groupinstall "Development Tools" "Development Libraries"
|
sudo dnf groupinstall "Development Tools" "Development Libraries"
|
||||||
```
|
```
|
||||||
#### Setup
|
#### Setup
|
||||||
Clone and initialize the Dusk repository
|
Clone and initialize the Dusklight repository
|
||||||
```sh
|
```sh
|
||||||
git clone --recursive https://github.com/TwilitRealm/dusk.git
|
git clone --recursive https://github.com/TwilitRealm/dusklight.git
|
||||||
cd dusk
|
cd dusklight
|
||||||
git pull
|
git pull
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
@@ -93,6 +93,6 @@ Alternate presets available:
|
|||||||
#### Running
|
#### Running
|
||||||
Pass the disc image as a positional argument. Supported formats: ISO (GCM), RVZ, WIA, WBFS, CISO, GCZ
|
Pass the disc image as a positional argument. Supported formats: ISO (GCM), RVZ, WIA, WBFS, CISO, GCZ
|
||||||
```sh
|
```sh
|
||||||
build/{preset}/dusk /path/to/game.rvz
|
build/{preset}/dusklight/path/to/game.rvz
|
||||||
```
|
```
|
||||||
If no path is specified, Dusk defaults to `game.iso` in the current working directory.
|
If no path is specified, Dusklight defaults to `game.iso` in the current working directory.
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Code conventions for Dusk
|
||||||
|
|
||||||
|
## Upstream when appropriate
|
||||||
|
|
||||||
|
Bug fixes, documentation improvements, code cleanup, etc that also apply to the [original decompilation project](https://github.com/zeldaret/tp) should preferably be PR'd there.
|
||||||
|
|
||||||
|
## Properly indicate Dusk-modified code
|
||||||
|
|
||||||
|
When modifying original game code (i.e. in decomp) for Dusk's purposes, please clearly delineate such code as being Dusk-specific. Generally, this can be done by using `#if TARGET_PC` and keeping the original code in place. Use `#if AVOID_UB` for Undefined Behavior fixes to the original codebase.
|
||||||
|
|
||||||
|
## Miscellaneous things
|
||||||
|
|
||||||
|
* The original codebase makes heavy use of global `operator new` and similar overloads to allocate into a strict tree of heaps. This would cause many linkage headaches for us, so effectively all uses of `new` or `delete` in the original game code have been replaced with `JKR_NEW`, `JKR_DELETE`, or similar macros. See `JKRHeap.h` for the full list.
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Installing Dusklight on iOS via AltStore
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Mac with Homebrew installed
|
||||||
|
- iPhone connected via USB
|
||||||
|
- Dusklight IPA file (download the latest `Dusklight-vX.X.X-ios-arm64.ipa` from the [releases page](https://github.com/TwilitRealm/dusk/releases))
|
||||||
|
- Game disc - `GZ2E01` (Gamecube USA) or `GZ2PE01` (Gamecube PAL)
|
||||||
|
|
||||||
|
## 1. Install AltServer
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install altserver
|
||||||
|
open -a AltServer
|
||||||
|
```
|
||||||
|
|
||||||
|
AltServer will appear in your menu bar.
|
||||||
|
|
||||||
|
## 2. Enable Developer Mode (iOS 16+)
|
||||||
|
|
||||||
|
- On your iPhone, go to **Settings > Privacy & Security > Developer Mode**
|
||||||
|
- Toggle it on and restart when prompted
|
||||||
|
|
||||||
|
## 3. Install AltStore on Your iPhone
|
||||||
|
|
||||||
|
- Click AltServer in the menu bar
|
||||||
|
- Click **Install AltStore > [Your iPhone]**
|
||||||
|
- Enter your Apple ID credentials when prompted
|
||||||
|
- On your iPhone, go to **Settings > General > VPN & Device Management**
|
||||||
|
- Tap your Apple ID under "Developer App" and tap **Trust**
|
||||||
|
|
||||||
|
## 4. Copy Files to Your iPhone
|
||||||
|
|
||||||
|
Transfer the IPA and game disc to your iPhone so they're accessible in the Files app. A few ways to do this:
|
||||||
|
|
||||||
|
- **AirDrop** - Right-click the files on your Mac and choose Share > AirDrop
|
||||||
|
- **iCloud Drive** - Place files in iCloud Drive on your Mac and they'll sync to Files on your iPhone
|
||||||
|
- **USB transfer** - Connect your iPhone and drag files via Finder's sidebar
|
||||||
|
- **Cloud storage** - Upload to Google Drive, Dropbox, etc. and download on your iPhone
|
||||||
|
|
||||||
|
## 5. Install via AltStore
|
||||||
|
|
||||||
|
- Open **AltStore** on your iPhone
|
||||||
|
- Go to the **My Apps** tab
|
||||||
|
- Tap the **+** button (top left)
|
||||||
|
- Open the **Files** app and select the `.ipa` file
|
||||||
Vendored
+1
-1
Submodule extern/aurora updated: 672f1e8e5e...5703c68d46
+160
-14
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
set(DOLZEL_FILES
|
set(DOLZEL_FILES
|
||||||
src/m_Do/m_Do_main.cpp
|
src/m_Do/m_Do_main.cpp
|
||||||
src/m_Do/m_Do_printf.cpp
|
#src/m_Do/m_Do_printf.cpp
|
||||||
src/m_Do/m_Do_audio.cpp
|
src/m_Do/m_Do_audio.cpp
|
||||||
src/m_Do/m_Do_controller_pad.cpp
|
src/m_Do/m_Do_controller_pad.cpp
|
||||||
#src/m_Do/m_Re_controller_pad.cpp
|
#src/m_Do/m_Re_controller_pad.cpp
|
||||||
@@ -15,7 +15,6 @@ set(DOLZEL_FILES
|
|||||||
src/m_Do/m_Do_DVDError.cpp
|
src/m_Do/m_Do_DVDError.cpp
|
||||||
src/m_Do/m_Do_MemCard.cpp
|
src/m_Do/m_Do_MemCard.cpp
|
||||||
src/m_Do/m_Do_MemCardRWmng.cpp
|
src/m_Do/m_Do_MemCardRWmng.cpp
|
||||||
src/m_Do/m_Do_machine_exception.cpp
|
|
||||||
src/m_Do/m_Do_hostIO.cpp
|
src/m_Do/m_Do_hostIO.cpp
|
||||||
src/c/c_damagereaction.cpp
|
src/c/c_damagereaction.cpp
|
||||||
src/c/c_dylink.cpp
|
src/c/c_dylink.cpp
|
||||||
@@ -315,7 +314,7 @@ set(SSYSTEM_FILES
|
|||||||
src/SSystem/SStandard/s_basic.cpp
|
src/SSystem/SStandard/s_basic.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(JSYSTEM_DEBUG_FILES
|
add_library(JSystem_JParticle STATIC
|
||||||
libs/JSystem/src/JParticle/JPAResourceManager.cpp
|
libs/JSystem/src/JParticle/JPAResourceManager.cpp
|
||||||
libs/JSystem/src/JParticle/JPAResource.cpp
|
libs/JSystem/src/JParticle/JPAResource.cpp
|
||||||
libs/JSystem/src/JParticle/JPABaseShape.cpp
|
libs/JSystem/src/JParticle/JPABaseShape.cpp
|
||||||
@@ -331,10 +330,19 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JParticle/JPAEmitter.cpp
|
libs/JSystem/src/JParticle/JPAEmitter.cpp
|
||||||
libs/JSystem/src/JParticle/JPAParticle.cpp
|
libs/JSystem/src/JParticle/JPAParticle.cpp
|
||||||
libs/JSystem/src/JParticle/JPAMath.cpp
|
libs/JSystem/src/JParticle/JPAMath.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JFramework STATIC
|
||||||
libs/JSystem/src/JFramework/JFWSystem.cpp
|
libs/JSystem/src/JFramework/JFWSystem.cpp
|
||||||
libs/JSystem/src/JFramework/JFWDisplay.cpp
|
libs/JSystem/src/JFramework/JFWDisplay.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_J3DU STATIC
|
||||||
libs/JSystem/src/J3DU/J3DUClipper.cpp
|
libs/JSystem/src/J3DU/J3DUClipper.cpp
|
||||||
libs/JSystem/src/J3DU/J3DUDL.cpp
|
libs/JSystem/src/J3DU/J3DUDL.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JKernel STATIC
|
||||||
libs/JSystem/src/JKernel/JKRHeap.cpp
|
libs/JSystem/src/JKernel/JKRHeap.cpp
|
||||||
libs/JSystem/src/JKernel/JKRExpHeap.cpp
|
libs/JSystem/src/JKernel/JKRExpHeap.cpp
|
||||||
libs/JSystem/src/JKernel/JKRSolidHeap.cpp
|
libs/JSystem/src/JKernel/JKRSolidHeap.cpp
|
||||||
@@ -360,14 +368,23 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JKernel/JKRDvdRipper.cpp
|
libs/JSystem/src/JKernel/JKRDvdRipper.cpp
|
||||||
libs/JSystem/src/JKernel/JKRDvdAramRipper.cpp
|
libs/JSystem/src/JKernel/JKRDvdAramRipper.cpp
|
||||||
libs/JSystem/src/JKernel/JKRDecomp.cpp
|
libs/JSystem/src/JKernel/JKRDecomp.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JMath STATIC
|
||||||
libs/JSystem/src/JMath/JMath.cpp
|
libs/JSystem/src/JMath/JMath.cpp
|
||||||
libs/JSystem/src/JMath/random.cpp
|
libs/JSystem/src/JMath/random.cpp
|
||||||
libs/JSystem/src/JMath/JMATrigonometric.cpp
|
libs/JSystem/src/JMath/JMATrigonometric.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JSupport STATIC
|
||||||
libs/JSystem/src/JSupport/JSUList.cpp
|
libs/JSystem/src/JSupport/JSUList.cpp
|
||||||
libs/JSystem/src/JSupport/JSUInputStream.cpp
|
libs/JSystem/src/JSupport/JSUInputStream.cpp
|
||||||
libs/JSystem/src/JSupport/JSUOutputStream.cpp
|
libs/JSystem/src/JSupport/JSUOutputStream.cpp
|
||||||
libs/JSystem/src/JSupport/JSUMemoryStream.cpp
|
libs/JSystem/src/JSupport/JSUMemoryStream.cpp
|
||||||
libs/JSystem/src/JSupport/JSUFileStream.cpp
|
libs/JSystem/src/JSupport/JSUFileStream.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JUtility STATIC
|
||||||
libs/JSystem/src/JUtility/JUTCacheFont.cpp
|
libs/JSystem/src/JUtility/JUTCacheFont.cpp
|
||||||
libs/JSystem/src/JUtility/JUTResource.cpp
|
libs/JSystem/src/JUtility/JUTResource.cpp
|
||||||
libs/JSystem/src/JUtility/JUTTexture.cpp
|
libs/JSystem/src/JUtility/JUTTexture.cpp
|
||||||
@@ -388,6 +405,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JUtility/JUTConsole.cpp
|
libs/JSystem/src/JUtility/JUTConsole.cpp
|
||||||
libs/JSystem/src/JUtility/JUTDirectFile.cpp
|
libs/JSystem/src/JUtility/JUTDirectFile.cpp
|
||||||
libs/JSystem/src/JUtility/JUTFontData_Ascfont_fix12.cpp
|
libs/JSystem/src/JUtility/JUTFontData_Ascfont_fix12.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JStage STATIC
|
||||||
libs/JSystem/src/JStage/JSGActor.cpp
|
libs/JSystem/src/JStage/JSGActor.cpp
|
||||||
libs/JSystem/src/JStage/JSGAmbientLight.cpp
|
libs/JSystem/src/JStage/JSGAmbientLight.cpp
|
||||||
libs/JSystem/src/JStage/JSGCamera.cpp
|
libs/JSystem/src/JStage/JSGCamera.cpp
|
||||||
@@ -395,6 +415,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JStage/JSGLight.cpp
|
libs/JSystem/src/JStage/JSGLight.cpp
|
||||||
libs/JSystem/src/JStage/JSGObject.cpp
|
libs/JSystem/src/JStage/JSGObject.cpp
|
||||||
libs/JSystem/src/JStage/JSGSystem.cpp
|
libs/JSystem/src/JStage/JSGSystem.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_J2DGraph STATIC
|
||||||
libs/JSystem/src/J2DGraph/J2DGrafContext.cpp
|
libs/JSystem/src/J2DGraph/J2DGrafContext.cpp
|
||||||
libs/JSystem/src/J2DGraph/J2DOrthoGraph.cpp
|
libs/JSystem/src/J2DGraph/J2DOrthoGraph.cpp
|
||||||
libs/JSystem/src/J2DGraph/J2DTevs.cpp
|
libs/JSystem/src/J2DGraph/J2DTevs.cpp
|
||||||
@@ -413,6 +436,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/J2DGraph/J2DAnmLoader.cpp
|
libs/JSystem/src/J2DGraph/J2DAnmLoader.cpp
|
||||||
libs/JSystem/src/J2DGraph/J2DAnimation.cpp
|
libs/JSystem/src/J2DGraph/J2DAnimation.cpp
|
||||||
libs/JSystem/src/J2DGraph/J2DManage.cpp
|
libs/JSystem/src/J2DGraph/J2DManage.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_J3DGraphBase STATIC
|
||||||
libs/JSystem/src/J3DGraphBase/J3DGD.cpp
|
libs/JSystem/src/J3DGraphBase/J3DGD.cpp
|
||||||
libs/JSystem/src/J3DGraphBase/J3DSys.cpp
|
libs/JSystem/src/J3DGraphBase/J3DSys.cpp
|
||||||
libs/JSystem/src/J3DGraphBase/J3DVertex.cpp
|
libs/JSystem/src/J3DGraphBase/J3DVertex.cpp
|
||||||
@@ -427,6 +453,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/J3DGraphBase/J3DTevs.cpp
|
libs/JSystem/src/J3DGraphBase/J3DTevs.cpp
|
||||||
libs/JSystem/src/J3DGraphBase/J3DDrawBuffer.cpp
|
libs/JSystem/src/J3DGraphBase/J3DDrawBuffer.cpp
|
||||||
libs/JSystem/src/J3DGraphBase/J3DStruct.cpp
|
libs/JSystem/src/J3DGraphBase/J3DStruct.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_J3DGraphAnimator STATIC
|
||||||
libs/JSystem/src/J3DGraphAnimator/J3DShapeTable.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DShapeTable.cpp
|
||||||
libs/JSystem/src/J3DGraphAnimator/J3DJointTree.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DJointTree.cpp
|
||||||
libs/JSystem/src/J3DGraphAnimator/J3DModelData.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DModelData.cpp
|
||||||
@@ -438,6 +467,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/J3DGraphAnimator/J3DCluster.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DCluster.cpp
|
||||||
libs/JSystem/src/J3DGraphAnimator/J3DJoint.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DJoint.cpp
|
||||||
libs/JSystem/src/J3DGraphAnimator/J3DMaterialAttach.cpp
|
libs/JSystem/src/J3DGraphAnimator/J3DMaterialAttach.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_J3DGraphLoader STATIC
|
||||||
libs/JSystem/src/J3DGraphLoader/J3DMaterialFactory.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DMaterialFactory.cpp
|
||||||
libs/JSystem/src/J3DGraphLoader/J3DMaterialFactory_v21.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DMaterialFactory_v21.cpp
|
||||||
libs/JSystem/src/J3DGraphLoader/J3DClusterLoader.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DClusterLoader.cpp
|
||||||
@@ -446,6 +478,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/J3DGraphLoader/J3DJointFactory.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DJointFactory.cpp
|
||||||
libs/JSystem/src/J3DGraphLoader/J3DShapeFactory.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DShapeFactory.cpp
|
||||||
libs/JSystem/src/J3DGraphLoader/J3DAnmLoader.cpp
|
libs/JSystem/src/J3DGraphLoader/J3DAnmLoader.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JStudio STATIC
|
||||||
libs/JSystem/src/JStudio/JStudio/ctb.cpp
|
libs/JSystem/src/JStudio/JStudio/ctb.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio/ctb-data.cpp
|
libs/JSystem/src/JStudio/JStudio/ctb-data.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio/functionvalue.cpp
|
libs/JSystem/src/JStudio/JStudio/functionvalue.cpp
|
||||||
@@ -460,6 +495,9 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JStudio/JStudio/stb.cpp
|
libs/JSystem/src/JStudio/JStudio/stb.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio/stb-data-parse.cpp
|
libs/JSystem/src/JStudio/JStudio/stb-data-parse.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio/stb-data.cpp
|
libs/JSystem/src/JStudio/JStudio/stb-data.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JStudio_JStage STATIC
|
||||||
libs/JSystem/src/JStudio/JStudio_JStage/control.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/control.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JStage/object.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/object.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JStage/object-actor.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/object-actor.cpp
|
||||||
@@ -467,10 +505,19 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JStudio/JStudio_JStage/object-camera.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/object-camera.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JStage/object-fog.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/object-fog.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JStage/object-light.cpp
|
libs/JSystem/src/JStudio/JStudio_JStage/object-light.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JStudio_JAudio2 STATIC
|
||||||
libs/JSystem/src/JStudio/JStudio_JAudio2/control.cpp
|
libs/JSystem/src/JStudio/JStudio_JAudio2/control.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JAudio2/object-sound.cpp
|
libs/JSystem/src/JStudio/JStudio_JAudio2/object-sound.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JStudio_JParticle STATIC
|
||||||
libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp
|
libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp
|
||||||
libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp
|
libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JAudio2 STATIC
|
||||||
libs/JSystem/src/JAudio2/JASCalc.cpp
|
libs/JSystem/src/JAudio2/JASCalc.cpp
|
||||||
libs/JSystem/src/JAudio2/JASTaskThread.cpp
|
libs/JSystem/src/JAudio2/JASTaskThread.cpp
|
||||||
libs/JSystem/src/JAudio2/JASDvdThread.cpp
|
libs/JSystem/src/JAudio2/JASDvdThread.cpp
|
||||||
@@ -535,22 +582,34 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JAudio2/JAUSoundAnimator.cpp
|
libs/JSystem/src/JAudio2/JAUSoundAnimator.cpp
|
||||||
libs/JSystem/src/JAudio2/JAUSoundTable.cpp
|
libs/JSystem/src/JAudio2/JAUSoundTable.cpp
|
||||||
libs/JSystem/src/JAudio2/JAUStreamFileTable.cpp
|
libs/JSystem/src/JAudio2/JAUStreamFileTable.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JMessage STATIC
|
||||||
libs/JSystem/src/JMessage/control.cpp
|
libs/JSystem/src/JMessage/control.cpp
|
||||||
libs/JSystem/src/JMessage/data.cpp
|
libs/JSystem/src/JMessage/data.cpp
|
||||||
libs/JSystem/src/JMessage/processor.cpp
|
libs/JSystem/src/JMessage/processor.cpp
|
||||||
libs/JSystem/src/JMessage/resource.cpp
|
libs/JSystem/src/JMessage/resource.cpp
|
||||||
libs/JSystem/src/JMessage/locale.cpp
|
libs/JSystem/src/JMessage/locale.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JGadget STATIC
|
||||||
libs/JSystem/src/JGadget/binary.cpp
|
libs/JSystem/src/JGadget/binary.cpp
|
||||||
libs/JSystem/src/JGadget/define.cpp
|
libs/JSystem/src/JGadget/define.cpp
|
||||||
libs/JSystem/src/JGadget/linklist.cpp
|
libs/JSystem/src/JGadget/linklist.cpp
|
||||||
libs/JSystem/src/JGadget/search.cpp
|
libs/JSystem/src/JGadget/search.cpp
|
||||||
libs/JSystem/src/JGadget/std-vector.cpp
|
libs/JSystem/src/JGadget/std-vector.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JAHostIO STATIC
|
||||||
libs/JSystem/src/JAHostIO/JAHFrameNode.cpp
|
libs/JSystem/src/JAHostIO/JAHFrameNode.cpp
|
||||||
libs/JSystem/src/JAHostIO/JAHioMessage.cpp
|
libs/JSystem/src/JAHostIO/JAHioMessage.cpp
|
||||||
libs/JSystem/src/JAHostIO/JAHioMgr.cpp
|
libs/JSystem/src/JAHostIO/JAHioMgr.cpp
|
||||||
libs/JSystem/src/JAHostIO/JAHioNode.cpp
|
libs/JSystem/src/JAHostIO/JAHioNode.cpp
|
||||||
libs/JSystem/src/JAHostIO/JAHioUtil.cpp
|
libs/JSystem/src/JAHostIO/JAHioUtil.cpp
|
||||||
libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp
|
libs/JSystem/src/JAHostIO/JAHVirtualNode.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(JSystem_JHostIO STATIC
|
||||||
libs/JSystem/src/JHostIO/JORFile.cpp
|
libs/JSystem/src/JHostIO/JORFile.cpp
|
||||||
libs/JSystem/src/JHostIO/JORHostInfo.cpp
|
libs/JSystem/src/JHostIO/JORHostInfo.cpp
|
||||||
libs/JSystem/src/JHostIO/JORMessageBox.cpp
|
libs/JSystem/src/JHostIO/JORMessageBox.cpp
|
||||||
@@ -560,7 +619,28 @@ set(JSYSTEM_DEBUG_FILES
|
|||||||
libs/JSystem/src/JHostIO/JHIMccBuf.cpp
|
libs/JSystem/src/JHostIO/JHIMccBuf.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(JSYSTEM_FILES
|
set(JSYSTEM_LIBRARIES
|
||||||
|
JSystem_JParticle
|
||||||
|
JSystem_JFramework
|
||||||
|
JSystem_J3DU
|
||||||
|
JSystem_JKernel
|
||||||
|
JSystem_JMath
|
||||||
|
JSystem_JSupport
|
||||||
|
JSystem_JUtility
|
||||||
|
JSystem_JStage
|
||||||
|
JSystem_J2DGraph
|
||||||
|
JSystem_J3DGraphBase
|
||||||
|
JSystem_J3DGraphAnimator
|
||||||
|
JSystem_J3DGraphLoader
|
||||||
|
JSystem_JStudio
|
||||||
|
JSystem_JStudio_JStage
|
||||||
|
JSystem_JStudio_JAudio2
|
||||||
|
JSystem_JStudio_JParticle
|
||||||
|
JSystem_JAudio2
|
||||||
|
JSystem_JMessage
|
||||||
|
JSystem_JGadget
|
||||||
|
JSystem_JAHostIO
|
||||||
|
JSystem_JHostIO
|
||||||
)
|
)
|
||||||
|
|
||||||
set(REL_FILES
|
set(REL_FILES
|
||||||
@@ -1331,6 +1411,7 @@ set(DOLPHIN_FILES
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(DUSK_FILES
|
set(DUSK_FILES
|
||||||
|
include/dusk/action_bindings.h
|
||||||
include/dusk/endian_gx.hpp
|
include/dusk/endian_gx.hpp
|
||||||
include/dusk/config.hpp
|
include/dusk/config.hpp
|
||||||
include/dusk/dvd_asset.hpp
|
include/dusk/dvd_asset.hpp
|
||||||
@@ -1340,51 +1421,116 @@ set(DUSK_FILES
|
|||||||
src/dusk/asserts.cpp
|
src/dusk/asserts.cpp
|
||||||
src/dusk/config.cpp
|
src/dusk/config.cpp
|
||||||
src/dusk/crash_reporting.cpp
|
src/dusk/crash_reporting.cpp
|
||||||
|
src/dusk/data.cpp
|
||||||
|
src/dusk/data.hpp
|
||||||
src/dusk/endian.cpp
|
src/dusk/endian.cpp
|
||||||
src/dusk/extras.c
|
src/dusk/extras.c
|
||||||
src/dusk/extras.cpp
|
|
||||||
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/globals.cpp
|
src/dusk/globals.cpp
|
||||||
src/dusk/gyro.cpp
|
src/dusk/gyro.cpp
|
||||||
|
src/dusk/gamepad_color.cpp
|
||||||
|
src/dusk/autosave.cpp
|
||||||
|
src/dusk/http/http.hpp
|
||||||
src/dusk/io.cpp
|
src/dusk/io.cpp
|
||||||
src/dusk/layout.cpp
|
src/dusk/layout.cpp
|
||||||
src/dusk/logging.cpp
|
src/dusk/logging.cpp
|
||||||
src/dusk/settings.cpp
|
src/dusk/settings.cpp
|
||||||
|
src/dusk/speedrun.cpp
|
||||||
src/dusk/stubs.cpp
|
src/dusk/stubs.cpp
|
||||||
|
src/dusk/update_check.cpp
|
||||||
|
src/dusk/update_check.hpp
|
||||||
#src/dusk/m_Do_ext_dusk.cpp
|
#src/dusk/m_Do_ext_dusk.cpp
|
||||||
src/dusk/imgui/ImGuiConfig.hpp
|
src/dusk/imgui/ImGuiConfig.hpp
|
||||||
src/dusk/imgui/ImGuiConsole.hpp
|
src/dusk/imgui/ImGuiConsole.hpp
|
||||||
src/dusk/imgui/ImGuiConsole.cpp
|
src/dusk/imgui/ImGuiConsole.cpp
|
||||||
src/dusk/imgui/ImGuiEngine.cpp
|
src/dusk/imgui/ImGuiEngine.cpp
|
||||||
src/dusk/imgui/ImGuiEngine.hpp
|
src/dusk/imgui/ImGuiEngine.hpp
|
||||||
src/dusk/imgui/ImGuiMenuGame.cpp
|
|
||||||
src/dusk/imgui/ImGuiMenuGame.hpp
|
|
||||||
src/dusk/imgui/ImGuiBloomWindow.cpp
|
src/dusk/imgui/ImGuiBloomWindow.cpp
|
||||||
src/dusk/imgui/ImGuiBloomWindow.hpp
|
src/dusk/imgui/ImGuiBloomWindow.hpp
|
||||||
|
src/dusk/imgui/ImGuiEnhancedLightingWindow.cpp
|
||||||
|
src/dusk/imgui/ImGuiEnhancedLightingWindow.hpp
|
||||||
src/dusk/imgui/ImGuiMenuTools.cpp
|
src/dusk/imgui/ImGuiMenuTools.cpp
|
||||||
src/dusk/imgui/ImGuiMenuTools.hpp
|
src/dusk/imgui/ImGuiMenuTools.hpp
|
||||||
src/dusk/imgui/ImGuiMenuEnhancements.cpp
|
src/dusk/imgui/ImGuiActorSpawner.cpp
|
||||||
src/dusk/imgui/ImGuiMenuEnhancements.hpp
|
|
||||||
src/dusk/imgui/ImGuiPreLaunchWindow.cpp
|
|
||||||
src/dusk/imgui/ImGuiPreLaunchWindow.hpp
|
|
||||||
src/dusk/imgui/ImGuiFirstRunPreset.hpp
|
|
||||||
src/dusk/imgui/ImGuiFirstRunPreset.cpp
|
|
||||||
src/dusk/imgui/ImGuiProcessOverlay.cpp
|
src/dusk/imgui/ImGuiProcessOverlay.cpp
|
||||||
src/dusk/imgui/ImGuiCameraOverlay.cpp
|
src/dusk/imgui/ImGuiCameraOverlay.cpp
|
||||||
src/dusk/imgui/ImGuiHeapOverlay.cpp
|
src/dusk/imgui/ImGuiHeapOverlay.cpp
|
||||||
src/dusk/imgui/ImGuiDebugPad.cpp
|
|
||||||
src/dusk/imgui/ImGuiControllerOverlay.cpp
|
src/dusk/imgui/ImGuiControllerOverlay.cpp
|
||||||
src/dusk/imgui/ImGuiStubLog.cpp
|
src/dusk/imgui/ImGuiStubLog.cpp
|
||||||
src/dusk/imgui/ImGuiMapLoader.cpp
|
src/dusk/imgui/ImGuiMapLoader.cpp
|
||||||
src/dusk/imgui/ImGuiSaveEditor.cpp
|
src/dusk/imgui/ImGuiSaveEditor.cpp
|
||||||
src/dusk/imgui/ImGuiStateShare.hpp
|
src/dusk/imgui/ImGuiStateShare.hpp
|
||||||
src/dusk/imgui/ImGuiStateShare.cpp
|
src/dusk/imgui/ImGuiStateShare.cpp
|
||||||
|
src/dusk/ui/achievements.cpp
|
||||||
|
src/dusk/ui/achievements.hpp
|
||||||
|
src/dusk/ui/bool_button.cpp
|
||||||
|
src/dusk/ui/bool_button.hpp
|
||||||
|
src/dusk/ui/button.cpp
|
||||||
|
src/dusk/ui/button.hpp
|
||||||
|
src/dusk/ui/component.cpp
|
||||||
|
src/dusk/ui/component.hpp
|
||||||
|
src/dusk/ui/controller_config.cpp
|
||||||
|
src/dusk/ui/controller_config.hpp
|
||||||
|
src/dusk/ui/document.cpp
|
||||||
|
src/dusk/ui/document.hpp
|
||||||
|
src/dusk/ui/editor.cpp
|
||||||
|
src/dusk/ui/editor.hpp
|
||||||
|
src/dusk/ui/event.cpp
|
||||||
|
src/dusk/ui/event.hpp
|
||||||
|
src/dusk/ui/graphics_tuner.cpp
|
||||||
|
src/dusk/ui/graphics_tuner.hpp
|
||||||
|
src/dusk/ui/input.cpp
|
||||||
|
src/dusk/ui/input.hpp
|
||||||
|
src/dusk/ui/modal.cpp
|
||||||
|
src/dusk/ui/modal.hpp
|
||||||
|
src/dusk/ui/nav_types.hpp
|
||||||
|
src/dusk/ui/number_button.cpp
|
||||||
|
src/dusk/ui/number_button.hpp
|
||||||
|
src/dusk/ui/overlay.cpp
|
||||||
|
src/dusk/ui/overlay.hpp
|
||||||
|
src/dusk/ui/pane.cpp
|
||||||
|
src/dusk/ui/pane.hpp
|
||||||
|
src/dusk/ui/menu_bar.cpp
|
||||||
|
src/dusk/ui/menu_bar.hpp
|
||||||
|
src/dusk/ui/prelaunch.cpp
|
||||||
|
src/dusk/ui/prelaunch.hpp
|
||||||
|
src/dusk/ui/preset.cpp
|
||||||
|
src/dusk/ui/preset.hpp
|
||||||
|
src/dusk/ui/reporting.cpp
|
||||||
|
src/dusk/ui/reporting.hpp
|
||||||
|
src/dusk/ui/select_button.cpp
|
||||||
|
src/dusk/ui/select_button.hpp
|
||||||
|
src/dusk/ui/settings.cpp
|
||||||
|
src/dusk/ui/settings.hpp
|
||||||
|
src/dusk/ui/string_button.cpp
|
||||||
|
src/dusk/ui/string_button.hpp
|
||||||
|
src/dusk/ui/tab_bar.cpp
|
||||||
|
src/dusk/ui/tab_bar.hpp
|
||||||
|
src/dusk/ui/ui.cpp
|
||||||
|
src/dusk/ui/ui.hpp
|
||||||
|
src/dusk/ui/window.cpp
|
||||||
|
src/dusk/ui/window.hpp
|
||||||
|
src/dusk/achievements.cpp
|
||||||
src/dusk/iso_validate.cpp
|
src/dusk/iso_validate.cpp
|
||||||
|
src/dusk/livesplit.cpp
|
||||||
src/dusk/offset_ptr.cpp
|
src/dusk/offset_ptr.cpp
|
||||||
src/dusk/OSContext.cpp
|
src/dusk/OSContext.cpp
|
||||||
|
src/dusk/OSReport.cpp
|
||||||
src/dusk/OSThread.cpp
|
src/dusk/OSThread.cpp
|
||||||
src/dusk/OSMutex.cpp
|
src/dusk/OSMutex.cpp
|
||||||
|
src/dusk/discord.cpp
|
||||||
|
src/dusk/discord.hpp
|
||||||
|
src/dusk/discord_presence.cpp
|
||||||
|
src/dusk/version.cpp
|
||||||
|
src/dusk/action_bindings.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(DUSK_HTTP_BACKEND_FILES
|
||||||
|
src/dusk/http/no_backend.cpp
|
||||||
|
src/dusk/http/curl.cpp
|
||||||
|
src/dusk/http/winhttp.cpp
|
||||||
|
src/dusk/http/url_session.mm
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,30 +4,212 @@
|
|||||||
};
|
};
|
||||||
outputs = { self, nixpkgs }:
|
outputs = { self, nixpkgs }:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
supportedSystems = [
|
||||||
dusk = pkgs.stdenv.mkDerivation {
|
"x86_64-linux"
|
||||||
name = "dusk";
|
"aarch64-linux"
|
||||||
src = ./.;
|
"x86_64-darwin"
|
||||||
nativeBuildInputs = [
|
"aarch64-darwin"
|
||||||
pkgs.cmake
|
];
|
||||||
pkgs.pkg-config
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||||
pkgs.wayland
|
pkgsFor = system: import nixpkgs { inherit system; };
|
||||||
];
|
|
||||||
buildInputs = [
|
# Dependencies that are not packaged in nixpkgs (used by the Linux package build):
|
||||||
pkgs.libGL
|
buildSources = pkgs: {
|
||||||
pkgs.libX11
|
aurora-src = pkgs.fetchFromGitHub {
|
||||||
pkgs.libXcursor
|
owner = "encounter";
|
||||||
pkgs.libxi
|
repo = "aurora";
|
||||||
pkgs.libxcb
|
rev = "63606a43265a3bc18dafd500ab4d7a2108f109e6";
|
||||||
pkgs.libxrandr
|
hash = "sha256-xBvnAwGwNzav67Ac6oUz7RqDUwqgL2bsME3OOMn8Tqw=";
|
||||||
pkgs.libxscrnsaver
|
};
|
||||||
pkgs.libxtst
|
dawn-src = pkgs.fetchzip {
|
||||||
pkgs.libjpeg8
|
url = "https://github.com/encounter/dawn-build/releases/download/v20260423.175430/dawn-linux-x86_64.tar.gz";
|
||||||
pkgs.libxkbcommon
|
hash = "sha256-HXfKTLHtMPwupnFnaflCARtXVPuS/0PoCePXidjE5xs=";
|
||||||
pkgs.libglvnd
|
stripRoot = false;
|
||||||
];
|
};
|
||||||
|
nod-src = pkgs.fetchzip {
|
||||||
|
url = "https://github.com/encounter/nod/releases/download/v2.0.0-alpha.8/libnod-linux-x86_64.tar.gz";
|
||||||
|
hash = "sha256-mUqvLsbsqaZ+HAjMmHYPYO+MgtanGRTw7Gzn5uXR5rE=";
|
||||||
|
stripRoot = false;
|
||||||
|
};
|
||||||
|
# The version of imgui on nixpkgs does not map cleanly.
|
||||||
|
imgui-src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "ocornut";
|
||||||
|
repo = "imgui";
|
||||||
|
rev = "v1.91.9b-docking";
|
||||||
|
hash = "sha256-mQOJ6jCN+7VopgZ61yzaCnt4R1QLrW7+47xxMhFRHLQ=";
|
||||||
|
};
|
||||||
|
sqlite-src = pkgs.fetchzip {
|
||||||
|
url = "https://sqlite.org/2026/sqlite-amalgamation-3510300.zip";
|
||||||
|
hash = "sha256-pNMR8zxaaqfAzQ0AQBOXMct4usdjey1Q0Gnitg06UhM=";
|
||||||
|
};
|
||||||
|
rmlui-src = pkgs.fetchzip {
|
||||||
|
url = "https://github.com/mikke89/RmlUi/archive/f9b8c9e2935d5df2c7dff2c190d3968e99b0c3dc.tar.gz";
|
||||||
|
hash = "sha256-g4O/JZUrrcseOz8o2QJRt+2CeuiLnVeuDJc906xvuIg=";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Dusklight Actual (Linux x86_64 only — relies on prebuilt dawn/nod binaries)
|
||||||
|
mkDusklight = pkgs:
|
||||||
|
let srcs = buildSources pkgs; in
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
name = "dusklight";
|
||||||
|
src = ./.;
|
||||||
|
postUnpack = ''
|
||||||
|
mkdir -p $sourceRoot/extern/aurora
|
||||||
|
cp -r ${srcs.aurora-src}/. $sourceRoot/extern/aurora/
|
||||||
|
chmod -R u+w $sourceRoot/extern/aurora
|
||||||
|
sed -i '/add_subdirectory(tests)/d' $sourceRoot/extern/aurora/CMakeLists.txt
|
||||||
|
'';
|
||||||
|
# Remove last line to re-enable tests
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DFETCHCONTENT_FULLY_DISCONNECTED=ON"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_CXXOPTS=${pkgs.cxxopts.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_JSON=${pkgs.nlohmann_json.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_DAWN_PREBUILT=${srcs.dawn-src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_XXHASH=${pkgs.xxHash.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_FMT=${pkgs.fmt.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_TRACY=${pkgs.tracy.src}"
|
||||||
|
"-DAURORA_SDL3_PROVIDER=system"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_NOD_PREBUILT=${srcs.nod-src}"
|
||||||
|
"-DAURORA_NOD_PROVIDER=package"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_FREETYPE=${pkgs.freetype.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_ZSTD=${pkgs.zstd.src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_SQLITE3=${srcs.sqlite-src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_IMGUI=${srcs.imgui-src}"
|
||||||
|
"-DFETCHCONTENT_SOURCE_DIR_RMLUI=${srcs.rmlui-src}"
|
||||||
|
"-DCMAKE_CROSSCOMPILING=ON" # Tests are not working as I didn't want to work through getting google's test suite working as well. This is the only guard I could find to disable it.
|
||||||
|
];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp dusklight $out/bin/dusklight
|
||||||
|
cp -r ./res $out/bin/res
|
||||||
|
'';
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.cmake
|
||||||
|
pkgs.pkg-config
|
||||||
|
pkgs.wayland
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.libGL
|
||||||
|
pkgs.libX11
|
||||||
|
pkgs.libXcursor
|
||||||
|
pkgs.libxi
|
||||||
|
pkgs.libxcb
|
||||||
|
pkgs.libxrandr
|
||||||
|
pkgs.libxscrnsaver
|
||||||
|
pkgs.libxtst
|
||||||
|
pkgs.libjpeg8
|
||||||
|
pkgs.libxkbcommon
|
||||||
|
pkgs.libglvnd
|
||||||
|
pkgs.cxxopts
|
||||||
|
pkgs.abseil-cpp
|
||||||
|
pkgs.sdl3
|
||||||
|
pkgs.fmt
|
||||||
|
pkgs.tracy
|
||||||
|
pkgs.freetype
|
||||||
|
pkgs.zstd
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Tooling common to every supported host (Linux and macOS).
|
||||||
|
commonDevTools = pkgs: [
|
||||||
|
pkgs.cmake
|
||||||
|
pkgs.ninja
|
||||||
|
pkgs.pkg-config
|
||||||
|
pkgs.git
|
||||||
|
pkgs.python3
|
||||||
|
pkgs.python3Packages.markupsafe
|
||||||
|
pkgs.rustc
|
||||||
|
pkgs.cargo
|
||||||
|
pkgs.sccache
|
||||||
|
];
|
||||||
|
|
||||||
|
# Linux-only system libraries — mirrors the apt deps from .github/workflows/build.yml
|
||||||
|
# so the cmake presets resolve the same set of headers as CI.
|
||||||
|
linuxDevDeps = pkgs: [
|
||||||
|
# Compilers / linkers
|
||||||
|
pkgs.clang
|
||||||
|
pkgs.lld
|
||||||
|
# C/C++ utilities
|
||||||
|
pkgs.curl
|
||||||
|
pkgs.openssl
|
||||||
|
pkgs.zlib
|
||||||
|
pkgs.libpng
|
||||||
|
pkgs.libjpeg_turbo
|
||||||
|
pkgs.freetype
|
||||||
|
pkgs.zstd
|
||||||
|
pkgs.fmt
|
||||||
|
pkgs.tracy
|
||||||
|
pkgs.cxxopts
|
||||||
|
pkgs.abseil-cpp
|
||||||
|
pkgs.sdl3
|
||||||
|
pkgs.ncurses
|
||||||
|
pkgs.libunwind
|
||||||
|
pkgs.libusb1
|
||||||
|
pkgs.fuse
|
||||||
|
# Wayland / display server
|
||||||
|
pkgs.wayland
|
||||||
|
pkgs.wayland-protocols
|
||||||
|
pkgs.libxkbcommon
|
||||||
|
pkgs.libdecor
|
||||||
|
# OpenGL / Vulkan
|
||||||
|
pkgs.libGL
|
||||||
|
pkgs.libGLU
|
||||||
|
pkgs.libglvnd
|
||||||
|
pkgs.vulkan-headers
|
||||||
|
pkgs.vulkan-loader
|
||||||
|
# X11
|
||||||
|
pkgs.libX11
|
||||||
|
pkgs.libxcb
|
||||||
|
pkgs.libXcursor
|
||||||
|
pkgs.libxi
|
||||||
|
pkgs.libxrandr
|
||||||
|
pkgs.libxscrnsaver
|
||||||
|
pkgs.libxtst
|
||||||
|
pkgs.libxinerama
|
||||||
|
# Audio
|
||||||
|
pkgs.alsa-lib
|
||||||
|
pkgs.libpulseaudio
|
||||||
|
pkgs.pipewire
|
||||||
|
# System integration
|
||||||
|
pkgs.dbus
|
||||||
|
pkgs.udev
|
||||||
|
pkgs.gtk3
|
||||||
|
];
|
||||||
|
|
||||||
|
# On macOS we deliberately avoid pulling Nix's cc-wrapper so CMake picks up
|
||||||
|
# Apple Clang and the Xcode SDK directly, matching the macOS CI workflow.
|
||||||
|
mkDarwinShell = pkgs:
|
||||||
|
pkgs.mkShellNoCC {
|
||||||
|
packages = commonDevTools pkgs;
|
||||||
|
shellHook = ''
|
||||||
|
echo "Dusklight dev shell (macOS)"
|
||||||
|
echo "Requires Xcode Command Line Tools for Apple Clang and the macOS SDK."
|
||||||
|
echo "Configure: cmake --preset macos-default-relwithdebinfo"
|
||||||
|
echo "Build: cmake --build --preset macos-default-relwithdebinfo"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
mkLinuxShell = pkgs:
|
||||||
|
pkgs.mkShell {
|
||||||
|
packages = (commonDevTools pkgs) ++ (linuxDevDeps pkgs);
|
||||||
|
shellHook = ''
|
||||||
|
echo "Dusklight dev shell (Linux)"
|
||||||
|
echo "Configure: cmake --preset linux-default-relwithdebinfo"
|
||||||
|
echo " cmake --preset linux-clang-relwithdebinfo"
|
||||||
|
echo "Build: cmake --build --preset <preset>"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
mkDevShell = pkgs:
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then mkDarwinShell pkgs
|
||||||
|
else mkLinuxShell pkgs;
|
||||||
in {
|
in {
|
||||||
packages.x86_64-linux.default = dusk;
|
packages.x86_64-linux.default = mkDusklight (pkgsFor "x86_64-linux");
|
||||||
|
|
||||||
|
devShells = forAllSystems (system: {
|
||||||
|
default = mkDevShell (pkgsFor system);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4552,6 +4552,18 @@ public:
|
|||||||
void handleWolfHowl();
|
void handleWolfHowl();
|
||||||
void handleQuickTransform();
|
void handleQuickTransform();
|
||||||
bool checkGyroAimContext();
|
bool checkGyroAimContext();
|
||||||
|
|
||||||
|
void onIronBallChainInterpCallback();
|
||||||
|
|
||||||
|
static const int IRON_BALL_CHAIN_COUNT = 102;
|
||||||
|
cXyz mIBChainInterpPrevPos[IRON_BALL_CHAIN_COUNT];
|
||||||
|
cXyz mIBChainInterpCurrPos[IRON_BALL_CHAIN_COUNT];
|
||||||
|
csXyz mIBChainInterpPrevAngle[IRON_BALL_CHAIN_COUNT];
|
||||||
|
csXyz mIBChainInterpCurrAngle[IRON_BALL_CHAIN_COUNT];
|
||||||
|
cXyz mIBChainInterpPrevHandRoot;
|
||||||
|
cXyz mIBChainInterpCurrHandRoot;
|
||||||
|
bool mIBChainInterpPrevValid;
|
||||||
|
bool mIBChainInterpCurrValid;
|
||||||
#endif
|
#endif
|
||||||
}; // Size: 0x385C
|
}; // Size: 0x385C
|
||||||
|
|
||||||
|
|||||||
@@ -188,6 +188,15 @@ public:
|
|||||||
/* 0x273C */ f32 mKankyoBlend;
|
/* 0x273C */ f32 mKankyoBlend;
|
||||||
/* 0x2740 */ u8 field_0x2740;
|
/* 0x2740 */ u8 field_0x2740;
|
||||||
/* 0x2744 */ dMsgFlow_c mMsgFlow;
|
/* 0x2744 */ dMsgFlow_c mMsgFlow;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mReinsInterpPrev[2][16];
|
||||||
|
cXyz mReinsInterpCurr[2][16];
|
||||||
|
cXyz mReinsTexInterpPrev[2];
|
||||||
|
cXyz mReinsTexInterpCurr[2];
|
||||||
|
bool mReinsInterpPrevValid;
|
||||||
|
bool mReinsInterpCurrValid;
|
||||||
|
s8 mDemoCamSyncTicks;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(b_gnd_class) == 0x2790);
|
STATIC_ASSERT(sizeof(b_gnd_class) == 0x2790);
|
||||||
|
|||||||
@@ -80,6 +80,12 @@ public:
|
|||||||
/* 0x125C */ u32 field_0x125c;
|
/* 0x125C */ u32 field_0x125c;
|
||||||
/* 0x1260 */ u8 field_0x1260[0x126C - 0x1260];
|
/* 0x1260 */ u8 field_0x1260[0x126C - 0x1260];
|
||||||
/* 0x126C */ u8 HIOInit;
|
/* 0x126C */ u8 HIOInit;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mStalkLineInterpPrev[12];
|
||||||
|
cXyz mStalkLineInterpCurr[12];
|
||||||
|
bool mStalkLineInterpPrevValid;
|
||||||
|
bool mStalkLineInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_db_class) == 0x1270);
|
STATIC_ASSERT(sizeof(e_db_class) == 0x1270);
|
||||||
|
|||||||
@@ -73,6 +73,12 @@ public:
|
|||||||
/* 0x124C */ f32 field_0x124c;
|
/* 0x124C */ f32 field_0x124c;
|
||||||
/* 0x1250 */ u8 field_0x1250[0x1264 - 0x1250];
|
/* 0x1250 */ u8 field_0x1250[0x1264 - 0x1250];
|
||||||
/* 0x1264 */ u8 HIOInit;
|
/* 0x1264 */ u8 HIOInit;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mStalkLineInterpPrev[12];
|
||||||
|
cXyz mStalkLineInterpCurr[12];
|
||||||
|
bool mStalkLineInterpPrevValid;
|
||||||
|
bool mStalkLineInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_hb_class) == 0x1268);
|
STATIC_ASSERT(sizeof(e_hb_class) == 0x1268);
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ public:
|
|||||||
/* 0x88C */ u8 field_0x88C[0x8C8 - 0x88C];
|
/* 0x88C */ u8 field_0x88C[0x8C8 - 0x88C];
|
||||||
/* 0x8C8 */ s8 field_0x8c8;
|
/* 0x8C8 */ s8 field_0x8c8;
|
||||||
/* 0x8C9 */ u8 mInitHIO;
|
/* 0x8C9 */ u8 mInitHIO;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mRopeInterpPrev[16];
|
||||||
|
cXyz mRopeInterpCurr[16];
|
||||||
|
bool mRopeInterpPrevValid;
|
||||||
|
bool mRopeInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_mb_class) == 0x8cc);
|
STATIC_ASSERT(sizeof(e_mb_class) == 0x8cc);
|
||||||
|
|||||||
@@ -81,6 +81,15 @@ public:
|
|||||||
/* 0x306D */ u8 field_0x306D[0x307C - 0x306D];
|
/* 0x306D */ u8 field_0x306D[0x307C - 0x306D];
|
||||||
/* 0x307C */ u32 mBodyEffEmtrID;
|
/* 0x307C */ u32 mBodyEffEmtrID;
|
||||||
/* 0x3080 */ u8 mInitHIO;
|
/* 0x3080 */ u8 mInitHIO;
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
static const int HAIR_STRAND_COUNT = 22;
|
||||||
|
static const int HAIR_SEGMENT_COUNT = 16;
|
||||||
|
cXyz mHairInterpPrev[HAIR_STRAND_COUNT * HAIR_SEGMENT_COUNT];
|
||||||
|
cXyz mHairInterpCurr[HAIR_STRAND_COUNT * HAIR_SEGMENT_COUNT];
|
||||||
|
bool mHairInterpPrevValid;
|
||||||
|
bool mHairInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_s1_class) == 0x3084);
|
STATIC_ASSERT(sizeof(e_s1_class) == 0x3084);
|
||||||
|
|||||||
@@ -220,6 +220,15 @@ public:
|
|||||||
/* 0x17E2 */ s16 wait_roll_angle; ///< @brief Roll angle during wait state.
|
/* 0x17E2 */ s16 wait_roll_angle; ///< @brief Roll angle during wait state.
|
||||||
/* 0x17E4 */ u8 field_0x17e4[0x17e8 - 0x17e4];
|
/* 0x17E4 */ u8 field_0x17e4[0x17e8 - 0x17e4];
|
||||||
/* 0x17E8 */ f32 ride_speed_max; ///< @brief Speed rate for riding calculations.
|
/* 0x17E8 */ f32 ride_speed_max; ///< @brief Speed rate for riding calculations.
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz himo_mat_interp_prev[2][16];
|
||||||
|
cXyz himo_mat_interp_curr[2][16];
|
||||||
|
cXyz himo_tex_interp_prev[2];
|
||||||
|
cXyz himo_tex_interp_curr[2];
|
||||||
|
bool himo_interp_prev_valid;
|
||||||
|
bool himo_interp_curr_valid;
|
||||||
|
s8 demo_cam_sync_ticks;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_wb_class) == 0x17EC);
|
STATIC_ASSERT(sizeof(e_wb_class) == 0x17EC);
|
||||||
|
|||||||
@@ -74,6 +74,12 @@ public:
|
|||||||
/* 0x1250 */ f32 field_0x1250;
|
/* 0x1250 */ f32 field_0x1250;
|
||||||
/* 0x1254 */ u8 field_0x1254[0x1268 - 0x1254];
|
/* 0x1254 */ u8 field_0x1254[0x1268 - 0x1254];
|
||||||
/* 0x1268 */ u8 field_0x1268;
|
/* 0x1268 */ u8 field_0x1268;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mLineMatInterpPrev[12];
|
||||||
|
cXyz mLineMatInterpCurr[12];
|
||||||
|
bool mLineMatInterpPrevValid;
|
||||||
|
bool mLineMatInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_yd_class) == 0x126c);
|
STATIC_ASSERT(sizeof(e_yd_class) == 0x126c);
|
||||||
|
|||||||
@@ -63,6 +63,15 @@ public:
|
|||||||
/* 0x0BB4 */ yg_ke_s mYgKes[13];
|
/* 0x0BB4 */ yg_ke_s mYgKes[13];
|
||||||
/* 0x1880 */ mDoExt_3DlineMat0_c mLineMat;
|
/* 0x1880 */ mDoExt_3DlineMat0_c mLineMat;
|
||||||
/* 0x189C */ u8 mIsFirstSpawn;
|
/* 0x189C */ u8 mIsFirstSpawn;
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
static const int TENTACLE_STRAND_COUNT = 13;
|
||||||
|
static const int TENTACLE_SEGMENT_COUNT = 10;
|
||||||
|
cXyz mTentacleInterpPrev[TENTACLE_STRAND_COUNT * TENTACLE_SEGMENT_COUNT];
|
||||||
|
cXyz mTentacleInterpCurr[TENTACLE_STRAND_COUNT * TENTACLE_SEGMENT_COUNT];
|
||||||
|
bool mTentacleInterpPrevValid;
|
||||||
|
bool mTentacleInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_yg_class) == 0x18a0);
|
STATIC_ASSERT(sizeof(e_yg_class) == 0x18a0);
|
||||||
|
|||||||
@@ -77,6 +77,12 @@ public:
|
|||||||
/* 0x1260 */ u32 field_0x1260;
|
/* 0x1260 */ u32 field_0x1260;
|
||||||
/* 0x1260 */ u8 field_0x1264[0x1270 - 0x1264];
|
/* 0x1260 */ u8 field_0x1264[0x1270 - 0x1264];
|
||||||
/* 0x1270 */ bool mIsHIOOwner;
|
/* 0x1270 */ bool mIsHIOOwner;
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mLineInterpPrev[12];
|
||||||
|
cXyz mLineInterpCurr[12];
|
||||||
|
bool mLineInterpPrevValid;
|
||||||
|
bool mLineInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(e_yh_class) == 0x1274);
|
STATIC_ASSERT(sizeof(e_yh_class) == 0x1274);
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ public:
|
|||||||
/* 0x164 */ cXyz mMinVal;
|
/* 0x164 */ cXyz mMinVal;
|
||||||
/* 0x170 */ cXyz mMaxVal;
|
/* 0x170 */ cXyz mMaxVal;
|
||||||
/* 0x17C */ cXyz mViewScale;
|
/* 0x17C */ cXyz mViewScale;
|
||||||
|
#if TARGET_PC
|
||||||
|
bool mbReset = false;
|
||||||
|
bool mbHadEntry = false;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -94,6 +94,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;
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ public:
|
|||||||
csXyz* getAngle() { return field_0x8a4; }
|
csXyz* getAngle() { return field_0x8a4; }
|
||||||
J3DModelData* getModelData() { return mModelData; }
|
J3DModelData* getModelData() { return mModelData; }
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void onInterpCallback();
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x568 */ request_of_phase_process_class mPhase;
|
/* 0x568 */ request_of_phase_process_class mPhase;
|
||||||
/* 0x570 */ J3DModelData* mModelData;
|
/* 0x570 */ J3DModelData* mModelData;
|
||||||
@@ -42,6 +46,14 @@ private:
|
|||||||
/* 0x694 */ cXyz field_0x694[22];
|
/* 0x694 */ cXyz field_0x694[22];
|
||||||
/* 0x79C */ cXyz field_0x79c[22];
|
/* 0x79C */ cXyz field_0x79c[22];
|
||||||
/* 0x8A4 */ csXyz field_0x8a4[22];
|
/* 0x8A4 */ csXyz field_0x8a4[22];
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
static const int CHAIN_COUNT = 22;
|
||||||
|
cXyz mChainInterpPrev[CHAIN_COUNT];
|
||||||
|
cXyz mChainInterpCurr[CHAIN_COUNT];
|
||||||
|
bool mChainInterpPrevValid;
|
||||||
|
bool mChainInterpCurrValid;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_ASSERT(sizeof(daObjFchain_c) == 0x928);
|
STATIC_ASSERT(sizeof(daObjFchain_c) == 0x928);
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ public:
|
|||||||
int Draw();
|
int Draw();
|
||||||
int Delete();
|
int Delete();
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void onInterpCallback();
|
||||||
|
#endif
|
||||||
|
|
||||||
enum Param_e {
|
enum Param_e {
|
||||||
LOCK_e = (1 << 6), NO_BASE_DISP = (1 << 7)
|
LOCK_e = (1 << 6), NO_BASE_DISP = (1 << 7)
|
||||||
};
|
};
|
||||||
@@ -50,6 +54,13 @@ private:
|
|||||||
/* 0x1020 */ dCcD_Cyl mCylinderCollider;
|
/* 0x1020 */ dCcD_Cyl mCylinderCollider;
|
||||||
/* 0x115C */ s32 mStopSwingingFrames;
|
/* 0x115C */ s32 mStopSwingingFrames;
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
cXyz mChainInterpPrev[64];
|
||||||
|
cXyz mChainInterpCurr[64];
|
||||||
|
bool mChainInterpPrevValid;
|
||||||
|
bool mChainInterpCurrValid;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Number of chain models
|
// Number of chain models
|
||||||
u32 getArg0() {
|
u32 getArg0() {
|
||||||
return fopAcM_GetParamBit(this, 0, 6);
|
return fopAcM_GetParamBit(this, 0, 6);
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ public:
|
|||||||
void setNextPoint();
|
void setNextPoint();
|
||||||
int Draw();
|
int Draw();
|
||||||
int Delete();
|
int Delete();
|
||||||
|
#if TARGET_PC
|
||||||
|
friend void daL8Lift_interp_callback(bool isSimFrame, void* pUserWork);
|
||||||
|
#endif
|
||||||
|
|
||||||
u8 getPthID() { return fopAcM_GetParamBit(this, 0, 8); }
|
u8 getPthID() { return fopAcM_GetParamBit(this, 0, 8); }
|
||||||
u8 getMoveSpeed() { return fopAcM_GetParamBit(this, 8, 4); }
|
u8 getMoveSpeed() { return fopAcM_GetParamBit(this, 8, 4); }
|
||||||
|
|||||||
@@ -68,10 +68,8 @@ public:
|
|||||||
/* 0x904 */ cXyz field_0x904[2];
|
/* 0x904 */ cXyz field_0x904[2];
|
||||||
/* 0x91C */ int field_0x91c;
|
/* 0x91C */ int field_0x91c;
|
||||||
/* 0x920 */ cXyz field_0x920[63];
|
/* 0x920 */ cXyz field_0x920[63];
|
||||||
/* 0xC14 */ f32 field_0xc14[4];
|
/* 0xC14 */ f32 field_0xc14[63];
|
||||||
/* 0xC24 */ u8 field_0xc24[0xd10 - 0xc24];
|
/* 0xD10 */ s8 field_0xd10[64];
|
||||||
/* 0xD10 */ s8 field_0xd10[4];
|
|
||||||
/* 0xD14 */ u8 field_0xd14[0xd50 - 0xd14];
|
|
||||||
/* 0xD50 */ mDoExt_3DlineMat1_c field_0xd50;
|
/* 0xD50 */ mDoExt_3DlineMat1_c field_0xd50;
|
||||||
/* 0xD8C */ int field_0xd8c;
|
/* 0xD8C */ int field_0xd8c;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -143,6 +143,12 @@ public:
|
|||||||
/* 0x20 */ JORFile mFile;
|
/* 0x20 */ JORFile mFile;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
/* 0x24 */ u8 mManualMode;
|
||||||
|
/* 0x25 */ f32 freeXAngle;
|
||||||
|
/* 0x29 */ f32 freeYAngle;
|
||||||
|
#endif
|
||||||
|
|
||||||
u32 Id(s32 i_style) { return mCamStyleData[i_style].field_0x0; }
|
u32 Id(s32 i_style) { return mCamStyleData[i_style].field_0x0; }
|
||||||
int Algorythmn(s32 i_style) { return mCamStyleData[i_style].field_0x4; }
|
int Algorythmn(s32 i_style) { return mCamStyleData[i_style].field_0x4; }
|
||||||
int Algorythmn() { return mCurrentStyle->field_0x4; }
|
int Algorythmn() { return mCurrentStyle->field_0x4; }
|
||||||
|
|||||||
@@ -118,6 +118,18 @@ class camera_class;
|
|||||||
class dCamera_c;
|
class dCamera_c;
|
||||||
typedef bool (dCamera_c::*engine_fn)(s32);
|
typedef bool (dCamera_c::*engine_fn)(s32);
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
struct DebugFlyCam {
|
||||||
|
bool initialized;
|
||||||
|
f32 pitch;
|
||||||
|
f32 yaw;
|
||||||
|
cXyz savedCenter;
|
||||||
|
cXyz savedEye;
|
||||||
|
f32 savedFovy;
|
||||||
|
cSAngle savedBank;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
class dCamera_c {
|
class dCamera_c {
|
||||||
public:
|
public:
|
||||||
class dCamInfo_c {
|
class dCamInfo_c {
|
||||||
@@ -273,6 +285,8 @@ public:
|
|||||||
/* 0xA4 */ f32 field_0xa4;
|
/* 0xA4 */ f32 field_0xa4;
|
||||||
/* 0xA8 */ int field_0xa8;
|
/* 0xA8 */ int field_0xa8;
|
||||||
/* 0xAC */ f32 field_0xac;
|
/* 0xAC */ f32 field_0xac;
|
||||||
|
f32 xAngle;
|
||||||
|
f32 yAngle;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LockOnData {
|
struct LockOnData {
|
||||||
@@ -1024,6 +1038,11 @@ public:
|
|||||||
bool colosseumCamera(s32);
|
bool colosseumCamera(s32);
|
||||||
bool test1Camera(s32);
|
bool test1Camera(s32);
|
||||||
bool test2Camera(s32);
|
bool test2Camera(s32);
|
||||||
|
#if TARGET_PC
|
||||||
|
bool freeCamera();
|
||||||
|
bool executeDebugFlyCam();
|
||||||
|
void deactivateDebugFlyCam();
|
||||||
|
#endif
|
||||||
bool towerCamera(s32);
|
bool towerCamera(s32);
|
||||||
bool hookshotCamera(s32);
|
bool hookshotCamera(s32);
|
||||||
bool railCamera(s32);
|
bool railCamera(s32);
|
||||||
@@ -1371,6 +1390,10 @@ public:
|
|||||||
/* 0x970 */ dCamSetup_c mCamSetup;
|
/* 0x970 */ dCamSetup_c mCamSetup;
|
||||||
/* 0xAEC */ dCamParam_c mCamParam;
|
/* 0xAEC */ dCamParam_c mCamParam;
|
||||||
/* 0xB0C */ u8 field_0xb0c;
|
/* 0xB0C */ u8 field_0xb0c;
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
DebugFlyCam mDebugFlyCam;
|
||||||
|
#endif
|
||||||
}; // Size: 0xB10
|
}; // Size: 0xB10
|
||||||
|
|
||||||
dCamera_c* dCam_getBody();
|
dCamera_c* dCam_getBody();
|
||||||
|
|||||||
@@ -1845,6 +1845,12 @@ inline void dComIfGs_addDeathCount() {
|
|||||||
g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().addDeathCount();
|
g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().addDeathCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
inline u16 dComIfGs_getDeathCount() {
|
||||||
|
return g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().getDeathCount();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline char* dComIfGs_getPlayerName() {
|
inline char* dComIfGs_getPlayerName() {
|
||||||
return g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().getPlayerName();
|
return g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().getPlayerName();
|
||||||
}
|
}
|
||||||
@@ -4834,8 +4840,7 @@ inline void dComIfGd_drawXluListDark() {
|
|||||||
inline void dComIfGd_drawXluListInvisible() {
|
inline void dComIfGd_drawXluListInvisible() {
|
||||||
ZoneScoped;
|
ZoneScoped;
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
if (dusk::getSettings().game.enableWaterRefraction &&
|
if (!dusk::getSettings().game.disableWaterRefraction) {
|
||||||
!dusk::getSettings().game.enableFrameInterpolation) {
|
|
||||||
#endif
|
#endif
|
||||||
g_dComIfG_gameInfo.drawlist.drawXluListInvisible();
|
g_dComIfG_gameInfo.drawlist.drawXluListInvisible();
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
@@ -4846,8 +4851,7 @@ inline void dComIfGd_drawXluListInvisible() {
|
|||||||
inline void dComIfGd_drawOpaListInvisible() {
|
inline void dComIfGd_drawOpaListInvisible() {
|
||||||
ZoneScoped;
|
ZoneScoped;
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
if (dusk::getSettings().game.enableWaterRefraction &&
|
if (!dusk::getSettings().game.disableWaterRefraction) {
|
||||||
!dusk::getSettings().game.enableFrameInterpolation) {
|
|
||||||
#endif
|
#endif
|
||||||
g_dComIfG_gameInfo.drawlist.drawOpaListInvisible();
|
g_dComIfG_gameInfo.drawlist.drawOpaListInvisible();
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
|
|||||||
@@ -209,6 +209,10 @@ public:
|
|||||||
/* 0x04 */ TGXTexObj* mpTexObj;
|
/* 0x04 */ TGXTexObj* mpTexObj;
|
||||||
/* 0x08 */ Mtx mVolumeMtx;
|
/* 0x08 */ Mtx mVolumeMtx;
|
||||||
/* 0x38 */ Mtx mMtx;
|
/* 0x38 */ Mtx mMtx;
|
||||||
|
#if TARGET_PC
|
||||||
|
const void* mVolumeMtxKey;
|
||||||
|
const void* mMtxKey;
|
||||||
|
#endif
|
||||||
}; // Size: 0x68
|
}; // Size: 0x68
|
||||||
|
|
||||||
struct cBgD_Vtx_t;
|
struct cBgD_Vtx_t;
|
||||||
|
|||||||
@@ -196,7 +196,11 @@ public:
|
|||||||
/* 0x108 */ int mSkipTimer;
|
/* 0x108 */ int mSkipTimer;
|
||||||
/* 0x10C */ int mSkipParameter;
|
/* 0x10C */ int mSkipParameter;
|
||||||
/* 0x110 */ BOOL mIsSkipFade;
|
/* 0x110 */ BOOL mIsSkipFade;
|
||||||
|
#if TARGET_PC
|
||||||
|
/* 0x114 */ char mSkipEventName[21];
|
||||||
|
#else
|
||||||
/* 0x114 */ char mSkipEventName[20];
|
/* 0x114 */ char mSkipEventName[20];
|
||||||
|
#endif
|
||||||
/* 0x128 */ u8 mCompulsory;
|
/* 0x128 */ u8 mCompulsory;
|
||||||
/* 0x129 */ bool mRoomInfoSet;
|
/* 0x129 */ bool mRoomInfoSet;
|
||||||
/* 0x12C */ int mRoomNo;
|
/* 0x12C */ int mRoomNo;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
|
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
|
||||||
|
|
||||||
class dFile_info_c;
|
class dFile_info_c;
|
||||||
|
class J2DPicture;
|
||||||
|
|
||||||
class dDlst_FileSel_c : public dDlst_base_c {
|
class dDlst_FileSel_c : public dDlst_base_c {
|
||||||
public:
|
public:
|
||||||
@@ -113,6 +114,14 @@ public:
|
|||||||
/* 0x04 */ J2DScreen* Scr3m;
|
/* 0x04 */ J2DScreen* Scr3m;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class dDlst_FileSelFade_c : public dDlst_base_c {
|
||||||
|
public:
|
||||||
|
void draw();
|
||||||
|
virtual ~dDlst_FileSelFade_c() {}
|
||||||
|
|
||||||
|
/* 0x04 */ J2DPicture* mpPict;
|
||||||
|
};
|
||||||
|
|
||||||
class dFs_HIO_c : public JORReflexible {
|
class dFs_HIO_c : public JORReflexible {
|
||||||
public:
|
public:
|
||||||
dFs_HIO_c();
|
dFs_HIO_c();
|
||||||
@@ -676,6 +685,9 @@ public:
|
|||||||
#if PLATFORM_GCN
|
#if PLATFORM_GCN
|
||||||
/* 0x2378 */ J2DPicture* mpFadePict;
|
/* 0x2378 */ J2DPicture* mpFadePict;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef TARGET_PC
|
||||||
|
dDlst_FileSelFade_c mFadeDlst;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||||
/* 0x2376 */ u8 field_0x2376[SAVEFILE_SIZE];
|
/* 0x2376 */ u8 field_0x2376[SAVEFILE_SIZE];
|
||||||
@@ -684,6 +696,10 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef TARGET_PC
|
||||||
|
STATIC_ASSERT(sizeof(dFile_select_c) == 0x237C + sizeof(dDlst_FileSelFade_c));
|
||||||
|
#else
|
||||||
STATIC_ASSERT(sizeof(dFile_select_c) == 0x237C);
|
STATIC_ASSERT(sizeof(dFile_select_c) == 0x237C);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* D_FILE_D_FILE_SELECT_H */
|
#endif /* D_FILE_D_FILE_SELECT_H */
|
||||||
|
|||||||
@@ -223,6 +223,9 @@ private:
|
|||||||
/* 0x8F */ u8 field_0x8f;
|
/* 0x8F */ u8 field_0x8f;
|
||||||
/* 0x90 */ u8 field_0x90;
|
/* 0x90 */ u8 field_0x90;
|
||||||
/* 0x91 */ u8 field_0x91;
|
/* 0x91 */ u8 field_0x91;
|
||||||
|
#if TARGET_PC
|
||||||
|
bool previousMirror;
|
||||||
|
#endif
|
||||||
}; // Size: 0x94
|
}; // Size: 0x94
|
||||||
|
|
||||||
class dMap_HIO_list_c : public dMpath_HIO_n::hioList_c {
|
class dMap_HIO_list_c : public dMpath_HIO_n::hioList_c {
|
||||||
|
|||||||
@@ -91,6 +91,10 @@ public:
|
|||||||
void calcCursor();
|
void calcCursor();
|
||||||
void drawCursor();
|
void drawCursor();
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void dMapBgWide();
|
||||||
|
#endif
|
||||||
|
|
||||||
void setDPDFloorSelCurPos(s8 i_pos) { field_0xdd6 = i_pos; }
|
void setDPDFloorSelCurPos(s8 i_pos) { field_0xdd6 = i_pos; }
|
||||||
|
|
||||||
f32 getMapWidth() { return mMapWidth; }
|
f32 getMapWidth() { return mMapWidth; }
|
||||||
@@ -103,6 +107,10 @@ public:
|
|||||||
field_0xd98 = param_1;
|
field_0xd98 = param_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void resetScrollArrowMask() { field_0xdda = 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 0xC98 */ JKRExpHeap* mpHeap;
|
/* 0xC98 */ JKRExpHeap* mpHeap;
|
||||||
/* 0xC9C */ JKRExpHeap* mpTalkHeap;
|
/* 0xC9C */ JKRExpHeap* mpTalkHeap;
|
||||||
/* 0xCA0 */ STControl* mpStick;
|
/* 0xCA0 */ STControl* mpStick;
|
||||||
|
|||||||
@@ -75,7 +75,9 @@ public:
|
|||||||
/* 0x8 */ BE(u16) mAreaName;
|
/* 0x8 */ BE(u16) mAreaName;
|
||||||
/* 0xA */ u8 mCount;
|
/* 0xA */ u8 mCount;
|
||||||
#ifdef _MSVC_LANG
|
#ifdef _MSVC_LANG
|
||||||
u8* __get_mRoomNos() const { return (u8*)(this + 1); }
|
// Room numbers start at offset 0xB (right after mCount), NOT at sizeof(data)=12.
|
||||||
|
// (u8*)(this+1) would give offset 12 because MSVC sizeof=12; use &mCount+1 instead.
|
||||||
|
u8* __get_mRoomNos() const { return (u8*)&mCount + 1; }
|
||||||
__declspec(property(get = __get_mRoomNos)) u8* mRoomNos;
|
__declspec(property(get = __get_mRoomNos)) u8* mRoomNos;
|
||||||
#else
|
#else
|
||||||
/* 0xB */ u8 mRoomNos[0];
|
/* 0xB */ u8 mRoomNos[0];
|
||||||
|
|||||||
@@ -81,6 +81,10 @@ public:
|
|||||||
void calcDrawPriority();
|
void calcDrawPriority();
|
||||||
void setArrowPosAxis(f32, f32);
|
void setArrowPosAxis(f32, f32);
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void fMapBackWide();
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
virtual ~dMenu_Fmap2DBack_c();
|
virtual ~dMenu_Fmap2DBack_c();
|
||||||
|
|
||||||
@@ -165,6 +169,12 @@ public:
|
|||||||
|
|
||||||
void mapBlink() {}
|
void mapBlink() {}
|
||||||
|
|
||||||
|
#if PLATFORM_WII || TARGET_PC
|
||||||
|
f32 getMirrorPosX(f32 param_0, f32 param_1) {
|
||||||
|
return (field_0x11dc * 2.0f - (param_0 + param_1)) - param_1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Unknown name
|
// Unknown name
|
||||||
struct RegionTexData {
|
struct RegionTexData {
|
||||||
/* 0x00 */ float mMinX;
|
/* 0x00 */ float mMinX;
|
||||||
@@ -330,6 +340,10 @@ public:
|
|||||||
void setHIO(bool);
|
void setHIO(bool);
|
||||||
bool isWarpAccept();
|
bool isWarpAccept();
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void fMapTopWide();
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
virtual ~dMenu_Fmap2DTop_c();
|
virtual ~dMenu_Fmap2DTop_c();
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,16 @@ public:
|
|||||||
_c90 = param_2;
|
_c90 = param_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PLATFORM_WII || TARGET_PC
|
||||||
|
f32 getMirrorCenterPosX(f32 param_0, f32 param_1) {
|
||||||
|
if (_c90) {
|
||||||
|
return (mCenterPosX * 2.0f - (param_0 + param_1)) - param_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return param_0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct Stage_c {
|
struct Stage_c {
|
||||||
// Incomplete class
|
// Incomplete class
|
||||||
|
|
||||||
|
|||||||
@@ -206,6 +206,15 @@ private:
|
|||||||
/* 0x6D3 */ u8 field_0x6d3;
|
/* 0x6D3 */ u8 field_0x6d3;
|
||||||
#if TARGET_PC
|
#if TARGET_PC
|
||||||
f32 mSelectItemSlideElapsed[4];
|
f32 mSelectItemSlideElapsed[4];
|
||||||
|
f32 mCursorInterpPrevX;
|
||||||
|
f32 mCursorInterpPrevY;
|
||||||
|
f32 mCursorInterpCurrX;
|
||||||
|
f32 mCursorInterpCurrY;
|
||||||
|
s16 mCursorInterpPrevAngle;
|
||||||
|
s16 mCursorInterpCurrAngle;
|
||||||
|
bool mCursorInterpPrevAngular;
|
||||||
|
bool mCursorInterpCurrAngular;
|
||||||
|
bool mCursorInterpInit;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -343,6 +343,11 @@ public:
|
|||||||
/* 0x624 */ f32 mMidonaPosX;
|
/* 0x624 */ f32 mMidonaPosX;
|
||||||
/* 0x628 */ f32 mMidonaPosY;
|
/* 0x628 */ f32 mMidonaPosY;
|
||||||
/* 0x62C */ f32 mMidonaScale;
|
/* 0x62C */ f32 mMidonaScale;
|
||||||
|
|
||||||
|
#ifdef TARGET_PC
|
||||||
|
bool mWasListen[2];
|
||||||
|
bool mWasRepeat[2];
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* D_METER_D_METER_BUTTON_H */
|
#endif /* D_METER_D_METER_BUTTON_H */
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ public:
|
|||||||
bool isStaffMessage();
|
bool isStaffMessage();
|
||||||
bool isSaveMessage();
|
bool isSaveMessage();
|
||||||
bool isTalkMessage();
|
bool isTalkMessage();
|
||||||
|
#if TARGET_PC
|
||||||
|
bool isShopItemMessage();
|
||||||
|
#endif
|
||||||
const char* getSmellName();
|
const char* getSmellName();
|
||||||
const char* getPortalName();
|
const char* getPortalName();
|
||||||
const char* getBombName();
|
const char* getBombName();
|
||||||
|
|||||||
+1
-1
@@ -89,7 +89,7 @@ public:
|
|||||||
void MojiSelectAnm3();
|
void MojiSelectAnm3();
|
||||||
int mojiChange(u8);
|
int mojiChange(u8);
|
||||||
void selectMojiSet();
|
void selectMojiSet();
|
||||||
#if REGION_JPN
|
#if TARGET_PC || REGION_JPN
|
||||||
int checkDakuon(int, u8);
|
int checkDakuon(int, u8);
|
||||||
int setDakuon(int, u8);
|
int setDakuon(int, u8);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public:
|
|||||||
bool isProgressiveMode();
|
bool isProgressiveMode();
|
||||||
void setRenderMode();
|
void setRenderMode();
|
||||||
|
|
||||||
#if VERSION == VERSION_GCN_PAL || PLATFORM_WII || PLATFORM_SHIELD
|
#if TARGET_PC || VERSION == VERSION_GCN_PAL || PLATFORM_WII || PLATFORM_SHIELD
|
||||||
u8 getPalLanguage();
|
u8 getPalLanguage();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ public:
|
|||||||
/* 0x200 */ dDlst_2D_c* mNvLogo;
|
/* 0x200 */ dDlst_2D_c* mNvLogo;
|
||||||
/* 0x204 */ dDlst_2D_c* mMocImg;
|
/* 0x204 */ dDlst_2D_c* mMocImg;
|
||||||
#endif
|
#endif
|
||||||
#if VERSION == VERSION_GCN_PAL
|
#if TARGET_PC || VERSION == VERSION_GCN_PAL
|
||||||
/* 0x1FC */ mDoDvdThd_mountArchive_c* mpPalLogoResCommand;
|
/* 0x1FC */ mDoDvdThd_mountArchive_c* mpPalLogoResCommand;
|
||||||
#endif
|
#endif
|
||||||
/* 0x1FC */ request_of_phase_process_class* m_preLoad_dylPhase;
|
/* 0x1FC */ request_of_phase_process_class* m_preLoad_dylPhase;
|
||||||
|
|||||||
@@ -486,6 +486,9 @@ public:
|
|||||||
mDeathCount++;
|
mDeathCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if TARGET_PC
|
||||||
|
u16 getDeathCount() const { return mDeathCount; }
|
||||||
|
#endif
|
||||||
char* getPlayerName() const { return const_cast<char*>(mPlayerName); }
|
char* getPlayerName() const { return const_cast<char*>(mPlayerName); }
|
||||||
void setPlayerName(const char* i_name) {
|
void setPlayerName(const char* i_name) {
|
||||||
#if AVOID_UB
|
#if AVOID_UB
|
||||||
|
|||||||
@@ -47,6 +47,13 @@ public:
|
|||||||
mPositionY = y;
|
mPositionY = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TARGET_PC
|
||||||
|
f32 getPositionX() const { return mPositionX; }
|
||||||
|
f32 getPositionY() const { return mPositionY; }
|
||||||
|
|
||||||
|
void refreshAspectScale();
|
||||||
|
#endif
|
||||||
|
|
||||||
void onUpdateFlag() { mUpdateFlag = true; }
|
void onUpdateFlag() { mUpdateFlag = true; }
|
||||||
|
|
||||||
void resetUpdateFlag() { mUpdateFlag = false; }
|
void resetUpdateFlag() { mUpdateFlag = false; }
|
||||||
@@ -79,6 +86,9 @@ private:
|
|||||||
/* 0x58 */ f32 mPositionX;
|
/* 0x58 */ f32 mPositionX;
|
||||||
/* 0x5C */ f32 mPositionY;
|
/* 0x5C */ f32 mPositionY;
|
||||||
/* 0x60 */ f32 mParam1;
|
/* 0x60 */ f32 mParam1;
|
||||||
|
#ifdef TARGET_PC
|
||||||
|
f32 mBaseParam1;
|
||||||
|
#endif
|
||||||
/* 0x64 */ f32 mParam2;
|
/* 0x64 */ f32 mParam2;
|
||||||
/* 0x68 */ f32 mParam3;
|
/* 0x68 */ f32 mParam3;
|
||||||
/* 0x6C */ f32 mParam4;
|
/* 0x6C */ f32 mParam4;
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <functional>
|
||||||
|
#include <queue>
|
||||||
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
|
#include <unordered_set>
|
||||||
|
#include <vector>
|
||||||
|
#include "nlohmann/json.hpp"
|
||||||
|
|
||||||
|
namespace dusk {
|
||||||
|
|
||||||
|
enum class AchievementCategory : uint8_t {
|
||||||
|
Challenge,
|
||||||
|
Collection,
|
||||||
|
Minigame,
|
||||||
|
Misc,
|
||||||
|
Glitched
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Achievement {
|
||||||
|
const char* key;
|
||||||
|
const char* name;
|
||||||
|
const char* description;
|
||||||
|
AchievementCategory category;
|
||||||
|
bool isCounter;
|
||||||
|
int32_t goal;
|
||||||
|
int32_t progress;
|
||||||
|
bool unlocked;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Responsible for updating a.progress.
|
||||||
|
// Use extra for any per-achievement state that must survive across frames or sessions, extra is saved
|
||||||
|
using AchievementCheckFn = std::function<void(Achievement& a, nlohmann::json& extra)>;
|
||||||
|
|
||||||
|
class AchievementSystem {
|
||||||
|
public:
|
||||||
|
static AchievementSystem& get();
|
||||||
|
|
||||||
|
void load();
|
||||||
|
void save();
|
||||||
|
void tick();
|
||||||
|
void clearAll();
|
||||||
|
void clearOne(const char* key);
|
||||||
|
|
||||||
|
// Signals are visible to all achievement checks within the same tick, then cleared.
|
||||||
|
void signal(const char* key);
|
||||||
|
bool hasSignal(const char* key) const;
|
||||||
|
|
||||||
|
std::vector<Achievement> getAchievements() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Entry {
|
||||||
|
Achievement achievement;
|
||||||
|
AchievementCheckFn check;
|
||||||
|
nlohmann::json extra;
|
||||||
|
};
|
||||||
|
|
||||||
|
AchievementSystem();
|
||||||
|
static std::vector<Entry> makeEntries();
|
||||||
|
void processEntry(Entry& e);
|
||||||
|
|
||||||
|
std::vector<Entry> m_entries;
|
||||||
|
std::unordered_set<std::string_view> m_signals;
|
||||||
|
bool m_loaded = false;
|
||||||
|
bool m_dirty = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dusk
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include "dusk/config_var.hpp"
|
||||||
|
|
||||||
|
namespace dusk {
|
||||||
|
|
||||||
|
enum class ActionBinds {
|
||||||
|
FIRST_PERSON_CAMERA,
|
||||||
|
CALL_MIDNA,
|
||||||
|
OPEN_DUSKLIGHT_MENU,
|
||||||
|
TURBO_SPEED_BUTTON,
|
||||||
|
COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActionBindData {
|
||||||
|
std::array<config::ActionBindConfigVar, 4>* configVars{};
|
||||||
|
std::string actionName{};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActionBindPressData {
|
||||||
|
bool pressedCurFrame{false};
|
||||||
|
bool pressedPrevFrame{false};
|
||||||
|
};
|
||||||
|
|
||||||
|
using ActionBindsMap = std::unordered_map<ActionBinds, ActionBindData>;
|
||||||
|
|
||||||
|
ActionBindsMap& getActionBinds();
|
||||||
|
|
||||||
|
bool isActionBound(ActionBinds action, u32 port);
|
||||||
|
|
||||||
|
void updateActionBindings();
|
||||||
|
|
||||||
|
bool getActionBindTrig(ActionBinds action, u32 port);
|
||||||
|
|
||||||
|
bool getActionBindHold(ActionBinds action, u32 port);
|
||||||
|
|
||||||
|
bool getActionBindHoldAnyPort(ActionBinds action);
|
||||||
|
|
||||||
|
int getActionBindButton(ActionBinds action, u32 port);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -7,7 +7,12 @@ namespace dusk {
|
|||||||
*
|
*
|
||||||
* This gets used for file paths and such, and cannot be changed!
|
* This gets used for file paths and such, and cannot be changed!
|
||||||
*/
|
*/
|
||||||
constexpr auto AppName = "Dusk";
|
constexpr auto AppName = "Dusklight";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Previous AppName to migrate data from.
|
||||||
|
*/
|
||||||
|
constexpr auto LegacyAppName = "Dusk";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief The internal organization name for the game.
|
* \brief The internal organization name for the game.
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ namespace dusk::audio {
|
|||||||
|
|
||||||
void SetMasterVolume(f32 value);
|
void SetMasterVolume(f32 value);
|
||||||
|
|
||||||
|
void SetPaused(bool paused);
|
||||||
|
|
||||||
u32 GetResetCount(int channelIdx);
|
u32 GetResetCount(int channelIdx);
|
||||||
|
|
||||||
f32 VolumeFromU16(u16 value);
|
f32 VolumeFromU16(u16 value);
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef AUTOSAVE_H
|
||||||
|
#define AUTOSAVE_H
|
||||||
|
|
||||||
|
#include <m_Do/m_Do_MemCardRWmng.h>
|
||||||
|
#include <m_Do/m_Do_MemCard.h>
|
||||||
|
|
||||||
|
void noAutoSave();
|
||||||
|
void triggerAutoSave();
|
||||||
|
void updateAutoSave();
|
||||||
|
void enterAutoSave();
|
||||||
|
void autoSaving();
|
||||||
|
void waitingForWrite();
|
||||||
|
void endAutoSave();
|
||||||
|
void toggleAutoSave(bool enabled);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef DUSK_CONFIG_HPP
|
#ifndef DUSK_CONFIG_HPP
|
||||||
#define DUSK_CONFIG_HPP
|
#define DUSK_CONFIG_HPP
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include "nlohmann/json.hpp"
|
#include "nlohmann/json.hpp"
|
||||||
#include "config_var.hpp"
|
#include "config_var.hpp"
|
||||||
@@ -111,6 +112,18 @@ void Save();
|
|||||||
*/
|
*/
|
||||||
ConfigVarBase* GetConfigVar(std::string_view name);
|
ConfigVarBase* GetConfigVar(std::string_view name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Resets all custom action bindings for a specific port to nothing
|
||||||
|
*
|
||||||
|
* @param port The port to be cleared of action bindings
|
||||||
|
*/
|
||||||
|
void ClearAllActionBindings(int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Call a function on every registered CVar.
|
||||||
|
*/
|
||||||
|
void EnumerateRegistered(std::function<void(ConfigVarBase&)> callback);
|
||||||
|
|
||||||
template <ConfigValue T>
|
template <ConfigValue T>
|
||||||
const ConfigImplBase* GetConfigImpl() {
|
const ConfigImplBase* GetConfigImpl() {
|
||||||
static ConfigImpl<T> config;
|
static ConfigImpl<T> config;
|
||||||
|
|||||||
@@ -48,6 +48,13 @@ enum class ConfigVarLayer : u8 {
|
|||||||
* Will not get saved to config.
|
* Will not get saved to config.
|
||||||
*/
|
*/
|
||||||
Override,
|
Override,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The CVar is temporarily overridden by speedrun mode.
|
||||||
|
* Will not get saved to config. Cleared when speedrun mode is disabled.
|
||||||
|
* Lower priority than Override, so launch args still win.
|
||||||
|
*/
|
||||||
|
Speedrun,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConfigImplBase;
|
class ConfigImplBase;
|
||||||
@@ -113,6 +120,12 @@ public:
|
|||||||
* This is necessary to make it legal to access.
|
* This is necessary to make it legal to access.
|
||||||
*/
|
*/
|
||||||
void markRegistered();
|
void markRegistered();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear a speedrun-mode override if one is active on this CVar.
|
||||||
|
* Safe to call on any CVar, no-op if not at the Speedrun layer.
|
||||||
|
*/
|
||||||
|
virtual void clearSpeedrunOverride() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -189,6 +202,7 @@ public:
|
|||||||
case ConfigVarLayer::Value:
|
case ConfigVarLayer::Value:
|
||||||
return value;
|
return value;
|
||||||
case ConfigVarLayer::Override:
|
case ConfigVarLayer::Override:
|
||||||
|
case ConfigVarLayer::Speedrun:
|
||||||
return overrideValue;
|
return overrideValue;
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
@@ -239,8 +253,42 @@ public:
|
|||||||
overrideValue = std::move(newValue);
|
overrideValue = std::move(newValue);
|
||||||
layer = ConfigVarLayer::Override;
|
layer = ConfigVarLayer::Override;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Give a CVar a speedrun-mode override value.
|
||||||
|
*
|
||||||
|
* Lower priority than a launch-arg override. Cleared when speedrun mode is disabled.
|
||||||
|
* The overridden value will not get saved to config.
|
||||||
|
*
|
||||||
|
* @param newValue The new value the CVar will get.
|
||||||
|
*/
|
||||||
|
void setSpeedrunValue(T newValue) {
|
||||||
|
checkRegistered();
|
||||||
|
if (layer != ConfigVarLayer::Override) {
|
||||||
|
overrideValue = std::move(newValue);
|
||||||
|
layer = ConfigVarLayer::Speedrun;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearOverride() {
|
||||||
|
checkRegistered();
|
||||||
|
if (layer == ConfigVarLayer::Override) {
|
||||||
|
overrideValue = {};
|
||||||
|
layer = ConfigVarLayer::Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearSpeedrunOverride() override {
|
||||||
|
checkRegistered();
|
||||||
|
if (layer == ConfigVarLayer::Speedrun) {
|
||||||
|
overrideValue = {};
|
||||||
|
layer = ConfigVarLayer::Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using ActionBindConfigVar = ConfigVar<int>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // DUSK_CONFIG_VAR_HPP
|
#endif // DUSK_CONFIG_VAR_HPP
|
||||||
|
|||||||
@@ -1,8 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk::crash_reporting {
|
||||||
|
|
||||||
void InitializeCrashReporting();
|
enum class Consent {
|
||||||
void ShutdownCrashReporting();
|
Unavailable,
|
||||||
|
Unknown,
|
||||||
|
Given,
|
||||||
|
Revoked,
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace dusk
|
void initialize();
|
||||||
|
void shutdown();
|
||||||
|
Consent get_consent();
|
||||||
|
void set_consent(bool enabled);
|
||||||
|
|
||||||
|
} // namespace dusk::crash_reporting
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef DUSK_DISCORD
|
||||||
|
|
||||||
|
namespace dusk::discord {
|
||||||
|
|
||||||
|
void initialize();
|
||||||
|
void run_callbacks();
|
||||||
|
void update_presence();
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
|
} // namespace dusk::discord
|
||||||
|
|
||||||
|
#endif // DUSK_DISCORD
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
#include "aurora/gfx.h"
|
#include "aurora/gfx.h"
|
||||||
|
|
||||||
extern AuroraInfo auroraInfo;
|
extern AuroraInfo auroraInfo;
|
||||||
extern const char* configPath;
|
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
extern AuroraStats lastFrameAuroraStats;
|
extern AuroraStats lastFrameAuroraStats;
|
||||||
|
|||||||
@@ -1,22 +1,31 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "dolphin/types.h"
|
#include "dolphin/types.h"
|
||||||
|
#include "version.hpp"
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
|
|
||||||
|
struct OffsetVersion {
|
||||||
|
version::GameVersion mGameVersion;
|
||||||
|
u32 mOffset;
|
||||||
|
|
||||||
|
constexpr OffsetVersion(const version::GameVersion gameVersion, const u32 offset)
|
||||||
|
: mGameVersion(gameVersion), mOffset(offset) {}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load bytes from the main DOL by GameCube virtual address
|
* Load bytes from the main DOL by GameCube virtual address
|
||||||
*/
|
*/
|
||||||
bool LoadDolAsset(void* dst, u32 virtualAddress, s32 size);
|
bool LoadDolAsset(void* dst, std::initializer_list<OffsetVersion> virtualAddress, s32 size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load bytes from a REL file in the ISO filesystem, dst must be 32-byte aligned
|
* Load bytes from a REL file in the ISO filesystem, dst must be 32-byte aligned
|
||||||
*/
|
*/
|
||||||
bool LoadRelAsset(void* dst, const char* dvdPath, s32 offset, s32 size);
|
bool LoadRelAsset(void* dst, const char* dvdPath, std::initializer_list<OffsetVersion> offset, s32 size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load bytes from a REL inside RELS.arc
|
* Load bytes from a REL inside RELS.arc
|
||||||
*/
|
*/
|
||||||
bool LoadArchivedRelAsset(void* dst, u32 memType, const char* relFileName, s32 offset, s32 size);
|
bool LoadArchivedRelAsset(void* dst, u32 memType, const char* relFileName, std::initializer_list<OffsetVersion> offset, s32 size);
|
||||||
|
|
||||||
} // namespace dusk
|
} // namespace dusk
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef DUSK_FRAME_INTERP_H
|
#pragma once
|
||||||
#define DUSK_FRAME_INTERP_H
|
|
||||||
|
|
||||||
#include <dolphin/mtx.h>
|
#include <dolphin/mtx.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
@@ -7,6 +6,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
class camera_process_class;
|
class camera_process_class;
|
||||||
|
class view_class;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
@@ -16,40 +16,37 @@ void ensure_initialized();
|
|||||||
|
|
||||||
void begin_record();
|
void begin_record();
|
||||||
void end_record();
|
void end_record();
|
||||||
void interpolate(float step);
|
void begin_sim_tick();
|
||||||
|
void begin_frame(bool enabled, bool is_sim_frame, float step);
|
||||||
|
void interpolate();
|
||||||
float get_interpolation_step();
|
float get_interpolation_step();
|
||||||
|
|
||||||
void request_presentation_sync();
|
void request_presentation_sync();
|
||||||
bool presentation_sync_active();
|
bool presentation_sync_active();
|
||||||
|
|
||||||
|
bool is_enabled();
|
||||||
|
|
||||||
// TODO: These should be phased out as UI is progressively updated to use game_clock
|
// TODO: These should be phased out as UI is progressively updated to use game_clock
|
||||||
void set_ui_tick_pending(bool value);
|
void set_ui_tick_pending(bool value);
|
||||||
bool get_ui_tick_pending();
|
bool get_ui_tick_pending();
|
||||||
|
|
||||||
void open_child(const void* key, int32_t id);
|
bool is_sim_frame();
|
||||||
void close_child();
|
|
||||||
void record_camera(::camera_process_class* cam, int camera_id);
|
|
||||||
void record_final_mtx_raw(const Mtx* dest, const Mtx src);
|
|
||||||
void record_final_mtx_raw_tagged(const Mtx* dest, const Mtx src, uint64_t stable_tag);
|
|
||||||
|
|
||||||
bool lookup_replacement(const void* source, Mtx out);
|
void record_camera(::camera_process_class* cam, int camera_id);
|
||||||
|
void interp_view(::view_class* view);
|
||||||
|
void record_final_mtx(Mtx m, const void *key);
|
||||||
|
void record_final_mtx(Mtx m);
|
||||||
|
|
||||||
|
bool lookup_replacement(const void* key, Mtx out);
|
||||||
bool lookup_concat_replacement(const void* lhs, const void* rhs, Mtx out);
|
bool lookup_concat_replacement(const void* lhs, const void* rhs, Mtx out);
|
||||||
|
|
||||||
|
typedef void (*InterpolationCallBack)(bool isSimFrame, void* pUserWork);
|
||||||
|
// call on a sim tick, will get called during presentation
|
||||||
|
void add_interpolation_callback(InterpolationCallBack pCallBack, void* pUserWork);
|
||||||
|
|
||||||
void begin_presentation_camera();
|
void begin_presentation_camera();
|
||||||
void end_presentation_camera();
|
void end_presentation_camera();
|
||||||
|
|
||||||
struct PresentationCameraScope {
|
|
||||||
PresentationCameraScope() { begin_presentation_camera(); }
|
|
||||||
~PresentationCameraScope() { end_presentation_camera(); }
|
|
||||||
PresentationCameraScope(const PresentationCameraScope&) = delete;
|
|
||||||
PresentationCameraScope& operator=(const PresentationCameraScope&) = delete;
|
|
||||||
PresentationCameraScope(PresentationCameraScope&&) = delete;
|
|
||||||
PresentationCameraScope& operator=(PresentationCameraScope&&) = delete;
|
|
||||||
};
|
|
||||||
|
|
||||||
uint64_t alloc_simple_shadow_pair_base();
|
|
||||||
} // namespace frame_interp
|
} // namespace frame_interp
|
||||||
} // namespace dusk
|
} // namespace dusk
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
#ifndef DUSK_GAME_CLOCK_H
|
#pragma once
|
||||||
#define DUSK_GAME_CLOCK_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
namespace dusk::game_clock {
|
||||||
|
|
||||||
namespace dusk {
|
|
||||||
namespace game_clock {
|
|
||||||
|
|
||||||
void ensure_initialized();
|
void ensure_initialized();
|
||||||
void reset_accumulator();
|
void reset_frame_timer();
|
||||||
|
|
||||||
constexpr float sim_pace() { return 1.0f / 30.0f; }
|
constexpr float sim_pace() { return 1.0f / 30.0f; }
|
||||||
constexpr float period_for_original_frames(float frame_count) { return frame_count * sim_pace(); }
|
constexpr float period_for_original_frames(float frame_count) { return frame_count * sim_pace(); }
|
||||||
@@ -17,16 +13,14 @@ constexpr float ui_initial_dt() { return 1.0f / 60.0f; }
|
|||||||
struct MainLoopPacer {
|
struct MainLoopPacer {
|
||||||
float presentation_dt_seconds;
|
float presentation_dt_seconds;
|
||||||
bool is_interpolating;
|
bool is_interpolating;
|
||||||
bool do_sim_tick;
|
int sim_ticks_to_run;
|
||||||
float interpolation_step;
|
|
||||||
float sim_pace;
|
float sim_pace;
|
||||||
};
|
};
|
||||||
|
|
||||||
MainLoopPacer advance_main_loop();
|
MainLoopPacer advance_main_loop();
|
||||||
|
void commit_sim_tick();
|
||||||
|
float sample_interpolation_step();
|
||||||
|
|
||||||
float consume_interval(const void* consumer);
|
float consume_interval(const void* consumer);
|
||||||
|
|
||||||
} // namespace game_clock
|
} // namespace dusk::game_clock
|
||||||
} // namespace dusk
|
|
||||||
|
|
||||||
#endif // DUSK_GAME_CLOCK_H
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef GAMEPAD_COLOR_H
|
||||||
|
#define GAMEPAD_COLOR_H
|
||||||
|
|
||||||
|
void handleGamepadColor();
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -12,6 +12,7 @@ void rollgoalTableOffset(s16& out_ax, s16& out_az);
|
|||||||
extern bool s_sensor_keep_alive;
|
extern bool s_sensor_keep_alive;
|
||||||
bool get_sensor_keep_alive();
|
bool get_sensor_keep_alive();
|
||||||
void set_sensor_keep_alive(bool value);
|
void set_sensor_keep_alive(bool value);
|
||||||
|
bool rollgoal_gyro_enabled();
|
||||||
} // namespace dusk::gyro
|
} // namespace dusk::gyro
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+35
-5
@@ -1,6 +1,7 @@
|
|||||||
#ifndef DUSK_IO_HPP
|
#ifndef DUSK_IO_HPP
|
||||||
#define DUSK_IO_HPP
|
#define DUSK_IO_HPP
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// I can't believe it's 2026 and neither SDL (no error codes) nor
|
// I can't believe it's 2026 and neither SDL (no error codes) nor
|
||||||
@@ -15,7 +16,7 @@ namespace dusk::io {
|
|||||||
* Methods on this class throw appropriate C++ exceptions when an error occurs.
|
* Methods on this class throw appropriate C++ exceptions when an error occurs.
|
||||||
*/
|
*/
|
||||||
class FileStream {
|
class FileStream {
|
||||||
void* file;
|
FILE* file;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FileStream() noexcept;
|
FileStream() noexcept;
|
||||||
@@ -23,7 +24,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* \brief Take ownership of a FILE* handle.
|
* \brief Take ownership of a FILE* handle.
|
||||||
*/
|
*/
|
||||||
explicit FileStream(void* file);
|
explicit FileStream(FILE* file);
|
||||||
FileStream(const FileStream& other) = delete;
|
FileStream(const FileStream& other) = delete;
|
||||||
FileStream(FileStream&& other) noexcept;
|
FileStream(FileStream&& other) noexcept;
|
||||||
|
|
||||||
@@ -34,6 +35,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
static FileStream OpenRead(const char* utf8Path);
|
static FileStream OpenRead(const char* utf8Path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Open a file for reading at the given path.
|
||||||
|
*/
|
||||||
|
static FileStream OpenRead(const std::filesystem::path& path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Create a file for writing.
|
* \brief Create a file for writing.
|
||||||
*
|
*
|
||||||
@@ -41,16 +47,33 @@ public:
|
|||||||
*/
|
*/
|
||||||
static FileStream Create(const char* utf8Path);
|
static FileStream Create(const char* utf8Path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Create a file for writing.
|
||||||
|
*
|
||||||
|
* If there is an existing file, its contents are demolished.
|
||||||
|
*/
|
||||||
|
static FileStream Create(const std::filesystem::path& path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Read the byte contents of a file directly into a vector.
|
* \brief Read the byte contents of a file directly into a vector.
|
||||||
*/
|
*/
|
||||||
static std::vector<u8> ReadAllBytes(const char* utf8Path);
|
static std::vector<u8> ReadAllBytes(const char* utf8Path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read the byte contents of a file directly into a vector.
|
||||||
|
*/
|
||||||
|
static std::vector<u8> ReadAllBytes(const std::filesystem::path& path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Read the byte contents of a file directly into a vector.
|
* \brief Read the byte contents of a file directly into a vector.
|
||||||
*/
|
*/
|
||||||
static void WriteAllText(const char* utf8Path, std::string_view text);
|
static void WriteAllText(const char* utf8Path, std::string_view text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Read the byte contents of a file directly into a vector.
|
||||||
|
*/
|
||||||
|
static void WriteAllText(const std::filesystem::path& path, std::string_view text);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Read the remaining contents of the file directly into a vector.
|
* \brief Read the remaining contents of the file directly into a vector.
|
||||||
*/
|
*/
|
||||||
@@ -59,17 +82,24 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Get direct access to the underlying FILE* handle.
|
* Get direct access to the underlying FILE* handle.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] void* GetFileHandle() const noexcept {
|
[[nodiscard]] void* GetFileHandle() const noexcept { return file; }
|
||||||
return file;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write data to the file.
|
* Write data to the file.
|
||||||
*/
|
*/
|
||||||
void Write(const char* data, size_t dataLen);
|
void Write(const char* data, size_t dataLen);
|
||||||
|
|
||||||
|
FILE* ToInner();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a std::filesystem::path to a std::string, UTF-8, without exploding on Windows.
|
||||||
|
*/
|
||||||
|
inline std::string fs_path_to_string(const std::filesystem::path& path) {
|
||||||
|
const auto u8str = path.u8string();
|
||||||
|
return {reinterpret_cast<const char*>(u8str.c_str())};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace dusk::io
|
||||||
|
|
||||||
#endif // DUSK_IO_HPP
|
#endif // DUSK_IO_HPP
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace dusk::speedrun {
|
||||||
|
void onGameFrame();
|
||||||
|
uint64_t getFrameCount();
|
||||||
|
void start();
|
||||||
|
void reset();
|
||||||
|
void connectLiveSplit(const char* host = "127.0.0.1", int port = 16834);
|
||||||
|
void disconnectLiveSplit();
|
||||||
|
bool consumeConnectedEvent();
|
||||||
|
bool consumeDisconnectedEvent();
|
||||||
|
void updateLiveSplit();
|
||||||
|
void shutdown();
|
||||||
|
}
|
||||||
@@ -4,10 +4,12 @@
|
|||||||
#include <aurora/aurora.h>
|
#include <aurora/aurora.h>
|
||||||
#include <aurora/lib/logging.hpp>
|
#include <aurora/lib/logging.hpp>
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
void aurora_log_callback(AuroraLogLevel level, const char* module, const char* message, unsigned int len);
|
void aurora_log_callback(AuroraLogLevel level, const char* module, const char* message, unsigned int len);
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
void InitializeFileLogging(const char* configDir, AuroraLogLevel logLevel);
|
void InitializeFileLogging(const std::filesystem::path& configDir, AuroraLogLevel logLevel);
|
||||||
void ShutdownFileLogging();
|
void ShutdownFileLogging();
|
||||||
const char* GetLogFilePath();
|
const char* GetLogFilePath();
|
||||||
void SendToStubLog(AuroraLogLevel level, const char* module, const char* message);
|
void SendToStubLog(AuroraLogLevel level, const char* module, const char* message);
|
||||||
|
|||||||
+19
-4
@@ -1,10 +1,25 @@
|
|||||||
#ifndef DUSK_MAIN_H
|
#ifndef DUSK_MAIN_H
|
||||||
#define DUSK_MAIN_H
|
#define DUSK_MAIN_H
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
extern bool IsRunning;
|
|
||||||
extern bool IsShuttingDown;
|
extern bool IsRunning;
|
||||||
extern bool IsGameLaunched;
|
extern bool IsShuttingDown;
|
||||||
}
|
extern bool IsGameLaunched;
|
||||||
|
extern bool RestartRequested;
|
||||||
|
extern std::filesystem::path ConfigPath;
|
||||||
|
|
||||||
|
#if defined(__ANDROID__) || (defined(TARGET_OS_IOS) && TARGET_OS_IOS) || \
|
||||||
|
(defined(TARGET_OS_TV) && TARGET_OS_TV)
|
||||||
|
inline constexpr bool SupportsProcessRestart = false;
|
||||||
|
#else
|
||||||
|
inline constexpr bool SupportsProcessRestart = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void RequestRestart() noexcept;
|
||||||
|
|
||||||
|
} // namespace dusk
|
||||||
|
|
||||||
#endif // DUSK_MAIN_H
|
#endif // DUSK_MAIN_H
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
struct RoomEntry {
|
struct RoomEntry {
|
||||||
u8 roomNo;
|
u8 roomNo;
|
||||||
std::vector<s16> roomPoints = {};
|
std::vector<s16> roomPoints = {};
|
||||||
|
|||||||
+1
-137
@@ -2,9 +2,6 @@
|
|||||||
#define _SRC_DUSK_MATH_H_
|
#define _SRC_DUSK_MATH_H_
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <array>
|
|
||||||
#include <limits>
|
|
||||||
#include <bit>
|
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
#define M_PI 3.14159265358979323846f
|
#define M_PI 3.14159265358979323846f
|
||||||
@@ -19,139 +16,6 @@ inline float i_cosf(float x) { return cos(x); }
|
|||||||
inline float i_tanf(float x) { return tan(x); }
|
inline float i_tanf(float x) { return tan(x); }
|
||||||
inline float i_acosf(float x) { return acos(x); }
|
inline float i_acosf(float x) { return acos(x); }
|
||||||
|
|
||||||
|
#include <dolphin/ppc_math.h>
|
||||||
// frsqrte matching courtesy of Geotale, with reference to https://achurch.org/cpu-tests/ppc750cl.s
|
|
||||||
|
|
||||||
struct BaseAndDec32 {
|
|
||||||
uint32_t base;
|
|
||||||
int32_t dec;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BaseAndDec64 {
|
|
||||||
uint64_t base;
|
|
||||||
int64_t dec;
|
|
||||||
};
|
|
||||||
|
|
||||||
union c32 {
|
|
||||||
constexpr c32(const float p) {
|
|
||||||
f = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr c32(const uint32_t p) {
|
|
||||||
u = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t u;
|
|
||||||
float f;
|
|
||||||
};
|
|
||||||
|
|
||||||
union c64 {
|
|
||||||
constexpr c64(const double p) {
|
|
||||||
f = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr c64(const uint64_t p) {
|
|
||||||
u = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t u;
|
|
||||||
double f;
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr uint64_t EXPONENT_SHIFT_F64 = 52;
|
|
||||||
static constexpr uint64_t MANTISSA_MASK_F64 = 0x000fffffffffffffULL;
|
|
||||||
static constexpr uint64_t EXPONENT_MASK_F64 = 0x7ff0000000000000ULL;
|
|
||||||
static constexpr uint64_t SIGN_MASK_F64 = 0x8000000000000000ULL;
|
|
||||||
|
|
||||||
static constexpr std::array<BaseAndDec64, 32> RSQRTE_TABLE = {{
|
|
||||||
{0x69fa000000000ULL, -0x15a0000000LL},
|
|
||||||
{0x5f2e000000000ULL, -0x13cc000000LL},
|
|
||||||
{0x554a000000000ULL, -0x1234000000LL},
|
|
||||||
{0x4c30000000000ULL, -0x10d4000000LL},
|
|
||||||
{0x43c8000000000ULL, -0x0f9c000000LL},
|
|
||||||
{0x3bfc000000000ULL, -0x0e88000000LL},
|
|
||||||
{0x34b8000000000ULL, -0x0d94000000LL},
|
|
||||||
{0x2df0000000000ULL, -0x0cb8000000LL},
|
|
||||||
{0x2794000000000ULL, -0x0bf0000000LL},
|
|
||||||
{0x219c000000000ULL, -0x0b40000000LL},
|
|
||||||
{0x1bfc000000000ULL, -0x0aa0000000LL},
|
|
||||||
{0x16ae000000000ULL, -0x0a0c000000LL},
|
|
||||||
{0x11a8000000000ULL, -0x0984000000LL},
|
|
||||||
{0x0ce6000000000ULL, -0x090c000000LL},
|
|
||||||
{0x0862000000000ULL, -0x0898000000LL},
|
|
||||||
{0x0416000000000ULL, -0x082c000000LL},
|
|
||||||
{0xffe8000000000ULL, -0x1e90000000LL},
|
|
||||||
{0xf0a4000000000ULL, -0x1c00000000LL},
|
|
||||||
{0xe2a8000000000ULL, -0x19c0000000LL},
|
|
||||||
{0xd5c8000000000ULL, -0x17c8000000LL},
|
|
||||||
{0xc9e4000000000ULL, -0x1610000000LL},
|
|
||||||
{0xbedc000000000ULL, -0x1490000000LL},
|
|
||||||
{0xb498000000000ULL, -0x1330000000LL},
|
|
||||||
{0xab00000000000ULL, -0x11f8000000LL},
|
|
||||||
{0xa204000000000ULL, -0x10e8000000LL},
|
|
||||||
{0x9994000000000ULL, -0x0fe8000000LL},
|
|
||||||
{0x91a0000000000ULL, -0x0f08000000LL},
|
|
||||||
{0x8a1c000000000ULL, -0x0e38000000LL},
|
|
||||||
{0x8304000000000ULL, -0x0d78000000LL},
|
|
||||||
{0x7c48000000000ULL, -0x0cc8000000LL},
|
|
||||||
{0x75e4000000000ULL, -0x0c28000000LL},
|
|
||||||
{0x6fd0000000000ULL, -0x0b98000000LL},
|
|
||||||
}};
|
|
||||||
|
|
||||||
[[nodiscard]] static inline double frsqrte(const double val) {
|
|
||||||
c64 bits(val);
|
|
||||||
|
|
||||||
uint64_t mantissa = bits.u & MANTISSA_MASK_F64;
|
|
||||||
int64_t exponent = bits.u & EXPONENT_MASK_F64;
|
|
||||||
bool sign = (bits.u & SIGN_MASK_F64) != 0;
|
|
||||||
|
|
||||||
// Handle 0 case
|
|
||||||
if (mantissa == 0 && exponent == 0) {
|
|
||||||
return std::copysign(std::numeric_limits<double>::infinity(), bits.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle NaN-like
|
|
||||||
if (exponent == EXPONENT_MASK_F64) {
|
|
||||||
if (mantissa == 0) {
|
|
||||||
return sign ? std::numeric_limits<double>::quiet_NaN() : 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle negative inputs
|
|
||||||
if (sign) {
|
|
||||||
return std::numeric_limits<double>::quiet_NaN();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exponent == 0) {
|
|
||||||
// Shift so one bit goes to where the exponent would be,
|
|
||||||
// then clear that bit to mimic a not-subnormal number!
|
|
||||||
// Aka, if there are 12 leading zeroes, shift left once
|
|
||||||
uint32_t shift = std::countl_zero(mantissa) - static_cast<uint32_t>(63 - EXPONENT_SHIFT_F64);
|
|
||||||
|
|
||||||
mantissa <<= shift;
|
|
||||||
mantissa &= MANTISSA_MASK_F64;
|
|
||||||
// The shift is subtracted by 1 because denormals by default
|
|
||||||
// are offset by 1 (exponent 0 doesn't have implied 1 bit)
|
|
||||||
exponent -= static_cast<int64_t>(shift - 1) << EXPONENT_SHIFT_F64;
|
|
||||||
}
|
|
||||||
|
|
||||||
// In reality this doesn't get the full exponent -- Only the least significant bit
|
|
||||||
// Only that's needed because square roots of higher exponent bits simply multiply the
|
|
||||||
// result by 2!!
|
|
||||||
uint32_t key = static_cast<uint32_t>((static_cast<uint64_t>(exponent) | mantissa) >> 37);
|
|
||||||
uint64_t new_exp =
|
|
||||||
(static_cast<uint64_t>((0xbfcLL << EXPONENT_SHIFT_F64) - exponent) >> 1) & EXPONENT_MASK_F64;
|
|
||||||
|
|
||||||
// Remove the bits relating to anything higher than the LSB of the exponent
|
|
||||||
const auto &entry = RSQRTE_TABLE[0x1f & (key >> 11)];
|
|
||||||
|
|
||||||
// The result is given by an estimate then an adjustment based on the original
|
|
||||||
// key that was computed
|
|
||||||
uint64_t new_mantissa = static_cast<uint64_t>(entry.base + entry.dec * static_cast<int64_t>(key & 0x7ff));
|
|
||||||
|
|
||||||
return c64(new_exp | new_mantissa).f;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // _SRC_DUSK_MATH_H_
|
#endif // _SRC_DUSK_MATH_H_
|
||||||
|
|||||||
+98
-6
@@ -1,6 +1,8 @@
|
|||||||
#ifndef DUSK_CONFIG_H
|
#ifndef DUSK_CONFIG_H
|
||||||
#define DUSK_CONFIG_H
|
#define DUSK_CONFIG_H
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
#include "dusk/config_var.hpp"
|
#include "dusk/config_var.hpp"
|
||||||
|
|
||||||
namespace dusk {
|
namespace dusk {
|
||||||
@@ -13,12 +15,49 @@ enum class BloomMode : int {
|
|||||||
Dusk = 2,
|
Dusk = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class GameLanguage : u8 {
|
||||||
|
English = OS_LANGUAGE_ENGLISH,
|
||||||
|
German = OS_LANGUAGE_GERMAN,
|
||||||
|
French = OS_LANGUAGE_FRENCH,
|
||||||
|
Spanish = OS_LANGUAGE_SPANISH,
|
||||||
|
Italian = OS_LANGUAGE_ITALIAN,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class DiscVerificationState : u8 {
|
||||||
|
Unknown = 0,
|
||||||
|
Success,
|
||||||
|
HashMismatch,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class GyroMode : u8 {
|
||||||
|
Sensor = 0,
|
||||||
|
Mouse = 1,
|
||||||
|
};
|
||||||
|
|
||||||
namespace config {
|
namespace config {
|
||||||
template <>
|
template <>
|
||||||
struct ConfigEnumRange<BloomMode> {
|
struct ConfigEnumRange<BloomMode> {
|
||||||
static constexpr auto min = BloomMode::Off;
|
static constexpr auto min = BloomMode::Off;
|
||||||
static constexpr auto max = BloomMode::Dusk;
|
static constexpr auto max = BloomMode::Dusk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ConfigEnumRange<GameLanguage> {
|
||||||
|
static constexpr auto min = GameLanguage::English;
|
||||||
|
static constexpr auto max = GameLanguage::Italian;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ConfigEnumRange<DiscVerificationState> {
|
||||||
|
static constexpr auto min = DiscVerificationState::Unknown;
|
||||||
|
static constexpr auto max = DiscVerificationState::HashMismatch;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct ConfigEnumRange<GyroMode> {
|
||||||
|
static constexpr auto min = GyroMode::Sensor;
|
||||||
|
static constexpr auto max = GyroMode::Mouse;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Persistent user settings
|
// Persistent user settings
|
||||||
@@ -31,6 +70,8 @@ struct UserSettings {
|
|||||||
ConfigVar<bool> enableFullscreen;
|
ConfigVar<bool> enableFullscreen;
|
||||||
ConfigVar<bool> enableVsync;
|
ConfigVar<bool> enableVsync;
|
||||||
ConfigVar<bool> lockAspectRatio;
|
ConfigVar<bool> lockAspectRatio;
|
||||||
|
ConfigVar<bool> enableFpsOverlay;
|
||||||
|
ConfigVar<int> fpsOverlayCorner;
|
||||||
} video;
|
} video;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
@@ -41,15 +82,18 @@ struct UserSettings {
|
|||||||
ConfigVar<int> soundEffectsVolume;
|
ConfigVar<int> soundEffectsVolume;
|
||||||
ConfigVar<int> fanfareVolume;
|
ConfigVar<int> fanfareVolume;
|
||||||
ConfigVar<bool> enableReverb;
|
ConfigVar<bool> enableReverb;
|
||||||
|
ConfigVar<bool> enableHrtf;
|
||||||
|
ConfigVar<bool> menuSounds;
|
||||||
} audio;
|
} audio;
|
||||||
|
|
||||||
// Game settings
|
// Game settings
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
ConfigVar<GameLanguage> language;
|
||||||
|
|
||||||
// QoL
|
// QoL
|
||||||
ConfigVar<bool> enableQuickTransform;
|
ConfigVar<bool> enableQuickTransform;
|
||||||
ConfigVar<bool> hideTvSettingsScreen;
|
ConfigVar<bool> hideTvSettingsScreen;
|
||||||
ConfigVar<bool> skipWarningScreen;
|
|
||||||
ConfigVar<bool> biggerWallets;
|
ConfigVar<bool> biggerWallets;
|
||||||
ConfigVar<bool> noReturnRupees;
|
ConfigVar<bool> noReturnRupees;
|
||||||
ConfigVar<bool> disableRupeeCutscenes;
|
ConfigVar<bool> disableRupeeCutscenes;
|
||||||
@@ -60,28 +104,45 @@ struct UserSettings {
|
|||||||
ConfigVar<bool> fastClimbing;
|
ConfigVar<bool> fastClimbing;
|
||||||
ConfigVar<bool> noMissClimbing;
|
ConfigVar<bool> noMissClimbing;
|
||||||
ConfigVar<bool> fastTears;
|
ConfigVar<bool> fastTears;
|
||||||
|
ConfigVar<bool> no2ndFishForCat;
|
||||||
ConfigVar<bool> instantSaves;
|
ConfigVar<bool> instantSaves;
|
||||||
ConfigVar<bool> instantText;
|
ConfigVar<bool> instantText;
|
||||||
ConfigVar<bool> sunsSong;
|
ConfigVar<bool> sunsSong;
|
||||||
|
ConfigVar<bool> autoSave;
|
||||||
|
|
||||||
// Preferences
|
// Preferences
|
||||||
ConfigVar<bool> enableMirrorMode;
|
ConfigVar<bool> enableMirrorMode;
|
||||||
ConfigVar<bool> invertCameraXAxis;
|
ConfigVar<bool> minimalHUD;
|
||||||
ConfigVar<bool> disableMainHUD;
|
ConfigVar<bool> pauseOnFocusLost;
|
||||||
|
ConfigVar<bool> enableLinkDollRotation;
|
||||||
|
ConfigVar<bool> enableAchievementToasts;
|
||||||
|
ConfigVar<bool> enableControllerToasts;
|
||||||
|
ConfigVar<bool> enableDiscordPresence;
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
|
ConfigVar<bool> enhancedLighting;
|
||||||
|
ConfigVar<bool> enableSpecularLighting;
|
||||||
|
ConfigVar<bool> enableRimLighting;
|
||||||
|
ConfigVar<float> specularIntensity;
|
||||||
|
ConfigVar<float> rimIntensity;
|
||||||
|
ConfigVar<float> ambientLightMultiplier;
|
||||||
|
ConfigVar<float> diffuseLightMultiplier;
|
||||||
ConfigVar<BloomMode> bloomMode;
|
ConfigVar<BloomMode> bloomMode;
|
||||||
ConfigVar<float> bloomMultiplier;
|
ConfigVar<float> bloomMultiplier;
|
||||||
ConfigVar<bool> enableWaterRefraction;
|
ConfigVar<bool> disableWaterRefraction;
|
||||||
ConfigVar<bool> enableFrameInterpolation;
|
ConfigVar<bool> enableFrameInterpolation;
|
||||||
ConfigVar<int> internalResolutionScale;
|
ConfigVar<int> internalResolutionScale;
|
||||||
ConfigVar<int> shadowResolutionMultiplier;
|
ConfigVar<int> shadowResolutionMultiplier;
|
||||||
|
ConfigVar<bool> enableDepthOfField;
|
||||||
|
ConfigVar<bool> enableMapBackground;
|
||||||
|
ConfigVar<bool> disableCutscenePillarboxing;
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
ConfigVar<bool> noLowHpSound;
|
ConfigVar<bool> noLowHpSound;
|
||||||
ConfigVar<bool> midnasLamentNonStop;
|
ConfigVar<bool> midnasLamentNonStop;
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
|
ConfigVar<GyroMode> gyroMode;
|
||||||
ConfigVar<bool> enableGyroAim;
|
ConfigVar<bool> enableGyroAim;
|
||||||
ConfigVar<bool> enableGyroRollgoal;
|
ConfigVar<bool> enableGyroRollgoal;
|
||||||
ConfigVar<float> gyroSensitivityX;
|
ConfigVar<float> gyroSensitivityX;
|
||||||
@@ -91,6 +152,15 @@ struct UserSettings {
|
|||||||
ConfigVar<float> gyroDeadband;
|
ConfigVar<float> gyroDeadband;
|
||||||
ConfigVar<bool> gyroInvertPitch;
|
ConfigVar<bool> gyroInvertPitch;
|
||||||
ConfigVar<bool> gyroInvertYaw;
|
ConfigVar<bool> gyroInvertYaw;
|
||||||
|
ConfigVar<bool> freeCamera;
|
||||||
|
ConfigVar<bool> invertCameraXAxis;
|
||||||
|
ConfigVar<bool> invertCameraYAxis;
|
||||||
|
ConfigVar<bool> invertFirstPersonXAxis;
|
||||||
|
ConfigVar<bool> invertFirstPersonYAxis;
|
||||||
|
ConfigVar<float> freeCameraSensitivity;
|
||||||
|
ConfigVar<bool> debugFlyCam;
|
||||||
|
ConfigVar<bool> debugFlyCamLockEvents;
|
||||||
|
ConfigVar<bool> allowBackgroundInput;
|
||||||
|
|
||||||
// Cheats
|
// Cheats
|
||||||
ConfigVar<bool> infiniteHearts;
|
ConfigVar<bool> infiniteHearts;
|
||||||
@@ -99,11 +169,13 @@ struct UserSettings {
|
|||||||
ConfigVar<bool> infiniteOil;
|
ConfigVar<bool> infiniteOil;
|
||||||
ConfigVar<bool> infiniteOxygen;
|
ConfigVar<bool> infiniteOxygen;
|
||||||
ConfigVar<bool> infiniteRupees;
|
ConfigVar<bool> infiniteRupees;
|
||||||
|
ConfigVar<bool> enableIndefiniteItemDrops;
|
||||||
ConfigVar<bool> moonJump;
|
ConfigVar<bool> moonJump;
|
||||||
ConfigVar<bool> superClawshot;
|
ConfigVar<bool> superClawshot;
|
||||||
ConfigVar<bool> alwaysGreatspin;
|
ConfigVar<bool> alwaysGreatspin;
|
||||||
ConfigVar<bool> enableFastIronBoots;
|
ConfigVar<bool> enableFastIronBoots;
|
||||||
ConfigVar<bool> canTransformAnywhere;
|
ConfigVar<bool> canTransformAnywhere;
|
||||||
|
ConfigVar<bool> fastRoll;
|
||||||
ConfigVar<bool> fastSpinner;
|
ConfigVar<bool> fastSpinner;
|
||||||
ConfigVar<bool> freeMagicArmor;
|
ConfigVar<bool> freeMagicArmor;
|
||||||
|
|
||||||
@@ -112,17 +184,36 @@ struct UserSettings {
|
|||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
ConfigVar<bool> enableTurboKeybind;
|
ConfigVar<bool> enableTurboKeybind;
|
||||||
|
ConfigVar<bool> enableResetKeybind;
|
||||||
|
|
||||||
|
// Tools
|
||||||
|
ConfigVar<bool> speedrunMode;
|
||||||
|
ConfigVar<bool> liveSplitEnabled;
|
||||||
|
ConfigVar<bool> showSpeedrunRTATimer;
|
||||||
|
ConfigVar<bool> recordingMode;
|
||||||
|
ConfigVar<bool> showInputViewer;
|
||||||
|
ConfigVar<bool> showInputViewerGyro;
|
||||||
} game;
|
} game;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
ConfigVar<std::string> isoPath;
|
ConfigVar<std::string> isoPath;
|
||||||
|
ConfigVar<DiscVerificationState> isoVerification;
|
||||||
ConfigVar<std::string> graphicsBackend;
|
ConfigVar<std::string> graphicsBackend;
|
||||||
ConfigVar<bool> skipPreLaunchUI;
|
ConfigVar<bool> skipPreLaunchUI;
|
||||||
ConfigVar<bool> showPipelineCompilation;
|
ConfigVar<bool> showPipelineCompilation;
|
||||||
ConfigVar<bool> wasPresetChosen;
|
ConfigVar<bool> wasPresetChosen;
|
||||||
ConfigVar<bool> enableCrashReporting;
|
ConfigVar<bool> checkForUpdates;
|
||||||
ConfigVar<bool> duskMenuOpen;
|
ConfigVar<int> cardFileType;
|
||||||
|
ConfigVar<bool> enableAdvancedSettings;
|
||||||
} backend;
|
} backend;
|
||||||
|
|
||||||
|
// Arrays of size 4 for 4 ports
|
||||||
|
struct {
|
||||||
|
std::array<ActionBindConfigVar, 4> firstPersonCamera;
|
||||||
|
std::array<ActionBindConfigVar, 4> callMidna;
|
||||||
|
std::array<ActionBindConfigVar, 4> openDusklightMenu;
|
||||||
|
std::array<ActionBindConfigVar, 4> turboSpeedButton;
|
||||||
|
} actionBindings;
|
||||||
};
|
};
|
||||||
|
|
||||||
UserSettings& getSettings();
|
UserSettings& getSettings();
|
||||||
@@ -146,6 +237,7 @@ struct TransientSettings {
|
|||||||
CollisionViewSettings collisionView;
|
CollisionViewSettings collisionView;
|
||||||
bool skipFrameRateLimit;
|
bool skipFrameRateLimit;
|
||||||
bool moveLinkActive;
|
bool moveLinkActive;
|
||||||
|
bool stateShareLoadActive;
|
||||||
};
|
};
|
||||||
|
|
||||||
TransientSettings& getTransientSettings();
|
TransientSettings& getTransientSettings();
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <aurora/aurora.h>
|
||||||
|
|
||||||
|
namespace dusk {
|
||||||
|
|
||||||
|
struct SpeedrunInfo {
|
||||||
|
void startRun() {
|
||||||
|
m_isRunStarted = true;
|
||||||
|
m_startTimestamp = OSGetTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
void stopRun() {
|
||||||
|
m_isRunStarted = false;
|
||||||
|
m_endTimestamp = OSGetTime() - m_startTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset() {
|
||||||
|
m_isRunStarted = false;
|
||||||
|
m_startTimestamp = 0;
|
||||||
|
m_endTimestamp = 0;
|
||||||
|
m_isPauseIGT = false;
|
||||||
|
m_loadStartTimestamp = 0;
|
||||||
|
m_totalLoadTime = 0;
|
||||||
|
m_igtTimer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool m_isRunStarted = false;
|
||||||
|
OSTime m_startTimestamp = 0;
|
||||||
|
OSTime m_endTimestamp = 0;
|
||||||
|
|
||||||
|
bool m_isPauseIGT = false;
|
||||||
|
OSTime m_loadStartTimestamp = 0;
|
||||||
|
OSTime m_totalLoadTime = 0;
|
||||||
|
OSTime m_igtTimer = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SpeedrunInfo m_speedrunInfo;
|
||||||
|
|
||||||
|
void resetForSpeedrunMode();
|
||||||
|
|
||||||
|
} // namespace dusk
|
||||||
+25
-25
@@ -1,9 +1,10 @@
|
|||||||
#ifndef DUSK_TIME_H
|
#ifndef DUSK_TIME_H
|
||||||
#define DUSK_TIME_H
|
#define DUSK_TIME_H
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
#include <numeric>
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <numeric>
|
||||||
|
|
||||||
|
#include "SDL3/SDL_timer.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
@@ -15,28 +16,26 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
#else
|
|
||||||
#include "SDL3/SDL_timer.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Limiter {
|
class Limiter {
|
||||||
using delta_clock = std::chrono::high_resolution_clock;
|
|
||||||
using duration_t = std::chrono::nanoseconds;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Reset() { m_oldTime = delta_clock::now(); }
|
using duration_t = Uint64;
|
||||||
|
|
||||||
|
void Reset() { m_oldTime = SDL_GetTicksNS(); }
|
||||||
|
|
||||||
void Sleep(duration_t targetFrameTime) {
|
void Sleep(duration_t targetFrameTime) {
|
||||||
if (targetFrameTime.count() == 0) {
|
if (targetFrameTime == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto start = delta_clock::now();
|
const Uint64 start = SDL_GetTicksNS();
|
||||||
duration_t adjustedSleepTime = SleepTime(targetFrameTime);
|
duration_t adjustedSleepTime = SleepTime(targetFrameTime);
|
||||||
if (adjustedSleepTime.count() > 0) {
|
if (adjustedSleepTime > 0) {
|
||||||
NanoSleep(adjustedSleepTime);
|
NanoSleep(adjustedSleepTime);
|
||||||
duration_t overslept = TimeSince(start) - adjustedSleepTime;
|
const duration_t elapsed = TimeSince(start);
|
||||||
if (overslept < duration_t{targetFrameTime}) {
|
const duration_t overslept = elapsed > adjustedSleepTime ? elapsed - adjustedSleepTime : 0;
|
||||||
|
if (overslept < targetFrameTime) {
|
||||||
m_overheadTimes[m_overheadTimeIdx] = overslept;
|
m_overheadTimes[m_overheadTimeIdx] = overslept;
|
||||||
m_overheadTimeIdx = (m_overheadTimeIdx + 1) % m_overheadTimes.size();
|
m_overheadTimeIdx = (m_overheadTimeIdx + 1) % m_overheadTimes.size();
|
||||||
}
|
}
|
||||||
@@ -45,23 +44,23 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
duration_t SleepTime(duration_t targetFrameTime) {
|
duration_t SleepTime(duration_t targetFrameTime) {
|
||||||
const auto sleepTime = duration_t{targetFrameTime} - TimeSince(m_oldTime);
|
const duration_t elapsed = TimeSince(m_oldTime);
|
||||||
m_overhead = std::accumulate(m_overheadTimes.begin(), m_overheadTimes.end(), duration_t{}) / m_overheadTimes.size();
|
const duration_t sleepTime = elapsed < targetFrameTime ? targetFrameTime - elapsed : 0;
|
||||||
|
m_overhead = std::accumulate(m_overheadTimes.begin(), m_overheadTimes.end(), duration_t{0}) /
|
||||||
|
m_overheadTimes.size();
|
||||||
if (sleepTime > m_overhead) {
|
if (sleepTime > m_overhead) {
|
||||||
return sleepTime - m_overhead;
|
return sleepTime - m_overhead;
|
||||||
}
|
}
|
||||||
return duration_t{0};
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
delta_clock::time_point m_oldTime;
|
Uint64 m_oldTime = 0;
|
||||||
std::array<duration_t, 4> m_overheadTimes{};
|
std::array<duration_t, 4> m_overheadTimes{};
|
||||||
size_t m_overheadTimeIdx = 0;
|
size_t m_overheadTimeIdx = 0;
|
||||||
duration_t m_overhead = duration_t{0};
|
duration_t m_overhead = 0;
|
||||||
|
|
||||||
duration_t TimeSince(delta_clock::time_point start) {
|
duration_t TimeSince(Uint64 start) const { return SDL_GetTicksNS() - start; }
|
||||||
return std::chrono::duration_cast<duration_t>(delta_clock::now() - start);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
void NanoSleep(const duration_t duration) {
|
void NanoSleep(const duration_t duration) {
|
||||||
@@ -85,9 +84,10 @@ private:
|
|||||||
|
|
||||||
LARGE_INTEGER start, current;
|
LARGE_INTEGER start, current;
|
||||||
QueryPerformanceCounter(&start);
|
QueryPerformanceCounter(&start);
|
||||||
LONGLONG ticksToWait = static_cast<LONGLONG>(duration.count() * countPerNs);
|
const LONGLONG ticksToWait = static_cast<LONGLONG>(duration * countPerNs);
|
||||||
if (DWORD ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(); ms > 1) {
|
const Uint64 ms = duration / 1'000'000ULL;
|
||||||
::Sleep(ms - 1);
|
if (ms > 1) {
|
||||||
|
::Sleep(static_cast<DWORD>(ms - 1));
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
QueryPerformanceCounter(¤t);
|
QueryPerformanceCounter(¤t);
|
||||||
@@ -99,7 +99,7 @@ private:
|
|||||||
} while (current.QuadPart - start.QuadPart < ticksToWait);
|
} while (current.QuadPart - start.QuadPart < ticksToWait);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void NanoSleep(const duration_t duration) { SDL_DelayPrecise(duration.count()); }
|
void NanoSleep(const duration_t duration) { SDL_DelayPrecise(duration); }
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
#ifndef DUSK_VERSION_HPP
|
||||||
|
#define DUSK_VERSION_HPP
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functionality for switching game behavior based on the loaded game version (e.g. PAL/JPN, GC/Wii)
|
||||||
|
*/
|
||||||
|
namespace dusk::version {
|
||||||
|
enum class GameVersion : u8 {
|
||||||
|
GcnUsa = VERSION_GCN_USA,
|
||||||
|
GcnPal = VERSION_GCN_PAL,
|
||||||
|
GcnJpn = VERSION_GCN_JPN,
|
||||||
|
WiiUsaRev0 = VERSION_WII_USA_R0,
|
||||||
|
WiiUsa = VERSION_WII_USA_R2,
|
||||||
|
WiiPal = VERSION_WII_PAL,
|
||||||
|
WiiJpn = VERSION_WII_JPN,
|
||||||
|
WiiKor = VERSION_WII_KOR,
|
||||||
|
};
|
||||||
|
|
||||||
|
bool isGcn();
|
||||||
|
bool isWii();
|
||||||
|
bool isPalOrAtLeastWiiR2();
|
||||||
|
|
||||||
|
bool isRegionPal();
|
||||||
|
bool isRegionJpn();
|
||||||
|
bool isRegionUsa();
|
||||||
|
|
||||||
|
GameVersion getGameVersion();
|
||||||
|
|
||||||
|
const DVDDiskID& getDiskID();
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct VersionOption {
|
||||||
|
GameVersion mVersion;
|
||||||
|
T mValue;
|
||||||
|
|
||||||
|
constexpr VersionOption(GameVersion version, T value) : mVersion(version), mValue(value) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
const T& versionSelect(const std::initializer_list<VersionOption<T>> options) {
|
||||||
|
const auto version = getGameVersion();
|
||||||
|
for (const auto& opt : options) {
|
||||||
|
if (opt.mVersion == version) {
|
||||||
|
return opt.mValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unable to find value.
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
const T& versionSelect(const std::initializer_list<VersionOption<T>> options, const T& defaultValue) {
|
||||||
|
const auto version = getGameVersion();
|
||||||
|
for (const auto& opt : options) {
|
||||||
|
if (opt.mVersion == version) {
|
||||||
|
return opt.mValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
} // namespace dusk::version
|
||||||
|
|
||||||
|
#endif // DUSK_VERSION_HPP
|
||||||
@@ -25,7 +25,7 @@ typedef struct leafdraw_class : base_process_class {
|
|||||||
#endif
|
#endif
|
||||||
/* 0xB8 */ leafdraw_method_class* leaf_methods;
|
/* 0xB8 */ leafdraw_method_class* leaf_methods;
|
||||||
/* 0xBC */ s8 unk_0xBC;
|
/* 0xBC */ s8 unk_0xBC;
|
||||||
/* 0xBD */ u8 unk_0xBD;
|
/* 0xBD */ u8 draw_interp_frame;
|
||||||
/* 0xBE */ draw_priority_class draw_priority;
|
/* 0xBE */ draw_priority_class draw_priority;
|
||||||
} leafdraw_class;
|
} leafdraw_class;
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ typedef struct process_node_class {
|
|||||||
/* 0x0BC */ layer_class layer;
|
/* 0x0BC */ layer_class layer;
|
||||||
/* 0x0E8 */ node_list_class layer_nodelist[16];
|
/* 0x0E8 */ node_list_class layer_nodelist[16];
|
||||||
/* 0x1A8 */ s8 unk_0x1A8;
|
/* 0x1A8 */ s8 unk_0x1A8;
|
||||||
|
/* 0x1A9 */ s8 draw_interp_frame;
|
||||||
} process_node_class;
|
} process_node_class;
|
||||||
|
|
||||||
typedef struct node_process_profile_definition {
|
typedef struct node_process_profile_definition {
|
||||||
|
|||||||
+15
-1
@@ -73,6 +73,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __MWERKS__
|
#ifndef __MWERKS__
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
// Silence clangd errors about MWCC PPC intrinsics by declaring them here.
|
// Silence clangd errors about MWCC PPC intrinsics by declaring them here.
|
||||||
extern int __cntlzw(unsigned int);
|
extern int __cntlzw(unsigned int);
|
||||||
extern int __rlwimi(int, int, int, int, int);
|
extern int __rlwimi(int, int, int, int, int);
|
||||||
@@ -80,7 +83,14 @@ extern void __dcbf(void*, int);
|
|||||||
extern void __dcbz(void*, int);
|
extern void __dcbz(void*, int);
|
||||||
extern void __sync();
|
extern void __sync();
|
||||||
extern int __abs(int);
|
extern int __abs(int);
|
||||||
void* __memcpy(void*, const void*, int);
|
#if defined(__has_builtin) && __has_builtin(__builtin_memcpy)
|
||||||
|
#define __memcpy __builtin_memcpy
|
||||||
|
#else
|
||||||
|
#define __memcpy memcpy
|
||||||
|
#endif
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
@@ -220,12 +230,16 @@ using std::isnan;
|
|||||||
// Some basic macros that are more convenient than putting down #if blocks for one-line changes.
|
// Some basic macros that are more convenient than putting down #if blocks for one-line changes.
|
||||||
#if TARGET_PC
|
#if TARGET_PC
|
||||||
#define IF_DUSK(statement) statement
|
#define IF_DUSK(statement) statement
|
||||||
|
#define IF_DUSK_BLOCK(cond) if (cond) {
|
||||||
|
#define IF_DUSK_BLOCK_END }
|
||||||
#define IF_DUSK_ARG(expr) , expr
|
#define IF_DUSK_ARG(expr) , expr
|
||||||
#define IF_NOT_DUSK(statement)
|
#define IF_NOT_DUSK(statement)
|
||||||
#define DUSK_IF_ELSE(dusk, orig) dusk
|
#define DUSK_IF_ELSE(dusk, orig) dusk
|
||||||
#else
|
#else
|
||||||
#define IF_DUSK(statement)
|
#define IF_DUSK(statement)
|
||||||
#define IF_DUSK_ARG(expr)
|
#define IF_DUSK_ARG(expr)
|
||||||
|
#define IF_DUSK_BLOCK(cond)
|
||||||
|
#define IF_DUSK_BLOCK_END
|
||||||
#define IF_NOT_DUSK(statement) statement
|
#define IF_NOT_DUSK(statement) statement
|
||||||
#define DUSK_IF_ELSE(dusk, orig) orig
|
#define DUSK_IF_ELSE(dusk, orig) orig
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "Z2AudioLib/Z2EnvSeMgr.h"
|
#include "Z2AudioLib/Z2EnvSeMgr.h"
|
||||||
#include "Z2AudioLib/Z2LinkMgr.h"
|
#include "Z2AudioLib/Z2LinkMgr.h"
|
||||||
#include "dusk/audio.h"
|
#include "dusk/audio.h"
|
||||||
|
#include "dusk/settings.h"
|
||||||
|
|
||||||
class mDoAud_zelAudio_c : public Z2AudioMgr {
|
class mDoAud_zelAudio_c : public Z2AudioMgr {
|
||||||
public:
|
public:
|
||||||
@@ -132,6 +133,18 @@ inline void mDoAud_seStart(u32 i_sfxID, const Vec* i_sePos, u32 param_2, s8 i_re
|
|||||||
-1.0f, -1.0f, 0);
|
-1.0f, -1.0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
inline void mDoAud_seStartMenu(u32 i_sfxID) {
|
||||||
|
if (!mDoAud_zelAudio_c::isInitFlag()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!dusk::getSettings().audio.menuSounds.getValue()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mDoAud_seStart(i_sfxID, nullptr, 0, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline void mDoAud_seStartLevel(u32 i_sfxID, const Vec* i_sePos, u32 param_2, s8 i_reverb) {
|
inline void mDoAud_seStartLevel(u32 i_sfxID, const Vec* i_sePos, u32 param_2, s8 i_reverb) {
|
||||||
DUSK_AUDIO_SKIP()
|
DUSK_AUDIO_SKIP()
|
||||||
Z2AudioMgr::getInterface()->seStartLevel(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f,
|
Z2AudioMgr::getInterface()->seStartLevel(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f,
|
||||||
|
|||||||
@@ -79,6 +79,10 @@ public:
|
|||||||
virtual void viewCalc();
|
virtual void viewCalc();
|
||||||
virtual ~J3DModel() {}
|
virtual ~J3DModel() {}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
static void interp_callback(bool isSimFrame, void* pUserWork);
|
||||||
|
#endif
|
||||||
|
|
||||||
J3DModelData* getModelData() { return mModelData; }
|
J3DModelData* getModelData() { return mModelData; }
|
||||||
|
|
||||||
void onFlag(u32 flag) { mFlags |= flag; }
|
void onFlag(u32 flag) { mFlags |= flag; }
|
||||||
@@ -105,9 +109,7 @@ public:
|
|||||||
void setAnmMtx(int jointNo, Mtx m) {
|
void setAnmMtx(int jointNo, Mtx m) {
|
||||||
mMtxBuffer->setAnmMtx(jointNo, m);
|
mMtxBuffer->setAnmMtx(jointNo, m);
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
dusk::frame_interp::record_final_mtx_raw(
|
dusk::frame_interp::record_final_mtx(mMtxBuffer->getAnmMtx(jointNo));
|
||||||
reinterpret_cast<const Mtx*>(mMtxBuffer->getAnmMtx(jointNo)),
|
|
||||||
mMtxBuffer->getAnmMtx(jointNo));
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
MtxP getAnmMtx(int jointNo) { return mMtxBuffer->getAnmMtx(jointNo); }
|
MtxP getAnmMtx(int jointNo) { return mMtxBuffer->getAnmMtx(jointNo); }
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ public:
|
|||||||
void syncJ3DSysPointers() const;
|
void syncJ3DSysPointers() const;
|
||||||
void syncJ3DSysFlags() const;
|
void syncJ3DSysFlags() const;
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
bool needsInterpCallBack() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual ~J3DModelData() {}
|
virtual ~J3DModelData() {}
|
||||||
|
|
||||||
void simpleCalcMaterial(Mtx mtx) { simpleCalcMaterial(0, mtx); }
|
void simpleCalcMaterial(Mtx mtx) { simpleCalcMaterial(0, mtx); }
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public:
|
|||||||
void copy(J3DMaterial*);
|
void copy(J3DMaterial*);
|
||||||
s32 newSharedDisplayList(u32);
|
s32 newSharedDisplayList(u32);
|
||||||
s32 newSingleSharedDisplayList(u32);
|
s32 newSingleSharedDisplayList(u32);
|
||||||
|
#if TARGET_PC
|
||||||
|
bool needsInterpCallBack() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void calc(f32 const (*)[4]);
|
virtual void calc(f32 const (*)[4]);
|
||||||
virtual void calcDiffTexMtx(f32 const (*)[4]);
|
virtual void calcDiffTexMtx(f32 const (*)[4]);
|
||||||
@@ -46,7 +49,6 @@ public:
|
|||||||
virtual void change();
|
virtual void change();
|
||||||
|
|
||||||
J3DMaterial() { initialize(); }
|
J3DMaterial() { initialize(); }
|
||||||
~J3DMaterial() {}
|
|
||||||
J3DMaterial* getNext() { return mNext; }
|
J3DMaterial* getNext() { return mNext; }
|
||||||
J3DShape* getShape() { return mShape; }
|
J3DShape* getShape() { return mShape; }
|
||||||
J3DTevBlock* getTevBlock() { return mTevBlock; }
|
J3DTevBlock* getTevBlock() { return mTevBlock; }
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#ifndef J3DSTRUCT_H
|
#ifndef J3DSTRUCT_H
|
||||||
#define J3DSTRUCT_H
|
#define J3DSTRUCT_H
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
#include <gx.h>
|
#include <gx.h>
|
||||||
#include <mtx.h>
|
#include <mtx.h>
|
||||||
#include <mtx.h>
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "JSystem/JMath/JMath.h"
|
#include "JSystem/JMath/JMath.h"
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ public:
|
|||||||
bool isActive() const { return mSeqList.getNumLinks() != 0; }
|
bool isActive() const { return mSeqList.getNumLinks() != 0; }
|
||||||
int getNumActiveSeqs() const { return mSeqList.getNumLinks(); }
|
int getNumActiveSeqs() const { return mSeqList.getNumLinks(); }
|
||||||
void pause(bool paused) { mActivity.field_0x0.flags.flag2 = paused; }
|
void pause(bool paused) { mActivity.field_0x0.flags.flag2 = paused; }
|
||||||
|
#if TARGET_PC
|
||||||
|
JSUList<JAISeq>* getSeqList() { return &mSeqList; }
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x08 */ JAIAudience* mAudience;
|
/* 0x08 */ JAIAudience* mAudience;
|
||||||
|
|||||||
@@ -207,4 +207,11 @@ void JPARegistAlphaEnv(JPAEmitterWorkData*, JPABaseParticle*);
|
|||||||
void JPARegistPrmAlpha(JPAEmitterWorkData*, JPABaseParticle*);
|
void JPARegistPrmAlpha(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
void JPARegistPrmAlphaEnv(JPAEmitterWorkData*, JPABaseParticle*);
|
void JPARegistPrmAlphaEnv(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void JPAInterpBillboard(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
|
void JPAInterpRotBillboard(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
|
void JPAInterpDirection(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
|
void JPAInterpRotDirection(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* JPABASESHAPE_H */
|
#endif /* JPABASESHAPE_H */
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ public:
|
|||||||
void init_c(JPAEmitterWorkData*, JPABaseParticle*);
|
void init_c(JPAEmitterWorkData*, JPABaseParticle*);
|
||||||
bool calc_p(JPAEmitterWorkData*);
|
bool calc_p(JPAEmitterWorkData*);
|
||||||
bool calc_c(JPAEmitterWorkData*);
|
bool calc_c(JPAEmitterWorkData*);
|
||||||
|
#if TARGET_PC
|
||||||
|
void interp(JPAEmitterWorkData*, void const* drawFunc);
|
||||||
|
#endif
|
||||||
bool canCreateChild(JPAEmitterWorkData*);
|
bool canCreateChild(JPAEmitterWorkData*);
|
||||||
f32 getWidth(JPABaseEmitter const*) const;
|
f32 getWidth(JPABaseEmitter const*) const;
|
||||||
f32 getHeight(JPABaseEmitter const*) const;
|
f32 getHeight(JPABaseEmitter const*) const;
|
||||||
|
|||||||
@@ -11,8 +11,10 @@
|
|||||||
class JUTFader {
|
class JUTFader {
|
||||||
public:
|
public:
|
||||||
enum EStatus {
|
enum EStatus {
|
||||||
UNKSTATUS_M1 = -1,
|
None,
|
||||||
UNKSTATUS_0 = 0,
|
Wait,
|
||||||
|
FadeIn,
|
||||||
|
FadeOut,
|
||||||
};
|
};
|
||||||
|
|
||||||
JUTFader(int, int, int, int, JUtility::TColor);
|
JUTFader(int, int, int, int, JUtility::TColor);
|
||||||
@@ -29,12 +31,12 @@ public:
|
|||||||
void setColor(JUtility::TColor color) { mColor.set(color); }
|
void setColor(JUtility::TColor color) { mColor.set(color); }
|
||||||
|
|
||||||
/* 0x04 */ s32 mStatus;
|
/* 0x04 */ s32 mStatus;
|
||||||
/* 0x08 */ u16 field_0x8;
|
/* 0x08 */ u16 mDuration;
|
||||||
/* 0x0A */ u16 field_0xa;
|
/* 0x0A */ u16 mTimer;
|
||||||
/* 0x0C */ JUtility::TColor mColor;
|
/* 0x0C */ JUtility::TColor mColor;
|
||||||
/* 0x10 */ JGeometry::TBox2<f32> mBox;
|
/* 0x10 */ JGeometry::TBox2<f32> mBox;
|
||||||
/* 0x20 */ int mEStatus;
|
/* 0x20 */ int mStatusTimer;
|
||||||
/* 0x24 */ u32 field_0x24;
|
/* 0x24 */ u32 mNextStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* JUTFADER_H */
|
#endif /* JUTFADER_H */
|
||||||
|
|||||||
@@ -263,6 +263,9 @@ public:
|
|||||||
/* 0x9C */ u8 field_0x9c[4];
|
/* 0x9C */ u8 field_0x9c[4];
|
||||||
/* 0xA0 */ OSTime mResetHoldStartTime;
|
/* 0xA0 */ OSTime mResetHoldStartTime;
|
||||||
/* 0xA8 */ u8 field_0xa8;
|
/* 0xA8 */ u8 field_0xa8;
|
||||||
|
#if TARGET_PC
|
||||||
|
u32 mResetHoldFrameCount;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ public:
|
|||||||
JUTTransparency getTransparency() const { return JUTTransparency(mTransparency); }
|
JUTTransparency getTransparency() const { return JUTTransparency(mTransparency); }
|
||||||
u16 getNumColors() const { return mNumColors; }
|
u16 getNumColors() const { return mNumColors; }
|
||||||
ResTLUT* getColorTable() const { return mColorTable; }
|
ResTLUT* getColorTable() const { return mColorTable; }
|
||||||
|
#if TARGET_PC
|
||||||
|
void dataUploaded();
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* 0x00 */ GXTlutObj mTlutObj;
|
/* 0x00 */ GXTlutObj mTlutObj;
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ public:
|
|||||||
s32 getTransparency() const { return mTexInfo->alphaEnabled; }
|
s32 getTransparency() const { return mTexInfo->alphaEnabled; }
|
||||||
s32 getWidth() const { return mTexInfo->width; }
|
s32 getWidth() const { return mTexInfo->width; }
|
||||||
s32 getHeight() const { return mTexInfo->height; }
|
s32 getHeight() const { return mTexInfo->height; }
|
||||||
|
JUTPalette* getPalette() const { return mPalette; }
|
||||||
void setCaptureFlag(bool flag) { mFlags &= 2 | flag; }
|
void setCaptureFlag(bool flag) { mFlags &= 2 | flag; }
|
||||||
bool getCaptureFlag() const { return mFlags & 1; }
|
bool getCaptureFlag() const { return mFlags & 1; }
|
||||||
bool getEmbPaletteDelFlag() const { return mFlags & 2; }
|
bool getEmbPaletteDelFlag() const { return mFlags & 2; }
|
||||||
@@ -82,7 +83,7 @@ public:
|
|||||||
int getTlutName() const { return mTlutName; }
|
int getTlutName() const { return mTlutName; }
|
||||||
bool operator==(const JUTTexture& other) {
|
bool operator==(const JUTTexture& other) {
|
||||||
return mTexInfo == other.mTexInfo
|
return mTexInfo == other.mTexInfo
|
||||||
&& field_0x2c == other.field_0x2c
|
&& mPalette == other.mPalette
|
||||||
&& mWrapS == other.mWrapS
|
&& mWrapS == other.mWrapS
|
||||||
&& mWrapT == other.mWrapT
|
&& mWrapT == other.mWrapT
|
||||||
&& mMinFilter == other.mMinFilter
|
&& mMinFilter == other.mMinFilter
|
||||||
@@ -100,7 +101,7 @@ private:
|
|||||||
/* 0x20 */ const ResTIMG* mTexInfo;
|
/* 0x20 */ const ResTIMG* mTexInfo;
|
||||||
/* 0x24 */ void* mTexData;
|
/* 0x24 */ void* mTexData;
|
||||||
/* 0x28 */ JUTPalette* mEmbPalette;
|
/* 0x28 */ JUTPalette* mEmbPalette;
|
||||||
/* 0x2C */ JUTPalette* field_0x2c;
|
/* 0x2C */ JUTPalette* mPalette;
|
||||||
/* 0x30 */ u8 mWrapS;
|
/* 0x30 */ u8 mWrapS;
|
||||||
/* 0x31 */ u8 mWrapT;
|
/* 0x31 */ u8 mWrapT;
|
||||||
/* 0x32 */ u8 mMinFilter;
|
/* 0x32 */ u8 mMinFilter;
|
||||||
|
|||||||
@@ -97,6 +97,16 @@ s32 J3DModel::entryModelData(J3DModelData* pModelData, u32 mdlFlags, u32 mtxNum)
|
|||||||
return kJ3DError_Success;
|
return kJ3DError_Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
void J3DModel::interp_callback(bool isSimFrame, void* pUserWork) {
|
||||||
|
J3DModel* i_this = static_cast<J3DModel*>(pUserWork);
|
||||||
|
if (!isSimFrame) {
|
||||||
|
i_this->calcMaterial();
|
||||||
|
i_this->diff();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
s32 J3DModel::createShapePacket(J3DModelData* pModelData) {
|
s32 J3DModel::createShapePacket(J3DModelData* pModelData) {
|
||||||
J3D_ASSERTMSG(173, pModelData != NULL, "Error : null pointer.");
|
J3D_ASSERTMSG(173, pModelData != NULL, "Error : null pointer.");
|
||||||
|
|
||||||
@@ -452,11 +462,11 @@ void J3DModel::calc() {
|
|||||||
|
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
for (u16 i = 0; i < mModelData->getJointNum(); ++i) {
|
for (u16 i = 0; i < mModelData->getJointNum(); ++i) {
|
||||||
dusk::frame_interp::record_final_mtx_raw(reinterpret_cast<const Mtx*>(getAnmMtx(i)), getAnmMtx(i));
|
dusk::frame_interp::record_final_mtx(getAnmMtx(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (u16 i = 0; i < mModelData->getWEvlpMtxNum(); ++i) {
|
for (u16 i = 0; i < mModelData->getWEvlpMtxNum(); ++i) {
|
||||||
dusk::frame_interp::record_final_mtx_raw(reinterpret_cast<const Mtx*>(getWeightAnmMtx(i)), getWeightAnmMtx(i));
|
dusk::frame_interp::record_final_mtx(getWeightAnmMtx(i));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -485,6 +495,11 @@ void J3DModel::entry() {
|
|||||||
joint->entryIn();
|
joint->entryIn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
if (mModelData->needsInterpCallBack())
|
||||||
|
dusk::frame_interp::add_interpolation_callback(&J3DModel::interp_callback, this);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void J3DModel::viewCalc() {
|
void J3DModel::viewCalc() {
|
||||||
@@ -496,7 +511,7 @@ void J3DModel::viewCalc() {
|
|||||||
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
|
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
|
||||||
(MtxP)&mInternalView);
|
(MtxP)&mInternalView);
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
dusk::frame_interp::record_final_mtx_raw(&mInternalView, mInternalView);
|
dusk::frame_interp::record_final_mtx(mInternalView);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} else if (isCpuSkinningOn()) {
|
} else if (isCpuSkinningOn()) {
|
||||||
@@ -504,7 +519,7 @@ void J3DModel::viewCalc() {
|
|||||||
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
|
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
|
||||||
(MtxP)&mInternalView);
|
(MtxP)&mInternalView);
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
dusk::frame_interp::record_final_mtx_raw(&mInternalView, mInternalView);
|
dusk::frame_interp::record_final_mtx(mInternalView);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} else if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
|
} else if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
|
||||||
@@ -528,7 +543,7 @@ void J3DModel::viewCalc() {
|
|||||||
|
|
||||||
#ifdef TARGET_PC
|
#ifdef TARGET_PC
|
||||||
for (u16 i = 0; i < mModelData->getDrawMtxNum(); ++i) {
|
for (u16 i = 0; i < mModelData->getDrawMtxNum(); ++i) {
|
||||||
dusk::frame_interp::record_final_mtx_raw(&getDrawMtxPtr()[i], getDrawMtxPtr()[i]);
|
dusk::frame_interp::record_final_mtx(getDrawMtxPtr()[i]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,15 @@ void J3DModelData::simpleCalcMaterial(u16 idx, Mtx param_1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
bool J3DModelData::needsInterpCallBack() const {
|
||||||
|
for (u16 i = 0, n = getMaterialNum(); i < n; i++)
|
||||||
|
if (getMaterialNodePointer(i)->needsInterpCallBack())
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void J3DModelData::syncJ3DSysPointers() const {
|
void J3DModelData::syncJ3DSysPointers() const {
|
||||||
j3dSys.setTexture(getTexture());
|
j3dSys.setTexture(getTexture());
|
||||||
j3dSys.setVtxPos(getVtxPosArray(), getVtxNum());
|
j3dSys.setVtxPos(getVtxPosArray(), getVtxNum());
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ void J3DMaterial::diff(u32 diffFlags) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void J3DMaterial::calc(f32 const (*param_0)[4]) {
|
void J3DMaterial::calc(f32 const (*param_0)[4]) {
|
||||||
if (j3dSys.checkFlag(0x40000000)) {
|
if (j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
|
||||||
mTexGenBlock->calcPostTexMtx(param_0);
|
mTexGenBlock->calcPostTexMtx(param_0);
|
||||||
} else {
|
} else {
|
||||||
mTexGenBlock->calc(param_0);
|
mTexGenBlock->calc(param_0);
|
||||||
@@ -276,7 +276,7 @@ void J3DMaterial::calc(f32 const (*param_0)[4]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
|
void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
|
||||||
if (j3dSys.checkFlag(0x40000000)) {
|
if (j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
|
||||||
mTexGenBlock->calcPostTexMtxWithoutViewMtx(param_0);
|
mTexGenBlock->calcPostTexMtxWithoutViewMtx(param_0);
|
||||||
} else {
|
} else {
|
||||||
mTexGenBlock->calcWithoutViewMtx(param_0);
|
mTexGenBlock->calcWithoutViewMtx(param_0);
|
||||||
@@ -288,7 +288,7 @@ void J3DMaterial::setCurrentMtx() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void J3DMaterial::calcCurrentMtx() {
|
void J3DMaterial::calcCurrentMtx() {
|
||||||
if (!j3dSys.checkFlag(0x40000000)) {
|
if (!j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
|
||||||
mCurrentMtx.setCurrentTexMtx(
|
mCurrentMtx.setCurrentTexMtx(
|
||||||
getTexCoord(0)->getTexGenMtx(),
|
getTexCoord(0)->getTexGenMtx(),
|
||||||
getTexCoord(1)->getTexGenMtx(),
|
getTexCoord(1)->getTexGenMtx(),
|
||||||
@@ -371,6 +371,30 @@ s32 J3DMaterial::newSingleSharedDisplayList(u32 dlSize) {
|
|||||||
return kJ3DError_Success;
|
return kJ3DError_Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_PC
|
||||||
|
bool J3DMaterial::needsInterpCallBack() const {
|
||||||
|
for (int i = 0, n = getTexGenNum(); i < n; i++) {
|
||||||
|
J3DTexMtx* pTexMtx = mTexGenBlock->getTexMtx(i);
|
||||||
|
if (pTexMtx != NULL) {
|
||||||
|
u32 texMtxMode = pTexMtx->getTexMtxInfo().mInfo & 0x3f;
|
||||||
|
|
||||||
|
// uses j3dSys.getViewMtx()
|
||||||
|
switch (texMtxMode) {
|
||||||
|
case J3DTexMtxMode_EnvmapBasic:
|
||||||
|
case J3DTexMtxMode_EnvmapOld:
|
||||||
|
case J3DTexMtxMode_Envmap:
|
||||||
|
case J3DTexMtxMode_ProjmapBasic:
|
||||||
|
case J3DTexMtxMode_Projmap:
|
||||||
|
case J3DTexMtxMode_ViewProjmap:
|
||||||
|
case J3DTexMtxMode_ViewProjmapBasic:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void J3DPatchedMaterial::initialize() {
|
void J3DPatchedMaterial::initialize() {
|
||||||
J3DMaterial::initialize();
|
J3DMaterial::initialize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ void loadTexCoordGens(u32 texGenNum, J3DTexCoord* texCoords) {
|
|||||||
var_r28 = 61;
|
var_r28 = 61;
|
||||||
J3DGDWriteXFCmdHdr(GX_XF_REG_DUALTEX0, texGenNum);
|
J3DGDWriteXFCmdHdr(GX_XF_REG_DUALTEX0, texGenNum);
|
||||||
|
|
||||||
if (j3dSys.checkFlag(0x40000000)) {
|
if (j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
|
||||||
for (int i = 0; i < texGenNum; i++) {
|
for (int i = 0; i < texGenNum; i++) {
|
||||||
if (texCoords[i].getTexGenMtx() != 60) {
|
if (texCoords[i].getTexGenMtx() != GX_IDENTITY) {
|
||||||
var_r28 = i * 3;
|
var_r28 = i * 3;
|
||||||
} else {
|
} else {
|
||||||
var_r28 = 61;
|
var_r28 = 61;
|
||||||
|
|||||||
@@ -556,8 +556,8 @@ void J3DModelLoader::readVertexData(const J3DVertexBlock& block, J3DVertexData&
|
|||||||
|
|
||||||
if (attr == GX_VA_POS) {
|
if (attr == GX_VA_POS) {
|
||||||
// can be a little off due to 0x20 alignment, account for that
|
// can be a little off due to 0x20 alignment, account for that
|
||||||
u32 expect = ((data.mVtxNum * vertStride) + 0x1F) & ~0x1F;
|
// u32 expect = ((data.mVtxNum * vertStride) + 0x1F) & ~0x1F;
|
||||||
JUT_ASSERT(1234, expect == addrDiff);
|
// JUT_ASSERT(1234, expect == addrDiff);
|
||||||
} else if (attr == GX_VA_NRM) {
|
} else if (attr == GX_VA_NRM) {
|
||||||
data.mNrmNum = num;
|
data.mNrmNum = num;
|
||||||
} else if (attr == GX_VA_CLR0) {
|
} else if (attr == GX_VA_CLR0) {
|
||||||
|
|||||||
@@ -120,11 +120,19 @@ void JAISeqMgr::mixOut() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JAISeq* JAISeqMgr::beginStartSeq_() {
|
JAISeq* JAISeqMgr::beginStartSeq_() {
|
||||||
JAISeq* seq = JKR_NEW JAISeq(this, field_0x10);
|
#ifdef TARGET_PC
|
||||||
|
if (JAISeq::getFreeMemCount() == 0) {
|
||||||
|
JUT_WARN(273, "%s", "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return JKR_NEW JAISeq(this, field_0x10);
|
||||||
|
#else
|
||||||
|
JAISeq* seq = new JAISeq(this, field_0x10);
|
||||||
if (seq == NULL) {
|
if (seq == NULL) {
|
||||||
JUT_WARN(273, "%s", "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
|
JUT_WARN(273, "%s", "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
|
||||||
}
|
}
|
||||||
return seq;
|
return seq;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JAISeqMgr::endStartSeq_(JAISeq* seq, JAISoundHandle* handle) {
|
bool JAISeqMgr::endStartSeq_(JAISeq* seq, JAISoundHandle* handle) {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#include "JSystem/JSystem.h" // IWYU pragma: keep
|
#include "JSystem/JSystem.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#include "JSystem/JAudio2/JASChannel.h"
|
#include "JSystem/JAudio2/JASChannel.h"
|
||||||
|
#if TARGET_PC
|
||||||
|
#include "dusk/audio/DuskDsp.hpp"
|
||||||
|
#endif
|
||||||
#include "JSystem/JAudio2/JASAiCtrl.h"
|
#include "JSystem/JAudio2/JASAiCtrl.h"
|
||||||
#include "JSystem/JAudio2/JASCalc.h"
|
#include "JSystem/JAudio2/JASCalc.h"
|
||||||
#include "JSystem/JAudio2/JASDriverIF.h"
|
#include "JSystem/JAudio2/JASDriverIF.h"
|
||||||
@@ -170,7 +173,12 @@ void JASChannel::updateEffectorParam(JASDsp::TChannel* i_channel, u16* i_mixerVo
|
|||||||
|
|
||||||
f32 pan = 0.5f;
|
f32 pan = 0.5f;
|
||||||
f32 dolby = 0.0f;
|
f32 dolby = 0.0f;
|
||||||
switch (JASDriver::getOutputMode()) {
|
#if TARGET_PC
|
||||||
|
u32 effectiveOutputMode = dusk::audio::EnableHrtf ? JAS_OUTPUT_SURROUND : JASDriver::getOutputMode();
|
||||||
|
#else
|
||||||
|
u32 effectiveOutputMode = JASDriver::getOutputMode();
|
||||||
|
#endif
|
||||||
|
switch (effectiveOutputMode) {
|
||||||
case JAS_OUTPUT_MONO:
|
case JAS_OUTPUT_MONO:
|
||||||
break;
|
break;
|
||||||
case JAS_OUTPUT_STEREO:
|
case JAS_OUTPUT_STEREO:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user