Compare commits
2480 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33abd1b4e7 | ||
|
|
a16fcd8d6a | ||
|
|
6a12033942 | ||
|
|
a04a84e00b | ||
|
|
abe6c22f56 | ||
|
|
232a45c9ac | ||
|
|
29383a6a11 | ||
|
|
669c8c8988 | ||
|
|
9bd80324d1 | ||
|
|
4b747e567a | ||
|
|
27ddca26c2 | ||
|
|
b67a087448 | ||
|
|
6df0cb1ddb | ||
|
|
320624edc8 | ||
|
|
8cbdf27228 | ||
|
|
145af411ab | ||
|
|
07a1339704 | ||
|
|
0df6fbb30a | ||
|
|
a1c241af37 | ||
|
|
c5c887cc11 | ||
|
|
453f8c05a4 | ||
|
|
47c23ba917 | ||
|
|
a404689e50 | ||
|
|
c6f9bbce8e | ||
|
|
07778c81bc | ||
|
|
5b0c8fb3e2 | ||
|
|
355c260bf2 | ||
|
|
764762f236 | ||
|
|
eeacbfeb6a | ||
|
|
9a7b469f4e | ||
|
|
2be8fcfa64 | ||
|
|
e865e65955 | ||
|
|
8ef1e29a5c | ||
|
|
2a69f34f93 | ||
|
|
6d1d60f699 | ||
|
|
7a80acf6a1 | ||
|
|
b2daa0e502 | ||
|
|
915888d275 | ||
|
|
a94812b28d | ||
|
|
8de1ffb84d | ||
|
|
b7db2a12d4 | ||
|
|
cc9398df14 | ||
|
|
9187873396 | ||
|
|
d750a1101b | ||
|
|
f87f14b432 | ||
|
|
e1286fcb04 | ||
|
|
800ab92960 | ||
|
|
c8492ab5e0 | ||
|
|
5f7de20cde | ||
|
|
d4a2113a8a | ||
|
|
a5ec7a45db | ||
|
|
abbfb09a64 | ||
|
|
b89dd7f0e3 | ||
|
|
ef0ba763b9 | ||
|
|
381d0b4e3e | ||
|
|
3cbf84f98b | ||
|
|
5cb1c8580d | ||
|
|
09f693b9b9 | ||
|
|
285fee01f2 | ||
|
|
d81890f6a8 | ||
|
|
e500b77cd3 | ||
|
|
d4ce6bcde0 | ||
|
|
3779a39f1f | ||
|
|
e0be6beb18 | ||
|
|
7c80093efa | ||
|
|
fe51abd534 | ||
|
|
80b7d52eeb | ||
|
|
0256790e1c | ||
|
|
6b958b957e | ||
|
|
fe1e1ec8c7 | ||
|
|
8b7f469ae1 | ||
|
|
811729ab41 | ||
|
|
11f2d941f1 | ||
|
|
071dbc3086 | ||
|
|
6ad85725d9 | ||
|
|
239367663b | ||
|
|
9c40489589 | ||
|
|
a401f926d3 | ||
|
|
aed313d81c | ||
|
|
c8623cfe09 | ||
|
|
2d41405e29 | ||
|
|
32fe837dca | ||
|
|
5ceb3aedeb | ||
|
|
843b43001a | ||
|
|
a9798d0645 | ||
|
|
136b25133d | ||
|
|
71e0895dc6 | ||
|
|
51ba90dd52 | ||
|
|
2120d4d3ce | ||
|
|
296e7ed9ad | ||
|
|
a13089cd2e | ||
|
|
dff327df40 | ||
|
|
ba07534d99 | ||
|
|
c707f92d0a | ||
|
|
a9604a88c2 | ||
|
|
dc4ee41b70 | ||
|
|
e2014cfd92 | ||
|
|
2c4a3b5f5e | ||
|
|
7374fbf54c | ||
|
|
e73e965d5b | ||
|
|
4e40c6f2ed | ||
|
|
0c55f331cf | ||
|
|
176cadff05 | ||
|
|
cd0a765f66 | ||
|
|
2633295ada | ||
|
|
dc28d52d08 | ||
|
|
76f2191476 | ||
|
|
d7e764d519 | ||
|
|
d6fbf9fbe7 | ||
|
|
c7e05c74b9 | ||
|
|
9ed94f310a | ||
|
|
77f692c669 | ||
|
|
f4894952fc | ||
|
|
2f92ccecb1 | ||
|
|
8e2ed40f66 | ||
|
|
9ba2f7d43c | ||
|
|
7d1cfe50af | ||
|
|
dec09bde1c | ||
|
|
9deabc7b60 | ||
|
|
495a447c8a | ||
|
|
25075decb2 | ||
|
|
1b178a55d7 | ||
|
|
e30e1ccccd | ||
|
|
6bdfb0d386 | ||
|
|
26e5a7eed1 | ||
|
|
042284de8b | ||
|
|
435b8fe52e | ||
|
|
3441714a13 | ||
|
|
f4e723e690 | ||
|
|
0db14d718c | ||
|
|
fd52285074 | ||
|
|
eadf0496bf | ||
|
|
4a5f7464c1 | ||
|
|
39d2c427e5 | ||
|
|
958e2f36bb | ||
|
|
ba859dc3b5 | ||
|
|
3a95c77c9e | ||
|
|
81c6c5e47a | ||
|
|
4141caa4d6 | ||
|
|
0a2df3ca4c | ||
|
|
92c5cf1877 | ||
|
|
43fbf297c8 | ||
|
|
ec22576e49 | ||
|
|
9a1b826021 | ||
|
|
b99edf9a6b | ||
|
|
cb35f78511 | ||
|
|
68c37d2d88 | ||
|
|
80dc23621e | ||
|
|
b289bb4edb | ||
|
|
2c79080e1b | ||
|
|
75f812cfcd | ||
|
|
463fdab6a4 | ||
|
|
d7a28c4d2b | ||
|
|
0544beb00d | ||
|
|
ab5965cc8d | ||
|
|
e042ba6f24 | ||
|
|
4b7dc08bf5 | ||
|
|
c851d9a6ba | ||
|
|
3869369703 | ||
|
|
2ee32abf84 | ||
|
|
c5af250959 | ||
|
|
42ad9c4378 | ||
|
|
26a9ac91ee | ||
|
|
76a22c0d13 | ||
|
|
f887d515fa | ||
|
|
729ef37040 | ||
|
|
e17504a36a | ||
|
|
4673f509f6 | ||
|
|
7b9d8c5a1f | ||
|
|
8d9508bda4 | ||
|
|
68db861c45 | ||
|
|
873840a6a5 | ||
|
|
478bdcc1ca | ||
|
|
74f00c3c63 | ||
|
|
668311a444 | ||
|
|
88b4c7b50b | ||
|
|
9cc1201892 | ||
|
|
e6b1a0691b | ||
|
|
0c4ab5b609 | ||
|
|
2672504e8a | ||
|
|
a7e86e0510 | ||
|
|
827f0ffbb6 | ||
|
|
883e8390c9 | ||
|
|
c69edce800 | ||
|
|
747705d430 | ||
|
|
e947081622 | ||
|
|
621f941ff7 | ||
|
|
1cfd4f741e | ||
|
|
bec1cbc1cb | ||
|
|
80d00fe31a | ||
|
|
6fbb7da82d | ||
|
|
5a22896197 | ||
|
|
8bcbee4ea7 | ||
|
|
5999ddc76d | ||
|
|
0338d4c393 | ||
|
|
4a047f56bc | ||
|
|
ae1deb2209 | ||
|
|
418bf3ab69 | ||
|
|
192190769d | ||
|
|
1479093d33 | ||
|
|
70080f1fdb | ||
|
|
e80cbf8bb2 | ||
|
|
a481b900b9 | ||
|
|
d923cd2f24 | ||
|
|
835fa4e74b | ||
|
|
bf035b8167 | ||
|
|
e8dcc8432d | ||
|
|
3f3e258d77 | ||
|
|
30061396e8 | ||
|
|
b77d93ba4a | ||
|
|
7bacf3b6f4 | ||
|
|
cce97588fe | ||
|
|
04126cd18a | ||
|
|
2aa37813d2 | ||
|
|
92679555b9 | ||
|
|
8960ffaf0b | ||
|
|
7adc85995f | ||
|
|
61176acbad | ||
|
|
98003d0d41 | ||
|
|
49ee711c75 | ||
|
|
029e315f0a | ||
|
|
16f892b667 | ||
|
|
f82c3c8ea7 | ||
|
|
9dbaa7a77f | ||
|
|
fbb42085bd | ||
|
|
7aa8d7c073 | ||
|
|
c4f5cbce5e | ||
|
|
c26a57fb9f | ||
|
|
ad2ccdb44a | ||
|
|
782d38c6b7 | ||
|
|
ec7d702185 | ||
|
|
6dc8c5bd92 | ||
|
|
0461a36a4e | ||
|
|
9e374491c5 | ||
|
|
c0488b3190 | ||
|
|
1180f32d9c | ||
|
|
371f1be9b3 | ||
|
|
250727c9ca | ||
|
|
f7a2c265b3 | ||
|
|
123f2fda9b | ||
|
|
1aac4d802f | ||
|
|
ed9c911a0e | ||
|
|
a510a03b8a | ||
|
|
c234cb4663 | ||
|
|
c7d3b88cb7 | ||
|
|
bf4b39781b | ||
|
|
d83b8cf940 | ||
|
|
5032d24ad8 | ||
|
|
601f63f4fb | ||
|
|
1619d2395e | ||
|
|
b69222e017 | ||
|
|
d86637daea | ||
|
|
dc729009ac | ||
|
|
bf757fc960 | ||
|
|
aec797671e | ||
|
|
cc13e31264 | ||
|
|
5e34b1efcf | ||
|
|
953e4fc4ff | ||
|
|
bbbe9b2632 | ||
|
|
a1444b992f | ||
|
|
76558e9313 | ||
|
|
7a034142c9 | ||
|
|
c937bdbfea | ||
|
|
cb7f18f268 | ||
|
|
0a23afebb7 | ||
|
|
ec5a07b049 | ||
|
|
c8cb1ed013 | ||
|
|
026a2b3f1f | ||
|
|
780cd225e9 | ||
|
|
3377709c4b | ||
|
|
17fca82401 | ||
|
|
02c4ada807 | ||
|
|
81aece7117 | ||
|
|
fb5a207abc | ||
|
|
7f544f9049 | ||
|
|
6665b16ba2 | ||
|
|
523b23339c | ||
|
|
c982700a69 | ||
|
|
6f0f9d7d69 | ||
|
|
b69cee3801 | ||
|
|
6c097398d1 | ||
|
|
91d958bf27 | ||
|
|
bef07b6353 | ||
|
|
2f7ae611ed | ||
|
|
55d30a11ec | ||
|
|
3f5fdc39a5 | ||
|
|
6f52ad190e | ||
|
|
02e84b4b97 | ||
|
|
dc29e7c044 | ||
|
|
776d46aacb | ||
|
|
f686065769 | ||
|
|
58de524d70 | ||
|
|
8a114514d9 | ||
|
|
9f0a96ac89 | ||
|
|
6f103a3b82 | ||
|
|
61c2398b67 | ||
|
|
6a2ce20313 | ||
|
|
41f3d4d9d7 | ||
|
|
71d1b46417 | ||
|
|
df8ef2d58d | ||
|
|
4981fe3091 | ||
|
|
ddf2b09e55 | ||
|
|
026cd10f3f | ||
|
|
ffe199290b | ||
|
|
0b269571d7 | ||
|
|
d781db6c0f | ||
|
|
7a1ff3b2ad | ||
|
|
72f6780905 | ||
|
|
79c010f082 | ||
|
|
e6544a6983 | ||
|
|
37a43ebf45 | ||
|
|
c5e896c420 | ||
|
|
0b27a3dc23 | ||
|
|
74fd58513b | ||
|
|
2029ac3d62 | ||
|
|
62425b5866 | ||
|
|
10d7b303a5 | ||
|
|
70876d3cde | ||
|
|
3750124dcc | ||
|
|
1d51734d0b | ||
|
|
5d5e0f62e8 | ||
|
|
3ed4cdf109 | ||
|
|
a92dcaa0b1 | ||
|
|
1c0878f65b | ||
|
|
43631ba203 | ||
|
|
f9f854c4a8 | ||
|
|
4eea98c66b | ||
|
|
10cc444482 | ||
|
|
987e09515b | ||
|
|
9ea3549743 | ||
|
|
ae4bfef590 | ||
|
|
8e6e46a919 | ||
|
|
65219365db | ||
|
|
3988fec6e7 | ||
|
|
2d38eb923d | ||
|
|
dd790b00e5 | ||
|
|
cb72fee941 | ||
|
|
138abb91f6 | ||
|
|
a73a2c9179 | ||
|
|
b1c9340fd3 | ||
|
|
abe57fefa0 | ||
|
|
d31a7e24a8 | ||
|
|
cac1c5bd42 | ||
|
|
9f0daee186 | ||
|
|
de4699a97e | ||
|
|
fdbd414299 | ||
|
|
d17d437de3 | ||
|
|
1c5a864598 | ||
|
|
eaebaa6db3 | ||
|
|
f8297df9c5 | ||
|
|
3e9c983f5c | ||
|
|
73e112a217 | ||
|
|
879761af2c | ||
|
|
c7243aa2e9 | ||
|
|
3587cb029e | ||
|
|
883d8172b0 | ||
|
|
05a29c7e6c | ||
|
|
ab38b0089e | ||
|
|
9c8ef3cca0 | ||
|
|
107c4df69c | ||
|
|
636f67ca3f | ||
|
|
d4ba7c387b | ||
|
|
831737ecc8 | ||
|
|
9ab4f1a2d9 | ||
|
|
d8f5e86ede | ||
|
|
85d60b36da | ||
|
|
225530ef04 | ||
|
|
ebd980bf14 | ||
|
|
c869602b6d | ||
|
|
9382e86d38 | ||
|
|
0b057f34c9 | ||
|
|
8a5afd0db2 | ||
|
|
4e3fc35401 | ||
|
|
940d6bf6d3 | ||
|
|
5341840943 | ||
|
|
a3ae267e83 | ||
|
|
f46461331c | ||
|
|
4660491243 | ||
|
|
7e7a2b74cd | ||
|
|
e671fe682d | ||
|
|
e5aa150557 | ||
|
|
14c71f39ff | ||
|
|
1254c1202a | ||
|
|
74867af2e7 | ||
|
|
3ebc475494 | ||
|
|
27df328ec2 | ||
|
|
4351198bf5 | ||
|
|
7c3457257b | ||
|
|
ba23408007 | ||
|
|
eaaba8646b | ||
|
|
0910188058 | ||
|
|
3cc9eb1c1c | ||
|
|
db1c7de125 | ||
|
|
7a351f18ba | ||
|
|
776e8ff2ee | ||
|
|
3aac4ea62a | ||
|
|
1558788df1 | ||
|
|
29d47da61e | ||
|
|
e014bb5359 | ||
|
|
fb03ee45b5 | ||
|
|
60bb16d26c | ||
|
|
b5bc3a9000 | ||
|
|
f34365dfc0 | ||
|
|
1fa0116f5f | ||
|
|
c7821635fd | ||
|
|
0c3ee871f4 | ||
|
|
714cd47db9 | ||
|
|
008f8a1e19 | ||
|
|
499b16678f | ||
|
|
0682cdedbd | ||
|
|
1471c82a20 | ||
|
|
b8cf8c53e7 | ||
|
|
5156626582 | ||
|
|
fe65f20a30 | ||
|
|
4b8b0a6d74 | ||
|
|
0f0cb40151 | ||
|
|
2b8ae07ec6 | ||
|
|
1b5dbc4b41 | ||
|
|
6426963807 | ||
|
|
23755fdfb4 | ||
|
|
793e1223de | ||
|
|
fad64667a7 | ||
|
|
6e4a2947ea | ||
|
|
f2c8522daa | ||
|
|
93e9929925 | ||
|
|
be019c6126 | ||
|
|
02655313e9 | ||
|
|
59ed4d0029 | ||
|
|
42e655b4cc | ||
|
|
5bcdb933a7 | ||
|
|
bd94c16e78 | ||
|
|
618d689dff | ||
|
|
19dd95a1cb | ||
|
|
3596897961 | ||
|
|
288c3dfc8f | ||
|
|
0c41734c20 | ||
|
|
bd70540b53 | ||
|
|
3a7cb9c5ce | ||
|
|
247974afd3 | ||
|
|
8a728faeb6 | ||
|
|
fdb6428c6b | ||
|
|
2fc431d1bb | ||
|
|
4e79d53661 | ||
|
|
fc1bfcbc21 | ||
|
|
8f54093de1 | ||
|
|
4da733145e | ||
|
|
3dda658e42 | ||
|
|
1817727a66 | ||
|
|
519218572a | ||
|
|
f6f8a24335 | ||
|
|
62b8f0f553 | ||
|
|
ceb22d71dd | ||
|
|
97008905b6 | ||
|
|
6122f6980b | ||
|
|
7c42ed6edb | ||
|
|
ce604c77ba | ||
|
|
82245789ed | ||
|
|
d2b5a422e4 | ||
|
|
a311f643f9 | ||
|
|
c5303c2ea4 | ||
|
|
49b3bf5f2e | ||
|
|
478f6e07d4 | ||
|
|
f6910d35f7 | ||
|
|
b01d6be3f4 | ||
|
|
d506f8588c | ||
|
|
1d336d851d | ||
|
|
71cf666bbd | ||
|
|
040c6f9027 | ||
|
|
14dcd8f04c | ||
|
|
b88cf7b939 | ||
|
|
111ccf5d34 | ||
|
|
60bc816af5 | ||
|
|
3d5f0ef318 | ||
|
|
c274c05ce3 | ||
|
|
dfa0c8bf19 | ||
|
|
82322293fe | ||
|
|
4eea06e620 | ||
|
|
781617d484 | ||
|
|
946be081b0 | ||
|
|
11bc8ea602 | ||
|
|
3457ff48ce | ||
|
|
146ad3b4a1 | ||
|
|
996772faf2 | ||
|
|
8dabde94bf | ||
|
|
bb8b823c30 | ||
|
|
9bdc4aace2 | ||
|
|
cba1f85026 | ||
|
|
a2afe54f5a | ||
|
|
037c332158 | ||
|
|
73612215d8 | ||
|
|
59bf3a1cc4 | ||
|
|
5ce7a0bde4 | ||
|
|
33a648e5f5 | ||
|
|
f670658407 | ||
|
|
3feca1c530 | ||
|
|
8dca3182a6 | ||
|
|
ac88a00f06 | ||
|
|
a73a3380d7 | ||
|
|
691c8e7702 | ||
|
|
0b6fad7619 | ||
|
|
75d8dd2bf2 | ||
|
|
f603f4397d | ||
|
|
0810abd294 | ||
|
|
ed38118008 | ||
|
|
2b6628aa65 | ||
|
|
d37dc246eb | ||
|
|
396326014d | ||
|
|
184f12a214 | ||
|
|
0f46c8904d | ||
|
|
88c11e92d3 | ||
|
|
21278356ec | ||
|
|
e38467ef3a | ||
|
|
1bfd7c0345 | ||
|
|
ee287f6120 | ||
|
|
48227bd350 | ||
|
|
4368841f02 | ||
|
|
b451be6c7f | ||
|
|
7c382c85b8 | ||
|
|
78f4e8fdca | ||
|
|
63e5afda0b | ||
|
|
08f0f275af | ||
|
|
adf688635a | ||
|
|
a58d76d27d | ||
|
|
a76c962aa3 | ||
|
|
5ce5000b14 | ||
|
|
6fcea142a2 | ||
|
|
e604be65d9 | ||
|
|
0681fe3eca | ||
|
|
3d90a146d8 | ||
|
|
6ba0d2e6bd | ||
|
|
70b919137d | ||
|
|
826be7472f | ||
|
|
d6fbfab7b6 | ||
|
|
d0afa692f5 | ||
|
|
9f6f9a7af3 | ||
|
|
49d9aa8188 | ||
|
|
f5fdb91a43 | ||
|
|
83fdad7e0d | ||
|
|
44511e28a8 | ||
|
|
e5d5160492 | ||
|
|
ae8b2198e2 | ||
|
|
ddcc19d7cf | ||
|
|
333530e260 | ||
|
|
65f9917b65 | ||
|
|
3db0e827e5 | ||
|
|
9df19cbac3 | ||
|
|
0916971584 | ||
|
|
035f0010d8 | ||
|
|
0ec16a5b0e | ||
|
|
80e4b3db55 | ||
|
|
0c60ceeb33 | ||
|
|
2c784d979a | ||
|
|
e98164ec41 | ||
|
|
b1698948e6 | ||
|
|
df336f5ba2 | ||
|
|
aadc39eccd | ||
|
|
c5042dcdf6 | ||
|
|
9e22eaf798 | ||
|
|
c3ced5825d | ||
|
|
c5db1e697b | ||
|
|
879838c9f2 | ||
|
|
031195f11d | ||
|
|
46e229c069 | ||
|
|
438277408b | ||
|
|
998d88763d | ||
|
|
e4320c02cf | ||
|
|
579ad052ed | ||
|
|
7c74c01741 | ||
|
|
9d8e32d9b2 | ||
|
|
28f9160bca | ||
|
|
4f27a28762 | ||
|
|
9f3f0ee2d2 | ||
|
|
7c485560c5 | ||
|
|
3b0c958600 | ||
|
|
84ede57205 | ||
|
|
a2c2a364a4 | ||
|
|
8fb3a3ff23 | ||
|
|
6d56fb41c6 | ||
|
|
775db94a96 | ||
|
|
3c7a7bc8a7 | ||
|
|
5072c8b6f0 | ||
|
|
ca85e44c9e | ||
|
|
5f3e68ec45 | ||
|
|
d6068c421d | ||
|
|
bf8687590e | ||
|
|
b6af7393e8 | ||
|
|
12330e38cb | ||
|
|
c06b971b65 | ||
|
|
26bbbe0037 | ||
|
|
031df36935 | ||
|
|
94eed33940 | ||
|
|
b464bb7fd4 | ||
|
|
6db96753d2 | ||
|
|
9b9ffc4b13 | ||
|
|
2cad49940e | ||
|
|
675aef29cf | ||
|
|
425f360363 | ||
|
|
cc435ea711 | ||
|
|
410eb19ce6 | ||
|
|
b864103976 | ||
|
|
102d105e0a | ||
|
|
86513cb2c9 | ||
|
|
9125e604b9 | ||
|
|
09de511c37 | ||
|
|
a78212ea80 | ||
|
|
8553120fdb | ||
|
|
42342745f3 | ||
|
|
958c828a2c | ||
|
|
1525b105e2 | ||
|
|
bba01a42e1 | ||
|
|
ca48ebcb6e | ||
|
|
3584dac5c0 | ||
|
|
f6c8225dac | ||
|
|
ca65c76419 | ||
|
|
4f7793a423 | ||
|
|
2e7726c574 | ||
|
|
edc3c48e05 | ||
|
|
1ffa9bb30f | ||
|
|
2ea365e5da | ||
|
|
713562685a | ||
|
|
ef28d12d85 | ||
|
|
1b293a3cfb | ||
|
|
4281730b16 | ||
|
|
1eb77c4d6d | ||
|
|
902e539c0d | ||
|
|
3f60034c39 | ||
|
|
3e0dbf42d4 | ||
|
|
2343e69ce5 | ||
|
|
251b2aaeb8 | ||
|
|
48926fcade | ||
|
|
bb47f3a8e4 | ||
|
|
264d7d98d7 | ||
|
|
2e37001881 | ||
|
|
e5190481e4 | ||
|
|
2420325c02 | ||
|
|
3677749935 | ||
|
|
75a20216d9 | ||
|
|
07a5cc6544 | ||
|
|
5dfe396af3 | ||
|
|
c193ade58b | ||
|
|
01d4312251 | ||
|
|
2c29ab5542 | ||
|
|
8b08098d4e | ||
|
|
c3c2a4269d | ||
|
|
a0c5d75f83 | ||
|
|
dbf5c06144 | ||
|
|
d69b73eaa8 | ||
|
|
990637bf52 | ||
|
|
f5f153dbfd | ||
|
|
c4328afce7 | ||
|
|
7db28f9f7f | ||
|
|
934aa92a9b | ||
|
|
982b024c5c | ||
|
|
595a000f6a | ||
|
|
8482180706 | ||
|
|
2fc6b542bc | ||
|
|
810bad9fd8 | ||
|
|
4270180b8b | ||
|
|
2d5f087041 | ||
|
|
7056f9954f | ||
|
|
9e3c192376 | ||
|
|
e1e4be9017 | ||
|
|
0d7e0d351a | ||
|
|
9fc0ec0bf4 | ||
|
|
8150f55dbc | ||
|
|
8a7c7efe85 | ||
|
|
3f8e258055 | ||
|
|
fa2eb24ba2 | ||
|
|
433baf5f3c | ||
|
|
be88a42bad | ||
|
|
9c2f067403 | ||
|
|
a216bb56ee | ||
|
|
ab939e059b | ||
|
|
e8a10748a4 | ||
|
|
97cf189d15 | ||
|
|
97351ad2c2 | ||
|
|
e1e13d14a4 | ||
|
|
30c26e5a9c | ||
|
|
70c1f0640d | ||
|
|
9b1db9709b | ||
|
|
edb50b66a0 | ||
|
|
0862c79b21 | ||
|
|
2d2625bf75 | ||
|
|
3948a1f726 | ||
|
|
2fea28f194 | ||
|
|
42d9d6abc8 | ||
|
|
46e63da4d8 | ||
|
|
d7bd0be53e | ||
|
|
3f80e92f2c | ||
|
|
0ae6d1fecf | ||
|
|
d898abf63d | ||
|
|
ba4028b9dd | ||
|
|
fb64bb314c | ||
|
|
bc5f3abd3c | ||
|
|
1934bedde2 | ||
|
|
cea8ad4b85 | ||
|
|
129d7333be | ||
|
|
9647901ba0 | ||
|
|
c21e5f5e79 | ||
|
|
c5ff13abca | ||
|
|
202ccd4c56 | ||
|
|
9d4053419b | ||
|
|
785bd8ebcc | ||
|
|
a4c5b87b90 | ||
|
|
fef87b9219 | ||
|
|
4f591aa87a | ||
|
|
d6544933aa | ||
|
|
a01a9e5943 | ||
|
|
ed4edb93e7 | ||
|
|
8869f4ca4d | ||
|
|
b137dba5db | ||
|
|
ed2b985245 | ||
|
|
d7e38b378e | ||
|
|
453a16c978 | ||
|
|
ce7f166ba3 | ||
|
|
1ab96abb91 | ||
|
|
513d418771 | ||
|
|
0ad1426950 | ||
|
|
c1f0fe1da6 | ||
|
|
071e503856 | ||
|
|
a202e67349 | ||
|
|
29fb996b00 | ||
|
|
b728f8de64 | ||
|
|
e79e8b30e0 | ||
|
|
1bee2caf5c | ||
|
|
9361aeb8eb | ||
|
|
8cbae5d62a | ||
|
|
d68ec362dd | ||
|
|
ca1de3cd17 | ||
|
|
e9d58b5a90 | ||
|
|
ee89c485fc | ||
|
|
c1a7ded1e4 | ||
|
|
8cdc6b5d7c | ||
|
|
c4f0b4fb6d | ||
|
|
4e477a17b2 | ||
|
|
de32fbe75e | ||
|
|
4abebbe3b2 | ||
|
|
4269e613a3 | ||
|
|
2d00d9cbe6 | ||
|
|
d28e9a7b62 | ||
|
|
37d1aa4129 | ||
|
|
77051ddc78 | ||
|
|
a1d6833bac | ||
|
|
13507d422b | ||
|
|
de44a17e64 | ||
|
|
e9689a0a07 | ||
|
|
770456d0c8 | ||
|
|
1b32840424 | ||
|
|
defbb01aaa | ||
|
|
904090cbb6 | ||
|
|
4bde3366c1 | ||
|
|
cfac29b0ef | ||
|
|
45c2488e36 | ||
|
|
73f1340afb | ||
|
|
3326603265 | ||
|
|
b5c4866964 | ||
|
|
f6fb473cf9 | ||
|
|
a22b6168c6 | ||
|
|
2814f2e8cf | ||
|
|
20bcd4bd69 | ||
|
|
552497d71b | ||
|
|
8d0100f100 | ||
|
|
a105003a7a | ||
|
|
e03aaec030 | ||
|
|
0aad73f4a1 | ||
|
|
3565f179af | ||
|
|
b35b0c598d | ||
|
|
6b54d04bfc | ||
|
|
10120eb12f | ||
|
|
f85b5e99ed | ||
|
|
965a3d6eec | ||
|
|
917cf44def | ||
|
|
c884edd923 | ||
|
|
bdb216bf7c | ||
|
|
e019bd91fd | ||
|
|
ea916b6ae5 | ||
|
|
cc6d5374d5 | ||
|
|
ba0b06f268 | ||
|
|
1d3e84b712 | ||
|
|
cea6b20c09 | ||
|
|
feb993e751 | ||
|
|
4acc9b08a2 | ||
|
|
8dab92d158 | ||
|
|
b5deee823c | ||
|
|
7091ab5e75 | ||
|
|
0495d0f232 | ||
|
|
e6d9a0d1ad | ||
|
|
c8236d0dd2 | ||
|
|
6bdf005171 | ||
|
|
ce77e80414 | ||
|
|
de10f0dda6 | ||
|
|
37b9ba5bd7 | ||
|
|
035d655e47 | ||
|
|
06d8860d42 | ||
|
|
9d2509ab5b | ||
|
|
f7ab5cb7c4 | ||
|
|
8520bbd2c7 | ||
|
|
d1317f8fa6 | ||
|
|
1999427225 | ||
|
|
94ff966994 | ||
|
|
e99589a3eb | ||
|
|
50cde66067 | ||
|
|
e8db0e3abb | ||
|
|
46ae5700ee | ||
|
|
c8e715c33b | ||
|
|
ed74182cc2 | ||
|
|
f0097ff733 | ||
|
|
24de9f92e8 | ||
|
|
4ba19c9556 | ||
|
|
a5be17d941 | ||
|
|
23831e38e6 | ||
|
|
ad745aae63 | ||
|
|
cc94419a72 | ||
|
|
c7c7eff918 | ||
|
|
3b52b683e3 | ||
|
|
95448eea3d | ||
|
|
ba34d72183 | ||
|
|
8590457d41 | ||
|
|
9b820cc0b6 | ||
|
|
b4b4c996ba | ||
|
|
b1454276ed | ||
|
|
aa0f77043c | ||
|
|
2c1c5debca | ||
|
|
dac4dd560a | ||
|
|
7e136a792f | ||
|
|
8baae4c77f | ||
|
|
c295981c5a | ||
|
|
3ebd08e38c | ||
|
|
f38ff074c4 | ||
|
|
c124bbe4bf | ||
|
|
061fd25c61 | ||
|
|
923abb94d8 | ||
|
|
03cf1e7535 | ||
|
|
8b80a8803b | ||
|
|
47c697feca | ||
|
|
177680216c | ||
|
|
032a937b06 | ||
|
|
4f36a1fb77 | ||
|
|
14a1d3d251 | ||
|
|
239dd55146 | ||
|
|
c09297997e | ||
|
|
776693235c | ||
|
|
b5c09965a9 | ||
|
|
d01deec11d | ||
|
|
20dabf0b49 | ||
|
|
df4e22e3d0 | ||
|
|
7a730384ef | ||
|
|
8d2aa61f9b | ||
|
|
8395704dc6 | ||
|
|
a672860c40 | ||
|
|
b73aaa4899 | ||
|
|
78cf2ead38 | ||
|
|
4babb11e2f | ||
|
|
2b4b00b388 | ||
|
|
5e1113d884 | ||
|
|
45f1c96ff2 | ||
|
|
4703ec5164 | ||
|
|
9001a64ef9 | ||
|
|
186441e7f5 | ||
|
|
e5af1edcb9 | ||
|
|
913a001375 | ||
|
|
777ef6b663 | ||
|
|
f5164f3804 | ||
|
|
6075bf3fc2 | ||
|
|
e99cd8052c | ||
|
|
d25420a33b | ||
|
|
72b25cd3a8 | ||
|
|
df98d04d79 | ||
|
|
9a7442c2fd | ||
|
|
ef97134f50 | ||
|
|
c28ed42617 | ||
|
|
eb5fdac918 | ||
|
|
518bc555a6 | ||
|
|
21a6ed247b | ||
|
|
19505b664c | ||
|
|
32ab01cd32 | ||
|
|
b4f6a9336b | ||
|
|
7ea77d8da4 | ||
|
|
708d5831e4 | ||
|
|
193fb2a381 | ||
|
|
405a75f26b | ||
|
|
34942b5af3 | ||
|
|
d2fac78413 | ||
|
|
6bebde8279 | ||
|
|
481cebee7e | ||
|
|
96fdbac69a | ||
|
|
068093aae0 | ||
|
|
d8f352ae7c | ||
|
|
21bb2ea063 | ||
|
|
efae5d6a69 | ||
|
|
8989b5ea39 | ||
|
|
4bd7bafd7c | ||
|
|
19749effce | ||
|
|
d5ce8b1ea3 | ||
|
|
7541fa7cb7 | ||
|
|
5acbf9ef59 | ||
|
|
1082b13830 | ||
|
|
a0a88b4663 | ||
|
|
c7b905c0ec | ||
|
|
8b6bcef4b7 | ||
|
|
c00ebef329 | ||
|
|
0b0d286f5c | ||
|
|
42df203389 | ||
|
|
70358d90b4 | ||
|
|
57cc70c6af | ||
|
|
85f93ef135 | ||
|
|
40d3a900a0 | ||
|
|
7c8933f8c4 | ||
|
|
6a93cc49be | ||
|
|
8baa104453 | ||
|
|
97c9a4a02c | ||
|
|
13b52229be | ||
|
|
ab14a0bc61 | ||
|
|
3a6935f126 | ||
|
|
7994b80dcf | ||
|
|
9f914dcd10 | ||
|
|
daf1de550c | ||
|
|
a9ab3ea5b4 | ||
|
|
d63e3f1559 | ||
|
|
7388cc8a78 | ||
|
|
d1b2dd2831 | ||
|
|
dacd389799 | ||
|
|
361808923a | ||
|
|
3e198086e3 | ||
|
|
49c8292e48 | ||
|
|
ff057838ec | ||
|
|
0e9a44dd43 | ||
|
|
ac3ba5b4a6 | ||
|
|
2804ad2363 | ||
|
|
e3a261d29c | ||
|
|
4741afd2cf | ||
|
|
1b55a9956f | ||
|
|
679755de35 | ||
|
|
3553f467b2 | ||
|
|
542a5393ac | ||
|
|
94f25a429f | ||
|
|
ec17355056 | ||
|
|
5d4917a5d7 | ||
|
|
e122a75dd2 | ||
|
|
2b91af4493 | ||
|
|
232d990e6d | ||
|
|
92b1e8ab75 | ||
|
|
4505b8795a | ||
|
|
a7ad2a7e1a | ||
|
|
510ad223f0 | ||
|
|
b2ee24b549 | ||
|
|
b407f6a011 | ||
|
|
d68d1d9999 | ||
|
|
faab9f4aa4 | ||
|
|
39dd219fbc | ||
|
|
660d040531 | ||
|
|
2088dfb3b3 | ||
|
|
8858df2185 | ||
|
|
3e6016dc6e | ||
|
|
096db533a6 | ||
|
|
3648ef4687 | ||
|
|
f73e870bde | ||
|
|
0afa027ab4 | ||
|
|
e6aa9f9d4e | ||
|
|
6cfc61ac0e | ||
|
|
1c3f3c1842 | ||
|
|
55320a03f1 | ||
|
|
9b2037419f | ||
|
|
99a6976f53 | ||
|
|
8888ee3974 | ||
|
|
cb4b4d584c | ||
|
|
75367e714a | ||
|
|
167a841010 | ||
|
|
2736c3a9d1 | ||
|
|
7e888a6379 | ||
|
|
dcb4eedeb0 | ||
|
|
3e6eea25b3 | ||
|
|
2ce6e59d9b | ||
|
|
132a710a0a | ||
|
|
afcb794d59 | ||
|
|
6ef3b8c458 | ||
|
|
daf5cfe425 | ||
|
|
42e4e7c063 | ||
|
|
7496a463d4 | ||
|
|
091b40cb39 | ||
|
|
0f0812618a | ||
|
|
383142bcbe | ||
|
|
f728c58383 | ||
|
|
e2095bf70b | ||
|
|
a223157000 | ||
|
|
c7052b3d6f | ||
|
|
4a8a1af885 | ||
|
|
0345861b5f | ||
|
|
4422a3df23 | ||
|
|
a214d0ed4c | ||
|
|
81b5e66dd4 | ||
|
|
625376f0d3 | ||
|
|
8f925a2e84 | ||
|
|
cf11b32849 | ||
|
|
53a99cb9ee | ||
|
|
b5711b21dc | ||
|
|
585300cd33 | ||
|
|
7d877ab488 | ||
|
|
642970df95 | ||
|
|
75d1715442 | ||
|
|
adc7127055 | ||
|
|
ca64363899 | ||
|
|
0508a62c91 | ||
|
|
93ea98520b | ||
|
|
ebca91e0d0 | ||
|
|
c3b6e9da43 | ||
|
|
5256f1c967 | ||
|
|
c631e6c61c | ||
|
|
5fe6c2dcb4 | ||
|
|
453405f131 | ||
|
|
0ee87d7b46 | ||
|
|
b0e395e853 | ||
|
|
ad7855f995 | ||
|
|
d90de7f13c | ||
|
|
9f288fc16f | ||
|
|
c2265e29d2 | ||
|
|
1b3047c812 | ||
|
|
f5b97f1e8a | ||
|
|
d3aa8a118c | ||
|
|
820bf37445 | ||
|
|
2639fba582 | ||
|
|
03c5fdef43 | ||
|
|
203dff9165 | ||
|
|
e906a807f1 | ||
|
|
5a5f06ef2a | ||
|
|
434bc01f0b | ||
|
|
f6f0cb708e | ||
|
|
322d93ab0c | ||
|
|
92913c4c27 | ||
|
|
1f79fb608a | ||
|
|
3a2a4dee5c | ||
|
|
c1e68b2c61 | ||
|
|
a38d0a0fbd | ||
|
|
b32301592f | ||
|
|
97c95b7639 | ||
|
|
852c3badbb | ||
|
|
e5b7628802 | ||
|
|
da10ce7b05 | ||
|
|
b484638bb9 | ||
|
|
9a145ab15f | ||
|
|
e473d234fd | ||
|
|
7f5deb0f97 | ||
|
|
225b8953fd | ||
|
|
6b78bab99a | ||
|
|
8e7cce0634 | ||
|
|
b7f9bfda4a | ||
|
|
2ce925caba | ||
|
|
4a7b3d6d7b | ||
|
|
219af60102 | ||
|
|
14a5144de7 | ||
|
|
49d5c02d69 | ||
|
|
91c6389754 | ||
|
|
7a3ee349da | ||
|
|
a871da4fbe | ||
|
|
3ac74c86a1 | ||
|
|
2bf88fcef5 | ||
|
|
b6875b41f4 | ||
|
|
a9559f03b0 | ||
|
|
de13141b68 | ||
|
|
af09cb06f5 | ||
|
|
faa9e6441b | ||
|
|
079b8e0e16 | ||
|
|
4debd89d8e | ||
|
|
68e8c1ce04 | ||
|
|
bf3135eb41 | ||
|
|
e9001207ea | ||
|
|
95260371cb | ||
|
|
c6c55d0130 | ||
|
|
613d08d3e2 | ||
|
|
e92666d988 | ||
|
|
5fb3edf258 | ||
|
|
ecdd751ec3 | ||
|
|
ead2a1a606 | ||
|
|
8485dcdb03 | ||
|
|
d68ffc2da6 | ||
|
|
8be0567924 | ||
|
|
a99457ee29 | ||
|
|
0e2af13656 | ||
|
|
37a58a04f2 | ||
|
|
824ca7599c | ||
|
|
f8569a74cb | ||
|
|
236b3b1c2b | ||
|
|
d820df0dbe | ||
|
|
ebdf08a514 | ||
|
|
556b9ae574 | ||
|
|
24d73aeb71 | ||
|
|
debf39fe64 | ||
|
|
c423c59365 | ||
|
|
6b0fa20b8b | ||
|
|
0428b5b694 | ||
|
|
c2672bd630 | ||
|
|
eecf095077 | ||
|
|
5e10f1fe6a | ||
|
|
9d6db921bd | ||
|
|
db1bdfd62d | ||
|
|
0845abf640 | ||
|
|
69d30f2204 | ||
|
|
08ddef6a93 | ||
|
|
f61e2d04f1 | ||
|
|
0b73b13b9a | ||
|
|
ff9d6e4fd6 | ||
|
|
2bcb2a40e4 | ||
|
|
d9e2b1f0de | ||
|
|
a51757429e | ||
|
|
bc363a74f5 | ||
|
|
bafaa6acc6 | ||
|
|
f639aae2ae | ||
|
|
0d3e6a3dce | ||
|
|
32d3ea0a2d | ||
|
|
33fd33b03a | ||
|
|
8026bba723 | ||
|
|
a6680e38d5 | ||
|
|
6fa081e004 | ||
|
|
6753d39dd0 | ||
|
|
09c213738b | ||
|
|
a346461ea8 | ||
|
|
4f9bfb4387 | ||
|
|
7adac51152 | ||
|
|
601f77b5c8 | ||
|
|
2d072325ad | ||
|
|
2db0d7cfa1 | ||
|
|
ae388c48d0 | ||
|
|
362f2b5ec4 | ||
|
|
22e8202d27 | ||
|
|
1efbd7ead2 | ||
|
|
33f467453e | ||
|
|
bec8f6b86c | ||
|
|
5b081398b5 | ||
|
|
21e151cadd | ||
|
|
0392145512 | ||
|
|
6579645934 | ||
|
|
12a869c62a | ||
|
|
0c2ea268d1 | ||
|
|
06fd054eb3 | ||
|
|
2e06e4b6b8 | ||
|
|
c4479a0185 | ||
|
|
e46b06491c | ||
|
|
5e019ed9f8 | ||
|
|
29e0cfa98b | ||
|
|
9ae3fac08e | ||
|
|
1169437ec6 | ||
|
|
57677b7b55 | ||
|
|
ec1e8b6c86 | ||
|
|
e58acce9e4 | ||
|
|
30bc51ae9e | ||
|
|
2268365c3b | ||
|
|
42e4a068bb | ||
|
|
e7c46ac658 | ||
|
|
3fffcb47d9 | ||
|
|
55af046c92 | ||
|
|
a7f053776a | ||
|
|
c75c4603fc | ||
|
|
29b76fc4f5 | ||
|
|
ec00a1eb0d | ||
|
|
c3f49386ca | ||
|
|
60197c2d7e | ||
|
|
0127d7eb8b | ||
|
|
b4b9f9601b | ||
|
|
4604b45852 | ||
|
|
9fd93e8e57 | ||
|
|
4f3e4cd542 | ||
|
|
ccf6232039 | ||
|
|
575845772f | ||
|
|
c74c7ce1d4 | ||
|
|
4d1305efb2 | ||
|
|
9d29b33ff4 | ||
|
|
a0a3a095ac | ||
|
|
14eb16d5d4 | ||
|
|
613bb72eb7 | ||
|
|
ed9c288db8 | ||
|
|
a9bf0fa97e | ||
|
|
56ea1c7be7 | ||
|
|
d11325cf0f | ||
|
|
d89d3db126 | ||
|
|
80d15d142d | ||
|
|
f77c8990ce | ||
|
|
0b3690a59c | ||
|
|
2e38b51e1c | ||
|
|
426364b961 | ||
|
|
1867a6c47b | ||
|
|
3a59d9075f | ||
|
|
a73f5340a2 | ||
|
|
2bc843fdcd | ||
|
|
b9e97ab79d | ||
|
|
06df781bca | ||
|
|
c93fb5e443 | ||
|
|
ad560ffaf9 | ||
|
|
5ebcef2718 | ||
|
|
6b52fb5fb6 | ||
|
|
5780200ba3 | ||
|
|
7b2f17826a | ||
|
|
d3f2f4f6ac | ||
|
|
2dbe3d5b83 | ||
|
|
9e7cb046b3 | ||
|
|
9afcc355ff | ||
|
|
637cff3180 | ||
|
|
d33f1071ae | ||
|
|
013e9b9992 | ||
|
|
00da91b73f | ||
|
|
54ce7885bc | ||
|
|
7959b7fd1f | ||
|
|
76e744bb7b | ||
|
|
5a74495d7b | ||
|
|
904746054c | ||
|
|
759f91ce91 | ||
|
|
a4ec3cdf0b | ||
|
|
0f020127f3 | ||
|
|
9d62bed9f3 | ||
|
|
e9d0a1d015 | ||
|
|
17640302bf | ||
|
|
7613528e7e | ||
|
|
b41f93fcd6 | ||
|
|
c9c447e7a9 | ||
|
|
688e277e89 | ||
|
|
8737a1d76a | ||
|
|
f6fe5c96c9 | ||
|
|
149aef929d | ||
|
|
3b2558bb9e | ||
|
|
57098a77ec | ||
|
|
99a3fe0a13 | ||
|
|
441b3864f3 | ||
|
|
18bea3cfa5 | ||
|
|
783d1edaf1 | ||
|
|
977a1a08e9 | ||
|
|
90ef1d2d31 | ||
|
|
9345efbafb | ||
|
|
fa6eb3a64f | ||
|
|
587c788ce3 | ||
|
|
356f101078 | ||
|
|
e00b8a93bf | ||
|
|
dc72729a40 | ||
|
|
cf8799d116 | ||
|
|
c0be4a3f7d | ||
|
|
3b85457020 | ||
|
|
a50244dc16 | ||
|
|
5f98b4fdca | ||
|
|
4846564c78 | ||
|
|
86f04884de | ||
|
|
bf52620175 | ||
|
|
e14ed9c7dd | ||
|
|
74276ae878 | ||
|
|
1cc8a1d247 | ||
|
|
6a2edcea46 | ||
|
|
0768026938 | ||
|
|
19cc1d7854 | ||
|
|
450cd17d16 | ||
|
|
35473e653d | ||
|
|
aefaa17a84 | ||
|
|
88b0134e72 | ||
|
|
c0260b4167 | ||
|
|
b574996334 | ||
|
|
adcfb30d7d | ||
|
|
f251803f55 | ||
|
|
fb97335d9f | ||
|
|
05fb47bdb0 | ||
|
|
9b9545b92a | ||
|
|
26aed6611e | ||
|
|
ca4602d788 | ||
|
|
f60b450ee8 | ||
|
|
036263993e | ||
|
|
b48445cc7e | ||
|
|
fc312113d2 | ||
|
|
2e90ce9cc5 | ||
|
|
be92b57b54 | ||
|
|
6697ab6b63 | ||
|
|
2a51e1da04 | ||
|
|
867133e93d | ||
|
|
b6298915dd | ||
|
|
196a13b1cc | ||
|
|
76a564df2e | ||
|
|
17efc38e35 | ||
|
|
bf90fed2b7 | ||
|
|
e3aac6263f | ||
|
|
8d1996833b | ||
|
|
9982f1f21b | ||
|
|
73d080bcc8 | ||
|
|
c17ccc50ab | ||
|
|
75a9976cbc | ||
|
|
f3a356375e | ||
|
|
55cf1a37cb | ||
|
|
a7050458ae | ||
|
|
db752d141b | ||
|
|
cfda5eb148 | ||
|
|
2903ebe296 | ||
|
|
1af5065df7 | ||
|
|
e9df32a983 | ||
|
|
12d16ddc06 | ||
|
|
9200810f60 | ||
|
|
78c7459b3a | ||
|
|
0d97a31ce9 | ||
|
|
c56bfe064a | ||
|
|
ce9eafcd51 | ||
|
|
59caa98c43 | ||
|
|
81aaddb0e7 | ||
|
|
37d3188ce7 | ||
|
|
8f2abc6750 | ||
|
|
e970e5f246 | ||
|
|
ac95138c18 | ||
|
|
ab3e258f19 | ||
|
|
0f5893ed60 | ||
|
|
91902a031e | ||
|
|
e8fe09cf23 | ||
|
|
e3616c1ce1 | ||
|
|
35cac6b93b | ||
|
|
6d61f9d2e1 | ||
|
|
bfe382c315 | ||
|
|
b3f97cdce4 | ||
|
|
229b8f304a | ||
|
|
78718700f9 | ||
|
|
4f3be49728 | ||
|
|
c7ce056728 | ||
|
|
4197498e2d | ||
|
|
ccbbde549e | ||
|
|
c504cf02e4 | ||
|
|
95fe5004c8 | ||
|
|
cf4aedd97c | ||
|
|
ba0c9e8b29 | ||
|
|
b473adcf80 | ||
|
|
ac3484b82e | ||
|
|
c8b0f0bdf8 | ||
|
|
5a7e62e4a9 | ||
|
|
6ba442577f | ||
|
|
99e54aed80 | ||
|
|
016ff5b4aa | ||
|
|
f3e9c82432 | ||
|
|
579efc05fc | ||
|
|
aae4f3319f | ||
|
|
8844caf44d | ||
|
|
61c6b28237 | ||
|
|
64049f0f81 | ||
|
|
4b4f59a5d4 | ||
|
|
4c0744260d | ||
|
|
912e71be53 | ||
|
|
16ed00aede | ||
|
|
e6a7a9353c | ||
|
|
7ad86595e4 | ||
|
|
190bcf68f3 | ||
|
|
406f646949 | ||
|
|
17a939e38d | ||
|
|
f6818f9654 | ||
|
|
b5cdc33e7c | ||
|
|
fe918d41c2 | ||
|
|
a82188ac07 | ||
|
|
0bd373cd56 | ||
|
|
e145593c28 | ||
|
|
43fb7fe342 | ||
|
|
bee2408413 | ||
|
|
0d166081ad | ||
|
|
a37ce3ee9f | ||
|
|
ab3e810a95 | ||
|
|
469deeb141 | ||
|
|
8b47774aee | ||
|
|
774aa1570f | ||
|
|
bd8b907d13 | ||
|
|
1172056833 | ||
|
|
43d5831394 | ||
|
|
a259b6b8ab | ||
|
|
24b5406a1d | ||
|
|
8de7072720 | ||
|
|
d545246bbf | ||
|
|
cd23695116 | ||
|
|
5a3a058ed3 | ||
|
|
16abbad6b2 | ||
|
|
b8d3d8f5e4 | ||
|
|
1dcd7c5b14 | ||
|
|
ac7ea2b9fa | ||
|
|
a1ab82b188 | ||
|
|
afe70003f4 | ||
|
|
03ef438a72 | ||
|
|
8cb3c07151 | ||
|
|
b47c505438 | ||
|
|
2e3d5162f7 | ||
|
|
53162e23b6 | ||
|
|
164f16c85b | ||
|
|
8f5e60f787 | ||
|
|
1906a08f72 | ||
|
|
a35b3b4602 | ||
|
|
b7783b19d2 | ||
|
|
b2f9b3175b | ||
|
|
3289bfaa87 | ||
|
|
87e6edd554 | ||
|
|
2b53f267a7 | ||
|
|
6a6551f39b | ||
|
|
b9b7d5ac21 | ||
|
|
fe40f65703 | ||
|
|
07fe099b4e | ||
|
|
54214dd2c4 | ||
|
|
2ce9e540da | ||
|
|
4091d00057 | ||
|
|
1544acff05 | ||
|
|
7c1497a058 | ||
|
|
d05c50ea74 | ||
|
|
8963cbcb7c | ||
|
|
acb29e0dad | ||
|
|
f043b6e095 | ||
|
|
8c70c2a136 | ||
|
|
448c56647f | ||
|
|
1d600c640a | ||
|
|
c6f53d25b0 | ||
|
|
b9b9dabd75 | ||
|
|
e71da86a5c | ||
|
|
cdd30f4da5 | ||
|
|
ed5a9d5dc1 | ||
|
|
15b7126243 | ||
|
|
0ac621588e | ||
|
|
7339ebce60 | ||
|
|
b82b79fa11 | ||
|
|
acdf602505 | ||
|
|
6804ad62c6 | ||
|
|
8a8f2d4e5b | ||
|
|
9bb8ebaa10 | ||
|
|
26c6908d25 | ||
|
|
6682e56f71 | ||
|
|
3048a77a05 | ||
|
|
257f45c3c3 | ||
|
|
8ab0d25b4a | ||
|
|
a3f24d1bbf | ||
|
|
2e915780aa | ||
|
|
3d46f2a3af | ||
|
|
4f8029ad7c | ||
|
|
b67ed1988f | ||
|
|
55c9a81922 | ||
|
|
90b624a3e0 | ||
|
|
0115b0827b | ||
|
|
79432dce20 | ||
|
|
ff44f29616 | ||
|
|
a76c6b2307 | ||
|
|
984708dfd3 | ||
|
|
a8b5303207 | ||
|
|
35874b5fd2 | ||
|
|
a67d4c70d7 | ||
|
|
be92957328 | ||
|
|
48d0653331 | ||
|
|
612a6dd06c | ||
|
|
ef2089cafb | ||
|
|
5c64dba65a | ||
|
|
e87cd7077e | ||
|
|
cf6a9a8341 | ||
|
|
51e7f44433 | ||
|
|
23d294fef5 | ||
|
|
fb2173c396 | ||
|
|
363a2c6098 | ||
|
|
0853a47a3f | ||
|
|
fe5d0c9cdf | ||
|
|
95bd5b073a | ||
|
|
a553ac8716 | ||
|
|
f8cc86c227 | ||
|
|
23d23f6462 | ||
|
|
a2e0373d22 | ||
|
|
7ede8685ec | ||
|
|
092f32ba67 | ||
|
|
e24513d2ad | ||
|
|
ee8366adba | ||
|
|
5a59542679 | ||
|
|
0d55b6182a | ||
|
|
67c894cda9 | ||
|
|
0662de5323 | ||
|
|
244b91ee80 | ||
|
|
89b622eea8 | ||
|
|
e1279b01bc | ||
|
|
6857e26411 | ||
|
|
3c5bb4e8f3 | ||
|
|
e473123a6a | ||
|
|
0ccc70c843 | ||
|
|
8acc98563e | ||
|
|
7041f11987 | ||
|
|
bae6c24209 | ||
|
|
174424c520 | ||
|
|
cebf32c46c | ||
|
|
5ea9285c5b | ||
|
|
55c4346610 | ||
|
|
5edd9e75da | ||
|
|
45c09224f7 | ||
|
|
370d693f9d | ||
|
|
63a27fbc5f | ||
|
|
db84afd263 | ||
|
|
b8b3292161 | ||
|
|
9598a90627 | ||
|
|
7f5806b727 | ||
|
|
20ea2fde84 | ||
|
|
c124e7381c | ||
|
|
d370c2076d | ||
|
|
32c1135cd4 | ||
|
|
9203a33646 | ||
|
|
3665a82418 | ||
|
|
7d64698322 | ||
|
|
ea5b86774d | ||
|
|
0e1257cf17 | ||
|
|
b8d2c4e452 | ||
|
|
a25005a84c | ||
|
|
86b1d9aea5 | ||
|
|
f1c935ac4c | ||
|
|
a4d198005d | ||
|
|
9a3758bfc1 | ||
|
|
c3cbf4353d | ||
|
|
4bcd176944 | ||
|
|
44bbcbd14a | ||
|
|
96ccb1333b | ||
|
|
04b841c719 | ||
|
|
3bdc974ff5 | ||
|
|
adfa2645bf | ||
|
|
537c0960fe | ||
|
|
0a36629502 | ||
|
|
211ab16ddb | ||
|
|
5b8437172a | ||
|
|
62cb4da833 | ||
|
|
6647dd043d | ||
|
|
a520243563 | ||
|
|
93b318cfdf | ||
|
|
de09a80a35 | ||
|
|
d1394c6994 | ||
|
|
a12789c632 | ||
|
|
63c7df9f09 | ||
|
|
c4707fe887 | ||
|
|
04845a72bc | ||
|
|
a9db60a1d9 | ||
|
|
beae41b207 | ||
|
|
29a2d810a7 | ||
|
|
19ffb9c8df | ||
|
|
28fb26f792 | ||
|
|
07d1637342 | ||
|
|
088065e0a8 | ||
|
|
0913abe616 | ||
|
|
3d14097bf6 | ||
|
|
39b7075502 | ||
|
|
a0efb89aa0 | ||
|
|
6a89fe401a | ||
|
|
ca497e2cbd | ||
|
|
1544683bdc | ||
|
|
d237bb694b | ||
|
|
89a7007c6a | ||
|
|
281e45ce01 | ||
|
|
08d78fb6ff | ||
|
|
1587815fca | ||
|
|
1cdc647324 | ||
|
|
ee61f19253 | ||
|
|
86002b093f | ||
|
|
ff2665942e | ||
|
|
2709531f09 | ||
|
|
e9a89236a2 | ||
|
|
0265804003 | ||
|
|
1fef3e106c | ||
|
|
b36759b586 | ||
|
|
815cc0559e | ||
|
|
0750f04019 | ||
|
|
42fbe7572e | ||
|
|
0594ed5b46 | ||
|
|
a1112183de | ||
|
|
6173e1dd10 | ||
|
|
e2c29a3b28 | ||
|
|
fb80236214 | ||
|
|
bc42b3a78e | ||
|
|
1858904ce0 | ||
|
|
10758088ef | ||
|
|
4bfc75c2f9 | ||
|
|
70f9832e14 | ||
|
|
497c179245 | ||
|
|
20ab7d1739 | ||
|
|
937290db09 | ||
|
|
d7789661cd | ||
|
|
8697eebbc2 | ||
|
|
0d20f1c364 | ||
|
|
1b59b2c9bc | ||
|
|
8d92a0681a | ||
|
|
ab071163e5 | ||
|
|
f60e3d667a | ||
|
|
cafe4e38db | ||
|
|
c856d88691 | ||
|
|
b3385015e5 | ||
|
|
1e3aabf654 | ||
|
|
720abca826 | ||
|
|
3cbccd2ad3 | ||
|
|
cae3990eac | ||
|
|
1195f3db7b | ||
|
|
4e4e0e8e04 | ||
|
|
588fb26728 | ||
|
|
dc80884ab5 | ||
|
|
e465cea07b | ||
|
|
b98864d134 | ||
|
|
7fc70179ed | ||
|
|
eeee5012b7 | ||
|
|
7f3b51dd17 | ||
|
|
63666391d4 | ||
|
|
0cf2c8505e | ||
|
|
40434eadfd | ||
|
|
ef47dad566 | ||
|
|
97fc5224e7 | ||
|
|
894a1ae93a | ||
|
|
000c5edc4a | ||
|
|
63c2b98c5e | ||
|
|
34b4efe242 | ||
|
|
e4ac934dbf | ||
|
|
7bf2373fed | ||
|
|
2634d3b427 | ||
|
|
971b7cba65 | ||
|
|
3b40e003ab | ||
|
|
6450fd2692 | ||
|
|
1e11c1eac6 | ||
|
|
a4fd1a9f39 | ||
|
|
4e07297503 | ||
|
|
342da2430b | ||
|
|
be6b97b5d8 | ||
|
|
d18a55f429 | ||
|
|
e34261d3ef | ||
|
|
d3788a9c70 | ||
|
|
417646819c | ||
|
|
56bb7d721a | ||
|
|
e6a1ea9d4f | ||
|
|
96f36d16ae | ||
|
|
40020f4e1e | ||
|
|
b1e235535c | ||
|
|
49c48f2ec2 | ||
|
|
9e0b23f065 | ||
|
|
8a622a0e72 | ||
|
|
239e09ad07 | ||
|
|
ca1d899413 | ||
|
|
7a3e1ef19a | ||
|
|
28b47b601f | ||
|
|
91a274da2b | ||
|
|
68779a4dac | ||
|
|
49ad471b2d | ||
|
|
552f308e9e | ||
|
|
c4d4821327 | ||
|
|
a5ea709edc | ||
|
|
b0becb5a2d | ||
|
|
9dba2386bb | ||
|
|
43af5d9c1f | ||
|
|
e7ef45a606 | ||
|
|
f1bb09826d | ||
|
|
6fe6d0cb9a | ||
|
|
dd039677a0 | ||
|
|
63611408b1 | ||
|
|
881db86895 | ||
|
|
a01b14f301 | ||
|
|
c091a5c11a | ||
|
|
ed82c55475 | ||
|
|
570ccb7db1 | ||
|
|
b3b21e0af3 | ||
|
|
73a3e9d5bb | ||
|
|
b97f86deea | ||
|
|
eae9e7e685 | ||
|
|
e52c5ca1bb | ||
|
|
9a10501698 | ||
|
|
a252e3a02a | ||
|
|
6bae5a6031 | ||
|
|
fec01aeff1 | ||
|
|
1a3e254b6c | ||
|
|
ef9455c324 | ||
|
|
2bb29a50b7 | ||
|
|
d590fdddf6 | ||
|
|
3435d6656c | ||
|
|
7861992fe6 | ||
|
|
f5e6a3a274 | ||
|
|
fa373c7fdb | ||
|
|
8b7bf76260 | ||
|
|
da39624f1c | ||
|
|
6556dc1fdf | ||
|
|
a6a1de5006 | ||
|
|
e3571510ae | ||
|
|
4fd93fea51 | ||
|
|
e3273d7268 | ||
|
|
fd0602a9ac | ||
|
|
6f3f581d8a | ||
|
|
4867d9949d | ||
|
|
49ae7da5ce | ||
|
|
1b3144f978 | ||
|
|
063a80ecfb | ||
|
|
55d94c99b8 | ||
|
|
3a2be9a4ed | ||
|
|
9d53b738cc | ||
|
|
8761763d95 | ||
|
|
1991f9b362 | ||
|
|
72f342245d | ||
|
|
6ff138ca76 | ||
|
|
064f2e66e1 | ||
|
|
e5a48faf89 | ||
|
|
63e5faef11 | ||
|
|
e54b540bd4 | ||
|
|
311cffa901 | ||
|
|
eb0e89d3ea | ||
|
|
2f9dd8bad9 | ||
|
|
049c993ce0 | ||
|
|
fe46aa5cc2 | ||
|
|
4ec5e44b68 | ||
|
|
0a58e3e430 | ||
|
|
4c582b19eb | ||
|
|
6068188453 | ||
|
|
db0758690e | ||
|
|
d4efd003bc | ||
|
|
f740588780 | ||
|
|
f71953077d | ||
|
|
fae4c73ad3 | ||
|
|
73e4350320 | ||
|
|
6c59d97520 | ||
|
|
855c6a3c05 | ||
|
|
ff2998bee3 | ||
|
|
2129cc2906 | ||
|
|
9cce324316 | ||
|
|
f35fd97c76 | ||
|
|
35656fe0e8 | ||
|
|
35d7591def | ||
|
|
f9dc00a458 | ||
|
|
1fa852f118 | ||
|
|
7646ceeaaa | ||
|
|
a0588ef8b1 | ||
|
|
e2314c7852 | ||
|
|
a729f32c83 | ||
|
|
a5269b998b | ||
|
|
c317d3d9b1 | ||
|
|
bc0bdd02f4 | ||
|
|
ca73f0344c | ||
|
|
b956be0f44 | ||
|
|
f67275be13 | ||
|
|
a5d6c952a7 | ||
|
|
4cfc61da14 | ||
|
|
c403df0861 | ||
|
|
bb2e601e13 | ||
|
|
c5699a9b30 | ||
|
|
3c5624bc56 | ||
|
|
f7d5021ac5 | ||
|
|
4c220b1f95 | ||
|
|
356c50ec1e | ||
|
|
ec8ac117ed | ||
|
|
c61160fee3 | ||
|
|
1bd497effc | ||
|
|
4d1182bdb1 | ||
|
|
e256eaf014 | ||
|
|
dd93a90ab2 | ||
|
|
a75ddd0d0c | ||
|
|
c3d7a73c0b | ||
|
|
6e3523d594 | ||
|
|
4d1023ca30 | ||
|
|
f097b9c972 | ||
|
|
4414288b86 | ||
|
|
b3cbe3d338 | ||
|
|
1d22c78f9f | ||
|
|
01845812a1 | ||
|
|
dbc458a4d7 | ||
|
|
288f99d507 | ||
|
|
b2e3d90734 | ||
|
|
a043902d9a | ||
|
|
a9c3fdd63f | ||
|
|
bde17bb395 | ||
|
|
579d96534d | ||
|
|
0f119ed371 | ||
|
|
5b9e4c4780 | ||
|
|
3bad82db3b | ||
|
|
ec2f4fde93 | ||
|
|
223cd11835 | ||
|
|
5f810ff21c | ||
|
|
7f77e8a441 | ||
|
|
3ab01fa6a3 | ||
|
|
c19c5ca083 | ||
|
|
2d3d5d67ee | ||
|
|
dff49e9c23 | ||
|
|
97550b4fd9 | ||
|
|
16dab00bec | ||
|
|
a8a28c1512 | ||
|
|
8f948228d5 | ||
|
|
aa2f1b6b29 | ||
|
|
084efb1f14 | ||
|
|
25a22cc6f2 | ||
|
|
e5faeea2e5 | ||
|
|
f0b15ee053 | ||
|
|
e9a7ab789d | ||
|
|
bc0a97af04 | ||
|
|
f6c0bcf201 | ||
|
|
7aca08a954 | ||
|
|
c5b411c1ed | ||
|
|
f0ccbcb281 | ||
|
|
4f4b1f9145 | ||
|
|
350b1ec67e | ||
|
|
3f402d23ff | ||
|
|
9b47625115 | ||
|
|
fa7334c74f | ||
|
|
3e4f7b7bdf | ||
|
|
16e10d788a | ||
|
|
9f43b1988b | ||
|
|
0640ec7f5a | ||
|
|
e3f607dba0 | ||
|
|
6fc6ed8635 | ||
|
|
3bb0e78e1c | ||
|
|
6778640b52 | ||
|
|
df67c73d81 | ||
|
|
024f0a5027 | ||
|
|
8a0a29c64e | ||
|
|
647ddfa05e | ||
|
|
4ffca8954f | ||
|
|
ed799fb555 | ||
|
|
b7456c604d | ||
|
|
c22d252246 | ||
|
|
3e549a7d44 | ||
|
|
e0f6459674 | ||
|
|
a8999bbf38 | ||
|
|
210c7b8785 | ||
|
|
a38702a7d2 | ||
|
|
1fff83eeee | ||
|
|
24e74f785e | ||
|
|
8e7989087d | ||
|
|
963e85f047 | ||
|
|
14ed50a559 | ||
|
|
041d342faf | ||
|
|
85cf043e4a | ||
|
|
a3322f17d5 | ||
|
|
bbcf3fd7d2 | ||
|
|
56b80cb0ab | ||
|
|
0a19925e99 | ||
|
|
38a01a59fa | ||
|
|
0fd6fb1ff4 | ||
|
|
4545ddee6d | ||
|
|
13c34b0863 | ||
|
|
cc2f13710d | ||
|
|
23c52c1c86 | ||
|
|
537b63acb5 | ||
|
|
a6fe606ce6 | ||
|
|
857cef776d | ||
|
|
03c90b7c40 | ||
|
|
7da4f7fc35 | ||
|
|
764af8735c | ||
|
|
30dadcfb22 | ||
|
|
9fd91e6250 | ||
|
|
dab6d6dd6d | ||
|
|
827b240078 | ||
|
|
bb948904b6 | ||
|
|
c1367ebdca | ||
|
|
895055a3d1 | ||
|
|
827ba62671 | ||
|
|
5ac83e4b4c | ||
|
|
dba992f388 | ||
|
|
1c275695c4 | ||
|
|
cc66df18ac | ||
|
|
d303c33c2e | ||
|
|
980dd1b5a1 | ||
|
|
7669b97ac6 | ||
|
|
b612e84be8 | ||
|
|
9956b27767 | ||
|
|
07038ce88e | ||
|
|
8b3ca9564b | ||
|
|
f403a63a5c | ||
|
|
56388472cb | ||
|
|
0ae41be16b | ||
|
|
28dc67dc86 | ||
|
|
85d76dc171 | ||
|
|
80a83d48f3 | ||
|
|
b54bb62c94 | ||
|
|
cdebea71f3 | ||
|
|
0d8fcb41ee | ||
|
|
18647717df | ||
|
|
878ffa8998 | ||
|
|
a9935dcd45 | ||
|
|
4635daf6b3 | ||
|
|
b468d010a8 | ||
|
|
c3443bff99 | ||
|
|
2d1b48267d | ||
|
|
1c1fa25e6c | ||
|
|
c2c65207a3 | ||
|
|
2f987e315e | ||
|
|
70029752f5 | ||
|
|
b73b6b8e13 | ||
|
|
e57d450809 | ||
|
|
43bf854374 | ||
|
|
4118d2aa55 | ||
|
|
0bb46f3f8c | ||
|
|
6514bc6b39 | ||
|
|
951439486f | ||
|
|
b02c7cdc44 | ||
|
|
d2d8bea51e | ||
|
|
dbaeaa45cf | ||
|
|
1a72701903 | ||
|
|
265b07a8d9 | ||
|
|
d2e090317f | ||
|
|
db406e3c82 | ||
|
|
0328cb04d7 | ||
|
|
2d9b898271 | ||
|
|
b5cd52b9b3 | ||
|
|
f3d8f44c4e | ||
|
|
658f94f155 | ||
|
|
7d8ffa9ebd | ||
|
|
40185161b8 | ||
|
|
6fcc75032e | ||
|
|
89fd7759a3 | ||
|
|
d801167637 | ||
|
|
394134f774 | ||
|
|
3e24ae8812 | ||
|
|
bda383c9cd | ||
|
|
f6663b01bc | ||
|
|
224fd77641 | ||
|
|
eafa9cc107 | ||
|
|
e2ded2d6ce | ||
|
|
4a55f19761 | ||
|
|
9df1d08348 | ||
|
|
86cc86ac12 | ||
|
|
acdc52116e | ||
|
|
f2f19ccea3 | ||
|
|
52e77c6634 | ||
|
|
1803dcc873 | ||
|
|
c649028b01 | ||
|
|
fb4de46626 | ||
|
|
3d91d4fc6a | ||
|
|
c87b639a84 | ||
|
|
ef7afe5f2f | ||
|
|
429f6b03c4 | ||
|
|
c0eb3d10e2 | ||
|
|
6b7a8f96a6 | ||
|
|
5d266ace64 | ||
|
|
90fdc4328b | ||
|
|
7fea567eb2 | ||
|
|
1c44368f0a | ||
|
|
b05cb3f1a3 | ||
|
|
ad6094ca1d | ||
|
|
53e7cbbd5a | ||
|
|
732b760829 | ||
|
|
8117bcb56f | ||
|
|
f882586eb8 | ||
|
|
b182fa4bb8 | ||
|
|
7e54a226e2 | ||
|
|
f40f44b14e | ||
|
|
c813630aad | ||
|
|
bde159291c | ||
|
|
34b162d2c9 | ||
|
|
0fba76a565 | ||
|
|
5bedca7692 | ||
|
|
ee2d0ffc14 | ||
|
|
f0f3ce018d | ||
|
|
2612c9f12c | ||
|
|
1ff27e3363 | ||
|
|
e74b569115 | ||
|
|
a1412d1cdb | ||
|
|
eaf569eb6d | ||
|
|
87eb96453a | ||
|
|
dd717b2d93 | ||
|
|
cf5dd6289e | ||
|
|
30384bb4ef | ||
|
|
de8759eabd | ||
|
|
ebdc5cca7f | ||
|
|
4e3e1d0b87 | ||
|
|
d0f5464200 | ||
|
|
30723cf723 | ||
|
|
67a3c7d2ee | ||
|
|
592a6cc792 | ||
|
|
fa1263b6a4 | ||
|
|
515559d00c | ||
|
|
478d4246c4 | ||
|
|
c483a044b5 | ||
|
|
70fa4ab79c | ||
|
|
ceb1defc4e | ||
|
|
2c50cf8ac6 | ||
|
|
0acade08ca | ||
|
|
1e679dcb8d | ||
|
|
716740f918 | ||
|
|
4c65ec28d6 | ||
|
|
49a8dd7459 | ||
|
|
9bb8b39956 | ||
|
|
48ebbb7292 | ||
|
|
d4004805f5 | ||
|
|
2141247e08 | ||
|
|
389123cff3 | ||
|
|
ade5dff217 | ||
|
|
8045bec6a5 | ||
|
|
cbed027c0e | ||
|
|
87fa69385c | ||
|
|
1d2d5fe6ae | ||
|
|
6f81e84bd4 | ||
|
|
6cf698badd | ||
|
|
94ce376a76 | ||
|
|
b26eec5daf | ||
|
|
3370ae04cb | ||
|
|
c72fab15b4 | ||
|
|
592a6aef0b | ||
|
|
2b21f92347 | ||
|
|
077bcf1c82 | ||
|
|
3989e3df18 | ||
|
|
f3ed6659c3 | ||
|
|
60f736f20f | ||
|
|
b81bf1e138 | ||
|
|
e563450cb6 | ||
|
|
d6a853bd60 | ||
|
|
cc60ad1946 | ||
|
|
2d2833f2e4 | ||
|
|
fd3cd2c26a | ||
|
|
0625954bb7 | ||
|
|
7700970c93 | ||
|
|
c5205a89ee | ||
|
|
144f12525e | ||
|
|
eab6741afe | ||
|
|
e9e533b0cb | ||
|
|
e44704dc82 | ||
|
|
e9d5d42ea9 | ||
|
|
f54af8b973 | ||
|
|
ee456481cb | ||
|
|
d322a8033e | ||
|
|
812b26b668 | ||
|
|
a822692c26 | ||
|
|
7ae0b8ef06 | ||
|
|
6f0304f90e | ||
|
|
c6bb1f5d0d | ||
|
|
7ceedc1d47 | ||
|
|
3a600b4684 | ||
|
|
dc7d4e1134 | ||
|
|
595576b151 | ||
|
|
c4e129509b | ||
|
|
62024217b7 | ||
|
|
655eaa36ce | ||
|
|
686d6e9834 | ||
|
|
ef4c8f53c5 | ||
|
|
2d976827dd | ||
|
|
0741fd5b1d | ||
|
|
f64d3ad7de | ||
|
|
db6110e996 | ||
|
|
015921522d | ||
|
|
75fcedb030 | ||
|
|
c7a32bb83d | ||
|
|
f78f707935 | ||
|
|
3900366a6b | ||
|
|
17dd26e1ca | ||
|
|
9ab3683148 | ||
|
|
2cc8ecbb90 | ||
|
|
94e3c30054 | ||
|
|
669db1a293 | ||
|
|
cf8fcada6e | ||
|
|
287987b8fe | ||
|
|
a99da7b94e | ||
|
|
b07b1f0b51 | ||
|
|
dba2b052a6 | ||
|
|
0321f3b55f | ||
|
|
85d845c5ce | ||
|
|
95e9fe7693 | ||
|
|
8cd87236c9 | ||
|
|
f8b4c0ee1d | ||
|
|
d5515c9d0e | ||
|
|
65032389a4 | ||
|
|
5942f1a8f9 | ||
|
|
36a6d124aa | ||
|
|
0afb1d9e24 | ||
|
|
2de3c6d67b | ||
|
|
b498ad800c | ||
|
|
d48749f797 | ||
|
|
94e9101ce0 | ||
|
|
16a5c2f676 | ||
|
|
5ec46bcdfb | ||
|
|
a77b181e32 | ||
|
|
5a09eeea27 | ||
|
|
e07b6fdce7 | ||
|
|
23f20ceaf8 | ||
|
|
27eaa10873 | ||
|
|
2f9becbac6 | ||
|
|
6cc39e9bdb | ||
|
|
88f066f469 | ||
|
|
dda9d03e54 | ||
|
|
464b232321 | ||
|
|
c5a24eaf70 | ||
|
|
1748aabd69 | ||
|
|
3f5ecbe007 | ||
|
|
b14e034344 | ||
|
|
d0213e466c | ||
|
|
0b156f1d26 | ||
|
|
fe3a3ad8b5 | ||
|
|
c50a61d52a | ||
|
|
de4323f949 | ||
|
|
d1a02e6ddc | ||
|
|
5fd330b35e | ||
|
|
1234fe9c1c | ||
|
|
a44510d1df | ||
|
|
0d0e519e68 | ||
|
|
950cb9a717 | ||
|
|
91e2b427ef | ||
|
|
fc7e35e1cd | ||
|
|
24bf4c2cba | ||
|
|
1c01899799 | ||
|
|
678a19ce3b | ||
|
|
5711159e68 | ||
|
|
db9057f5a8 | ||
|
|
096ecc1d14 | ||
|
|
fc0498b3a8 | ||
|
|
4e4a3489ef | ||
|
|
d6640832f1 | ||
|
|
ef4f8ec713 | ||
|
|
c0481e7207 | ||
|
|
afa4fa6510 | ||
|
|
68caac1abd | ||
|
|
f014b29fc4 | ||
|
|
66262b14ad | ||
|
|
fe71a58f28 | ||
|
|
d3736ccb17 | ||
|
|
f045ce4386 | ||
|
|
1bfb01d5f5 | ||
|
|
83e4023dc0 | ||
|
|
2641cd6737 | ||
|
|
d325a3d247 | ||
|
|
e2cc3e1a33 | ||
|
|
647fd951ec | ||
|
|
7f0474e9de | ||
|
|
4a7f0849ab | ||
|
|
7059bead84 | ||
|
|
f7612c4a49 | ||
|
|
3e36428568 | ||
|
|
07c6752cf7 | ||
|
|
a6e4619378 | ||
|
|
07d336ddf0 | ||
|
|
20ffcb68b6 | ||
|
|
e1201fc6e2 | ||
|
|
1e2b087601 | ||
|
|
5dc410a999 | ||
|
|
c498af29aa | ||
|
|
ad03d9543b | ||
|
|
b73e42346e | ||
|
|
509ca11d76 | ||
|
|
2ca3c50463 | ||
|
|
2e3cb77702 | ||
|
|
06c761e9ac | ||
|
|
dbeaafbe99 | ||
|
|
03d9525eb6 | ||
|
|
bfd13d58e0 | ||
|
|
fdf8f35049 | ||
|
|
d8272b8812 | ||
|
|
b7037e3cf7 | ||
|
|
21afcd8767 | ||
|
|
25273485d9 | ||
|
|
abef04c637 | ||
|
|
d930a25d94 | ||
|
|
de1018d7a6 | ||
|
|
6d3e54369c | ||
|
|
197c49d740 | ||
|
|
0631bd9d89 | ||
|
|
815d3e0f61 | ||
|
|
f945dbc0fb | ||
|
|
c1c163d78c | ||
|
|
21ce0a4b28 | ||
|
|
00dc86917e | ||
|
|
218772c296 | ||
|
|
c1e13177a1 | ||
|
|
49a897c3b3 | ||
|
|
09c9e16cb1 | ||
|
|
dd162c3aa0 | ||
|
|
529cec5653 | ||
|
|
627ffb0f82 | ||
|
|
ab7a21e017 | ||
|
|
8280e04b23 | ||
|
|
7f30a2ae1b | ||
|
|
fab2c8699c | ||
|
|
98af5e4ddb | ||
|
|
895580c724 | ||
|
|
e4649b41e1 | ||
|
|
63d0bdc863 | ||
|
|
717b0a6514 | ||
|
|
53ac163a3e | ||
|
|
d4ae40ae99 | ||
|
|
02741dc64f | ||
|
|
d71cbae9df | ||
|
|
c068570192 | ||
|
|
4868bf13a8 | ||
|
|
591c35d51b | ||
|
|
d0d060d321 | ||
|
|
408faf8a66 | ||
|
|
90947a608f | ||
|
|
6a32981ba5 | ||
|
|
ea09825d10 | ||
|
|
ae8a377f26 | ||
|
|
7f60be9814 | ||
|
|
1991aa388b | ||
|
|
0ce2af7a0d | ||
|
|
0cd883e2a1 | ||
|
|
f40677c7a4 | ||
|
|
314e56b7b9 | ||
|
|
dfa95002aa | ||
|
|
800d706935 | ||
|
|
d8528ebbbe | ||
|
|
0b8f045d36 | ||
|
|
7bf8337854 | ||
|
|
79c652e115 | ||
|
|
55ece14f42 | ||
|
|
25d3f948d3 | ||
|
|
d59862eb5e | ||
|
|
6235e2140e | ||
|
|
8705562559 | ||
|
|
8c510a8d5b | ||
|
|
e248cbcc7d | ||
|
|
9c93cc7d6f | ||
|
|
cda3752838 | ||
|
|
19a0c8b462 | ||
|
|
34f5e923ef | ||
|
|
4870d9a31b | ||
|
|
6a7bd0e330 | ||
|
|
88b6168f1c | ||
|
|
2966be41ba | ||
|
|
607175f02a | ||
|
|
5276abb0fb | ||
|
|
c3b41d79a2 | ||
|
|
530b5ff58d | ||
|
|
5357957fe1 | ||
|
|
9313bfa155 | ||
|
|
9c6046455e | ||
|
|
df763bdb98 | ||
|
|
7b7b0fb5f2 | ||
|
|
f8a509ffb3 | ||
|
|
b9115b4429 | ||
|
|
7bf561d440 | ||
|
|
b105403dc7 | ||
|
|
a1e4b15bcc | ||
|
|
8fb72afac9 | ||
|
|
6e51ed3c53 | ||
|
|
4b99d7127f | ||
|
|
a878e09f0f | ||
|
|
8b82e9c40f | ||
|
|
a53ca58e56 | ||
|
|
380f7bc417 | ||
|
|
4fd1771f71 | ||
|
|
a5f23a0342 | ||
|
|
5a18e69425 | ||
|
|
864847a6fe | ||
|
|
900d5a4ce0 | ||
|
|
e0345732c0 | ||
|
|
0db3d03c3c | ||
|
|
1c00e3cf2c | ||
|
|
6692f5b2aa | ||
|
|
6912cfe98a | ||
|
|
46c6b0d29d | ||
|
|
3e75de9709 | ||
|
|
1cb7b9876f | ||
|
|
b4060a4789 | ||
|
|
2db26d304f | ||
|
|
6d32cf4a11 | ||
|
|
ff219da3eb | ||
|
|
bc4d628940 | ||
|
|
7e5342e9f0 | ||
|
|
510261cb05 | ||
|
|
0085ed894f | ||
|
|
5b953228b4 | ||
|
|
f2e55d57cc | ||
|
|
71b9b2ecf9 | ||
|
|
114208533a | ||
|
|
f33a01e8c8 | ||
|
|
d84650fbe5 | ||
|
|
2ab3fb5dd0 | ||
|
|
c53b23cff0 | ||
|
|
fd4cd3e8f1 | ||
|
|
98b158c783 | ||
|
|
fec0028e12 | ||
|
|
c623ec8a2d | ||
|
|
ada5c245a8 | ||
|
|
bdbe5d1080 | ||
|
|
46d1889344 | ||
|
|
e967db4a3c | ||
|
|
41d7b3244b | ||
|
|
4c822e8375 | ||
|
|
99574ebfc6 | ||
|
|
a6972714b7 | ||
|
|
8a90e32f1b | ||
|
|
6b0b984909 | ||
|
|
ffd175c705 | ||
|
|
12b48edada | ||
|
|
53cdf6ab41 | ||
|
|
401e45d63e | ||
|
|
9e14e8553f | ||
|
|
ff0e039599 | ||
|
|
9d16df5aa8 | ||
|
|
00ee82aba6 | ||
|
|
62db8cd9b0 | ||
|
|
d425358181 | ||
|
|
a27fc8d9d9 | ||
|
|
6510b15704 | ||
|
|
abd230dcdd | ||
|
|
a8f4f74a76 | ||
|
|
68f1c03a85 | ||
|
|
2d4861454c | ||
|
|
8f9ce275c8 | ||
|
|
af22bb1495 | ||
|
|
5ab2c85e97 | ||
|
|
f71cfdf8ef | ||
|
|
96151ec0f0 | ||
|
|
ad8a8913d9 | ||
|
|
fd2948f045 | ||
|
|
39931a5284 | ||
|
|
13903d7c46 | ||
|
|
7bd6c70318 | ||
|
|
d5d2f6a822 | ||
|
|
3cc20d7962 | ||
|
|
a5b84eb9fe | ||
|
|
8a7210cad1 | ||
|
|
84f8312b86 | ||
|
|
a0703fd9e1 | ||
|
|
3f2bdc096d | ||
|
|
37480fb617 | ||
|
|
77f97ad2ad | ||
|
|
5c8888d2ed | ||
|
|
b587d835e8 | ||
|
|
1a42d62d3a | ||
|
|
e3291b0cb1 | ||
|
|
40ee29fb99 | ||
|
|
793a6a6d7e | ||
|
|
7b89baceaa | ||
|
|
c33b93793f | ||
|
|
9558baa353 | ||
|
|
81e711517d | ||
|
|
6556cb0db9 | ||
|
|
4defd8b75c | ||
|
|
9dc5dca209 | ||
|
|
9067469f7c | ||
|
|
cf5db73117 | ||
|
|
03c4a979c8 | ||
|
|
5abd466b5d | ||
|
|
5491a51daa | ||
|
|
76dd769085 | ||
|
|
a4562c5720 | ||
|
|
f864698696 | ||
|
|
21329b8440 | ||
|
|
08b2138c7e | ||
|
|
8ff72f0728 | ||
|
|
acd1ea9909 | ||
|
|
1fde2ba468 | ||
|
|
09a0207e55 | ||
|
|
ede6b7db6a | ||
|
|
24875f34d0 | ||
|
|
41e9754338 | ||
|
|
d031943f2a | ||
|
|
d426588496 | ||
|
|
81ea6f0258 | ||
|
|
7c2b9478d5 | ||
|
|
33dfaf7da1 | ||
|
|
dc444b9ca0 | ||
|
|
40829b5242 | ||
|
|
ca6ed7f00f | ||
|
|
4b566c26a3 | ||
|
|
30b3f34d91 | ||
|
|
9647587447 | ||
|
|
3e64274f6b | ||
|
|
ce2071e1e6 | ||
|
|
0eb5f93e96 | ||
|
|
6e4710b717 | ||
|
|
9b23e33c36 | ||
|
|
d9db03d606 | ||
|
|
5f1c3fa208 | ||
|
|
0aa7f13c32 | ||
|
|
5f5babe7fe | ||
|
|
8fae2dcc26 | ||
|
|
d4250fc2c7 | ||
|
|
ad90a06a39 | ||
|
|
2f085ea5f5 | ||
|
|
2f979a8cde | ||
|
|
198b80f560 | ||
|
|
9e842f1628 | ||
|
|
7919b92d28 | ||
|
|
d9a8bab631 | ||
|
|
c07727eed0 | ||
|
|
653d808417 | ||
|
|
0552d49fce | ||
|
|
00cdcef36a | ||
|
|
512f5657f7 | ||
|
|
61eb361d26 | ||
|
|
f7aa4e108a | ||
|
|
f7300c7a27 | ||
|
|
058690aad7 | ||
|
|
4b892e9eb9 | ||
|
|
662246b9e2 | ||
|
|
1f3f82eedc | ||
|
|
58d9e9cd59 | ||
|
|
a827f0dd55 | ||
|
|
2f7d2fa3ad | ||
|
|
1b936f6ffb | ||
|
|
f0442960a2 | ||
|
|
e9fbd2ccfd | ||
|
|
35c41208f5 | ||
|
|
e4683a3074 | ||
|
|
3de003a8e7 | ||
|
|
5fd8eec42c | ||
|
|
c020992e4d | ||
|
|
609caad7a4 | ||
|
|
a55e738dfa | ||
|
|
f23ecfbc84 | ||
|
|
97d5698e0c | ||
|
|
989ded6052 | ||
|
|
36e1f7b4fb | ||
|
|
b80c4bae6b | ||
|
|
ea053467b5 | ||
|
|
40cfd0576f | ||
|
|
e8c0619226 | ||
|
|
4b8d6a3223 | ||
|
|
e30b538cd3 | ||
|
|
46d891b745 | ||
|
|
3d394c2f95 | ||
|
|
7e753c2596 | ||
|
|
08de6d487a | ||
|
|
87ea37248f | ||
|
|
f902136b6a | ||
|
|
75943a57b2 | ||
|
|
1ef8d61f36 | ||
|
|
756e4dd068 | ||
|
|
6065f5e52b | ||
|
|
2eee4c5176 | ||
|
|
78ca912434 | ||
|
|
c11a20cb4f | ||
|
|
fb1f51241d | ||
|
|
2171ebe2da | ||
|
|
db26700352 | ||
|
|
09dc1f9e1e | ||
|
|
49cf53644a | ||
|
|
44c5cdf453 | ||
|
|
a483243c52 | ||
|
|
b99346e6ca | ||
|
|
2dc818e4d2 | ||
|
|
c715569d1d | ||
|
|
f80474f590 | ||
|
|
19b21cafcd | ||
|
|
5780b4503e | ||
|
|
40888e9486 | ||
|
|
8bb22b2ad8 | ||
|
|
6a7d08ecc2 | ||
|
|
f13c4e6aca | ||
|
|
54662674e6 | ||
|
|
dbbf390983 | ||
|
|
7dc649ede6 | ||
|
|
f5c0bf3b60 | ||
|
|
152c7c452c | ||
|
|
bef436400d | ||
|
|
aff89c6f5c | ||
|
|
05a1d64fbb | ||
|
|
a8d8c0690d | ||
|
|
a7c17a329a | ||
|
|
3931dc795f | ||
|
|
a1c229784f | ||
|
|
965ea93a61 | ||
|
|
31ebbf348f | ||
|
|
599b7301c8 | ||
|
|
03cecb6f1c | ||
|
|
f34431a506 | ||
|
|
6ad66fb2d7 | ||
|
|
53107d3b71 | ||
|
|
0930d70134 | ||
|
|
d5e76471ae | ||
|
|
f1c1f56b12 | ||
|
|
fc8c28722f | ||
|
|
a76b88da08 | ||
|
|
c11912a8ec | ||
|
|
d015e09c92 | ||
|
|
224727c14d | ||
|
|
bd4d5d7c47 | ||
|
|
15520fe77d | ||
|
|
3b08efa2ad | ||
|
|
bb55430f75 | ||
|
|
88076a0050 | ||
|
|
25a4091fa8 | ||
|
|
4d06271a29 | ||
|
|
600cbee7d4 | ||
|
|
13c24a310d | ||
|
|
8c036ec671 | ||
|
|
bb8b6348ec | ||
|
|
c0488d9ecf | ||
|
|
e0568a19d5 | ||
|
|
98177f27ba | ||
|
|
aa8968ecf2 | ||
|
|
ed021431e9 | ||
|
|
31f9bb566b | ||
|
|
a7036475c3 | ||
|
|
e5da4c2b4d | ||
|
|
0b104a59fe | ||
|
|
68d3ea9c42 | ||
|
|
35bf340401 | ||
|
|
f0896ceba7 | ||
|
|
1291dd534b | ||
|
|
0b61ae11ec | ||
|
|
a02b4c9592 | ||
|
|
42a64a2379 | ||
|
|
4bd4d24802 | ||
|
|
f45ea0a1cf | ||
|
|
918d6dbf56 | ||
|
|
7428590457 | ||
|
|
559ad5c5e2 | ||
|
|
3e18b92ccc | ||
|
|
e81652c2fc | ||
|
|
6b4b708fa7 | ||
|
|
22e8b0e419 | ||
|
|
12fbf8cede | ||
|
|
2c0b82ec1a | ||
|
|
2a29c6c214 | ||
|
|
edeb8736f1 | ||
|
|
7afa4f8316 | ||
|
|
0aab36c5a7 | ||
|
|
cb8ffbac73 | ||
|
|
74b522af71 | ||
|
|
c2b9ddc5b8 |
24
.github/ISSUE_TEMPLATE/bug_report.md
vendored
24
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,24 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Version**
|
||||
Tell us what version you're running. Find out using the debug menu (Ctrl-M, Debug -> Version Text)
|
||||
If you send a screenshot just enable it beforehand.
|
||||
10
.github/workflows/build-cmake-conan.yml
vendored
10
.github/workflows/build-cmake-conan.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: re3 conan+cmake
|
||||
name: reLCS conan+cmake
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
@@ -96,13 +96,13 @@ jobs:
|
||||
conan export re3mss miles-sdk/master@
|
||||
- name: "Download/build dependencies (conan install)"
|
||||
run: |
|
||||
conan install ${{ github.workspace }} re3/master@ -if build -o re3:audio=${{ matrix.audio }} -o librw:platform=${{ matrix.platform }} -o librw:gl3_gfxlib=${{ matrix.gl3_gfxlib || 'glfw' }} --build missing -pr:h ./host_profile -pr:b default -s re3:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
||||
conan install ${{ github.workspace }} reLCS/master@ -if build -o reLCS:audio=${{ matrix.audio }} -o librw:platform=${{ matrix.platform }} -o librw:gl3_gfxlib=${{ matrix.gl3_gfxlib || 'glfw' }} --build missing -pr:h ./host_profile -pr:b default -s reLCS:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
||||
env:
|
||||
CONAN_SYSREQUIRES_MODE: enabled
|
||||
- name: "Build re3 (conan build)"
|
||||
- name: "Build reLCS (conan build)"
|
||||
run: |
|
||||
conan build ${{ github.workspace }} -if build -bf build -pf package
|
||||
- name: "Package re3 (conan package)"
|
||||
- name: "Package reLCS (conan package)"
|
||||
run: |
|
||||
conan package ${{ github.workspace }} -if build -bf build -pf package
|
||||
- name: "Create binary package (cpack)"
|
||||
@@ -113,5 +113,5 @@ jobs:
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "${{ matrix.os }}-${{ matrix.platform }}"
|
||||
path: build/*.zip
|
||||
path: build/*.tar.xz
|
||||
if-no-files-found: error
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
name: re3 cmake devkitA64 (Nintendo Switch)
|
||||
|
||||
name: reLCS cmake devkitA64 (Nintendo Switch)
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
@@ -14,7 +15,7 @@ jobs:
|
||||
submodules: 'true'
|
||||
- name: "Build files"
|
||||
run: |
|
||||
/opt/devkitpro/portlibs/switch/bin/aarch64-none-elf-cmake -S. -Bbuild -DRE3_AUDIO=OAL -DLIBRW_PLATFORM=GL3 -DLIBRW_GL3_GFXLIB=GLFW -DRE3_WITH_OPUS=False -DRE3_VENDORED_LIBRW=True -DRE3_INSTALL=True
|
||||
/opt/devkitpro/portlibs/switch/bin/aarch64-none-elf-cmake -S. -Bbuild -DREVC_AUDIO=OAL -DLIBRW_PLATFORM=GL3 -DLIBRW_GL3_GFXLIB=GLFW -DREVC_WITH_OPUS=False -DREVC_VENDORED_LIBRW=True -DREVC_INSTALL=True
|
||||
cmake --build build --parallel
|
||||
- name: "Create binary package (cpack)"
|
||||
working-directory: ./build
|
||||
@@ -24,5 +25,5 @@ jobs:
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "switch-gl3"
|
||||
path: build/*.zip
|
||||
path: build/*.tar.xz
|
||||
if-no-files-found: error
|
||||
@@ -1,4 +1,4 @@
|
||||
name: re3 premake amd64
|
||||
name: reLCS premake amd64
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -37,14 +37,14 @@ jobs:
|
||||
./premake5 vs2019 --with-librw --no-full-paths --glfwdir64=${{env.GLFW_BASE}}
|
||||
- name: Build
|
||||
run: |
|
||||
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||
msbuild -m build/reLCS.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||
# - name: Pack artifacts
|
||||
# run: |
|
||||
# 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||
# 7z a reLCS_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||
- name: Move binaries to gamefiles
|
||||
run: |
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/reLCS.exe ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/reLCS.pdb ./gamefiles/
|
||||
- name: Move dynamic dependencies to gamefiles
|
||||
run: |
|
||||
mv ./vendor/mpg123/dist/Win64/libmpg123-0.dll ./gamefiles/
|
||||
@@ -52,12 +52,12 @@ jobs:
|
||||
- name: Upload artifact to actions
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
||||
name: reLCS_${{matrix.buildtype}}_${{matrix.platform}}
|
||||
path: ./gamefiles/*
|
||||
# - name: Upload artifact to Bintray
|
||||
# uses: hpcsc/upload-bintray-docker-action@v1
|
||||
# with:
|
||||
# repository: re3
|
||||
# repository: reLCS
|
||||
# package: ${{matrix.buildtype}}_${{matrix.platform}}
|
||||
# version: 1.0-$(echo ${GITHUB_SHA}
|
||||
# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
|
||||
@@ -1,4 +1,4 @@
|
||||
name: re3 premake x86
|
||||
name: reLCS premake x86
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [win-x86-librw_d3d9-mss, win-x86-librw_gl3_glfw-mss, win-x86-librw_d3d9-oal, win-x86-librw_gl3_glfw-oal]
|
||||
buildtype: [Debug, Release, Vanilla]
|
||||
buildtype: [Debug, Release]
|
||||
steps:
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.0.2
|
||||
@@ -37,14 +37,14 @@ jobs:
|
||||
./premake5 vs2019 --with-librw --no-full-paths --glfwdir32=${{env.GLFW_BASE}}
|
||||
- name: Build
|
||||
run: |
|
||||
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||
msbuild -m build/reLCS.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||
# - name: Pack artifacts
|
||||
# run: |
|
||||
# 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||
# 7z a reLCS_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||
- name: Move binaries to gamefiles
|
||||
run: |
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/reLCS.exe ./gamefiles/
|
||||
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/reLCS.pdb ./gamefiles/
|
||||
- if: contains(matrix.platform, 'oal')
|
||||
name: Move dynamic dependencies to gamefiles
|
||||
run: |
|
||||
@@ -53,12 +53,12 @@ jobs:
|
||||
- name: Upload artifact to actions
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
||||
name: reLCS_${{matrix.buildtype}}_${{matrix.platform}}
|
||||
path: ./gamefiles/*
|
||||
# - name: Upload artifact to Bintray
|
||||
# uses: hpcsc/upload-bintray-docker-action@v1
|
||||
# with:
|
||||
# repository: re3
|
||||
# repository: reLCS
|
||||
# package: ${{matrix.buildtype}}_${{matrix.platform}}
|
||||
# version: 1.0-$(echo ${GITHUB_SHA}
|
||||
# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -355,8 +355,8 @@ vendor/glfw-3.3.2.bin.WIN64/
|
||||
|
||||
sdk/
|
||||
|
||||
codewarrior/re3.mcp
|
||||
codewarrior/re3_Data/
|
||||
codewarrior/reVC.mcp
|
||||
codewarrior/reVC_Data/
|
||||
codewarrior/Release/
|
||||
codewarrior/Debug/
|
||||
|
||||
|
||||
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@@ -20,9 +20,9 @@
|
||||
"src/peds",
|
||||
"src/renderer",
|
||||
"src/rw",
|
||||
"src/save/",
|
||||
"src/skel/",
|
||||
"src/skel/glfw",
|
||||
"src/save",
|
||||
"src/save/glfw",
|
||||
"src/skel",
|
||||
"src/text",
|
||||
"src/vehicles",
|
||||
"src/weapons",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
set(EXECUTABLE re3)
|
||||
set(PROJECT RE3)
|
||||
set(EXECUTABLE reLCS)
|
||||
set(PROJECT RELCS)
|
||||
|
||||
project(${EXECUTABLE} C CXX)
|
||||
set(${PROJECT}_AUTHOR "${PROJECT} Team")
|
||||
@@ -11,13 +11,14 @@ include(GetGitRevisionDescription)
|
||||
get_git_head_revision(GIT_REFSPEC GIT_SHA1 "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
|
||||
message(STATUS "Building ${CMAKE_PROJECT_NAME} GIT SHA1: ${GIT_SHA1}")
|
||||
|
||||
|
||||
if(NINTENDO_SWITCH)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/nx")
|
||||
include(NXFunctions)
|
||||
endif()
|
||||
|
||||
if(NOT COMMAND re3_platform_target)
|
||||
function(re3_platform_target)
|
||||
if(NOT COMMAND reVC_platform_target)
|
||||
function(reVC_platform_target)
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
@@ -94,6 +95,6 @@ if(${PROJECT}_INSTALL)
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
set(CPACK_GENERATOR "ZIP")
|
||||
set(CPACK_GENERATOR "TXZ")
|
||||
include(CPack)
|
||||
endif()
|
||||
|
||||
211
README.md
211
README.md
@@ -1,204 +1,37 @@
|
||||
<img src="https://github.com/GTAmodding/re3/blob/master/res/images/logo_1024.png?raw=true" alt="re3 logo" width="200">
|
||||
|
||||
[](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=master)
|
||||
# reLCS
|
||||
[](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=lcs)
|
||||
<a href="https://discord.gg/RFNbjsUMGg"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
||||
|
||||
## Intro
|
||||
|
||||
In this repository you'll find the fully reversed source code for GTA III ([master](https://github.com/GTAmodding/re3/tree/master/) branch) and GTA VC ([miami](https://github.com/GTAmodding/re3/tree/miami/) branch).
|
||||
The aim of this project is to reverse GTA Liberty City Stories.
|
||||
|
||||
It has been tested and works on Windows, Linux, MacOS and FreeBSD, on x86, amd64, arm and arm64.\
|
||||
Rendering is handled either by original RenderWare (D3D8)
|
||||
or the reimplementation [librw](https://github.com/aap/librw) (D3D9, OpenGL 2.1 or above, OpenGL ES 2.0 or above).\
|
||||
Audio is done with MSS (using dlls from original GTA) or OpenAL.
|
||||
## How can I try it?
|
||||
|
||||
The project has also been ported to the [Nintendo Switch](https://github.com/AGraber/re3-nx/),
|
||||
[Playstation Vita](https://github.com/Rinnegatamante/re3) and
|
||||
[Nintendo Wii U](https://github.com/GaryOderNichts/re3-wiiu/).
|
||||
- reLCS requires game assets to work.
|
||||
- Build reLCS or download it from one of the above links (Debug or Release).
|
||||
- (Optional) If you want to use optional features, copy the files in /gamefiles folder to your game root folder.
|
||||
- Move reLCS.exe to GTA LCS directory and run it.
|
||||
|
||||
We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us.
|
||||
## Preparing the environment for building
|
||||
|
||||
## Installation
|
||||
You may want to point GTA_LCS_RE_DIR environment variable to GTA LCS root folder if you want executable to be moved there via post-build script.
|
||||
|
||||
- re3 requires PC game assets to work, so you **must** own [a copy of GTA III](https://store.steampowered.com/app/12100/Grand_Theft_Auto_III/).
|
||||
- Build re3 or download the latest build:
|
||||
- [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_x86/master/re3_Release_win-x86-librw_d3d9-mss.zip)
|
||||
- [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_d3d9-oal.zip)
|
||||
- [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_gl3_glfw-oal.zip)
|
||||
- [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/ubuntu-18.04-gl3.zip)
|
||||
- [MacOS 64bit x86-64](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/macos-latest-gl3.zip)
|
||||
- Extract the downloaded zip over your GTA 3 directory and run re3. The zip includes the binary, updated and additional gamefiles and in case of OpenAL the required dlls.
|
||||
- For Linux, proceed: [Building on Linux](https://github.com/GTAmodding/re3/wiki/Building-on-Linux)
|
||||
- For FreeBSD, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)
|
||||
- For Windows, assuming you have Visual Studio:
|
||||
- Clone the repo using the argument `--recursive`.
|
||||
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
|
||||
- Open the project via Visual Studio
|
||||
|
||||
**If you use 64-bit D3D9**: We don't ship 64-bit Dx9 SDK. You need to download it from Microsoft if you don't have it(although it should come pre-installed after some Windows version)
|
||||
|
||||
## Screenshots
|
||||
There are various settings at the very bottom of [config.h](https://github.com/GTAmodding/re3/tree/lcs/src/core/config.h), you may want to take a look there. i.e. FIX_BUGS define fixes the bugs we've come across.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
> :information_source: **If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
|
||||
|
||||
## Improvements
|
||||
|
||||
We have implemented a number of changes and improvements to the original game.
|
||||
They can be configured in `core/config.h`.
|
||||
Some of them can be toggled at runtime, some cannot.
|
||||
|
||||
* Fixed a lot of smaller and bigger bugs
|
||||
* User files (saves and settings) stored in GTA root directory
|
||||
* Settings stored in re3.ini file instead of gta3.set
|
||||
* Debug menu to do and change various things (Ctrl-M to open)
|
||||
* Debug camera (Ctrl-B to toggle)
|
||||
* Rotatable camera
|
||||
* XInput controller support (Windows)
|
||||
* No loading screens between islands ("map memory usage" in menu)
|
||||
* Skinned ped support (models from Xbox or Mobile)
|
||||
* Rendering
|
||||
* Widescreen support (properly scaled HUD, Menu and FOV)
|
||||
* PS2 MatFX (vehicle reflections)
|
||||
* PS2 alpha test (better rendering of transparency)
|
||||
* PS2 particles
|
||||
* Xbox vehicle rendering
|
||||
* Xbox world lightmap rendering (needs Xbox map)
|
||||
* Xbox ped rim light
|
||||
* Xbox screen rain droplets
|
||||
* More customizable colourfilter
|
||||
* Menu
|
||||
* Map
|
||||
* More options
|
||||
* Controller configuration menu
|
||||
* ...
|
||||
* Can load DFFs and TXDs from other platforms, possibly with a performance penalty
|
||||
* ...
|
||||
|
||||
## To-Do
|
||||
|
||||
The following things would be nice to have/do:
|
||||
|
||||
* Fix physics for high FPS
|
||||
* Improve performance on lower end devices, especially the OpenGL layer on the Raspberry Pi (if you have experience with this, please get in touch)
|
||||
* Compare code with PS2 code (tedious, no good decompiler)
|
||||
* [PS2 port](https://github.com/GTAmodding/re3/wiki/PS2-port)
|
||||
* Xbox port (not quite as important)
|
||||
* reverse remaining unused/debug functions
|
||||
* compare CodeWarrior build with original binary for more accurate code (very tedious)
|
||||
|
||||
## Modding
|
||||
|
||||
Asset modifications (models, texture, handling, script, ...) should work the same way as with original GTA for the most part.
|
||||
|
||||
Mods that make changes to the code (dll/asi, CLEO, limit adjusters) will *not* work.
|
||||
Some things these mods do are already implemented in re3 (much of SkyGFX, GInput, SilentPatch, Widescreen fix),
|
||||
others can easily be achieved (increasing limis, see `config.h`),
|
||||
others will simply have to be rewritten and integrated into the code directly.
|
||||
Sorry for the inconvenience.
|
||||
|
||||
## Building from Source
|
||||
|
||||
When using premake, you may want to point GTA_III_RE_DIR environment variable to GTA3 root folder if you want the executable to be moved there via post-build script.
|
||||
|
||||
Clone the repository with `git clone --recursive https://github.com/GTAmodding/re3.git`. Then `cd re3` into the cloned repository.
|
||||
|
||||
<details><summary>Linux Premake</summary>
|
||||
|
||||
For Linux using premake, proceed: [Building on Linux](https://github.com/GTAmodding/re3/wiki/Building-on-Linux)
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>Linux Conan</summary>
|
||||
|
||||
Install python and conan, and then run build.
|
||||
```
|
||||
conan export vendor/librw librw/master@
|
||||
mkdir build
|
||||
cd build
|
||||
conan install .. re3/master@ -if build -o re3:audio=openal -o librw:platform=gl3 -o librw:gl3_gfxlib=glfw --build missing -s re3:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
||||
conan build .. -if build -bf build -pf package
|
||||
```
|
||||
</details>
|
||||
|
||||
<details><summary>MacOS Premake</summary>
|
||||
|
||||
For MacOS using premake, proceed: [Building on MacOS](https://github.com/GTAmodding/re3/wiki/Building-on-MacOS)
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>FreeBSD</summary>
|
||||
|
||||
For FreeBSD using premake, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>Windows</summary>
|
||||
|
||||
Assuming you have Visual Studio 2015/2017/2019:
|
||||
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
|
||||
- Open build/re3.sln with Visual Studio and compile the solution.
|
||||
|
||||
Microsoft recently discontinued its downloads of the DX9 SDK. You can download an archived version here: https://archive.org/details/dxsdk_jun10
|
||||
|
||||
**If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
|
||||
</details>
|
||||
|
||||
> :information_source: premake has an `--with-lto` option if you want the project to be compiled with Link Time Optimization.
|
||||
|
||||
> :information_source: There are various settings in [config.h](https://github.com/GTAmodding/re3/tree/master/src/core/config.h), you may want to take a look there.
|
||||
|
||||
> :information_source: re3 uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw.
|
||||
|
||||
If you feel the need, you can also use CodeWarrior 7 to compile re3 using the supplied codewarrior/re3.mcp project - this requires the original RW33 libraries, and the DX8 SDK. The build is unstable compared to the MSVC builds though, and is mostly meant to serve as a reference.
|
||||
> :information_source: **Did you notice librw?** reLCS uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of reLCS, but you also can use LIBRW enviorenment variable to specify path to your own librw.
|
||||
|
||||
## Contributing
|
||||
As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are **completely** reversed code from original binaries.
|
||||
Please read the [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) Document
|
||||
|
||||
We **don't** accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.
|
||||
|
||||
We accept only these kinds of PRs;
|
||||
|
||||
- A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
|
||||
- Game, UI or UX bug fixes (if it's a fix to original code, it should be behind FIX_BUGS)
|
||||
- Platform-specific and/or unused code that's not been reversed yet
|
||||
- Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
|
||||
- A new cross-platform skeleton/compatibility layer, or improvements to them
|
||||
- Translation fixes, for languages original game supported
|
||||
- Code that increase maintainability
|
||||
|
||||
We have a [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) document that isn't followed or enforced very well.
|
||||
|
||||
Do not use features from C++11 or later.
|
||||
|
||||
|
||||
## History
|
||||
|
||||
re3 was started sometime in the spring of 2018,
|
||||
initially as a way to test reversed collision and physics code
|
||||
inside the game.
|
||||
This was done by replacing single functions of the game
|
||||
with their reversed counterparts using a dll.
|
||||
|
||||
After a bit of work the project lay dormant for about a year
|
||||
and was picked up again and pushed to github in May 2019.
|
||||
At the time I (aap) had reversed around 10k lines of code and estimated
|
||||
the final game to have around 200-250k.
|
||||
Others quickly joined the effort (Fire_Head, shfil, erorcun and Nick007J
|
||||
in time order, and Serge a bit later) and we made very quick progress
|
||||
throughout the summer of 2019
|
||||
after which the pace slowed down a bit.
|
||||
|
||||
Due to everyone staying home during the start of the Corona pandemic
|
||||
everybody had a lot of time to work on re3 again and
|
||||
we finally got a standalone exe in April 2020 (around 180k lines by then).
|
||||
|
||||
After the initial excitement and fixing and polishing the code further,
|
||||
reVC was started in early May 2020 by starting from re3 code,
|
||||
not by starting from scratch replacing functions with a dll.
|
||||
After a few months of mostly steady progress we considered reVC
|
||||
finished in December.
|
||||
|
||||
Since then we have started reLCS, which is currently work in progress.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
We don't feel like we're in a position to give this code a license.\
|
||||
The code should only be used for educational, documentation and modding purposes.\
|
||||
We do not encourage piracy or commercial use.\
|
||||
Please keep derivate work open source and give proper credit.
|
||||
|
||||
@@ -8,7 +8,7 @@ endif()
|
||||
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".elf")
|
||||
|
||||
function(re3_platform_target TARGET)
|
||||
function(reVC_platform_target TARGET)
|
||||
cmake_parse_arguments(RPT "INSTALL" "" "" ${ARGN})
|
||||
|
||||
get_target_property(TARGET_TYPE "${TARGET}" TYPE)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
18
conanfile.py
18
conanfile.py
@@ -5,8 +5,8 @@ import shutil
|
||||
import textwrap
|
||||
|
||||
|
||||
class Re3Conan(ConanFile):
|
||||
name = "re3"
|
||||
class ReLCSConan(ConanFile):
|
||||
name = "reLCS"
|
||||
version = "master"
|
||||
license = "???" # FIXME: https://github.com/GTAmodding/re3/issues/794
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
@@ -69,10 +69,10 @@ class Re3Conan(ConanFile):
|
||||
raise ConanInvalidConfiguration("Only `glfw` is supported as gl3_gfxlib.")
|
||||
#if not self.options.with_opus:
|
||||
# if not self.options["libsndfile"].with_external_libs:
|
||||
# raise ConanInvalidConfiguration("re3 with opus support requires a libsndfile built with external libs (=ogg/flac/opus/vorbis)")
|
||||
# raise ConanInvalidConfiguration("reLCS with opus support requires a libsndfile built with external libs (=ogg/flac/opus/vorbis)")
|
||||
|
||||
@property
|
||||
def _re3_audio(self):
|
||||
def _reLCS_audio(self):
|
||||
return {
|
||||
"miles": "MSS",
|
||||
"openal": "OAL",
|
||||
@@ -111,16 +111,16 @@ class Re3Conan(ConanFile):
|
||||
include("{}/conanbuildinfo.cmake")
|
||||
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
|
||||
|
||||
add_subdirectory("{}" re3)
|
||||
add_subdirectory("{}" reLCS)
|
||||
""").format(self.install_folder.replace("\\", "/"),
|
||||
self.source_folder.replace("\\", "/")))
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
cmake = CMake(self)
|
||||
cmake.definitions["RE3_AUDIO"] = self._re3_audio
|
||||
cmake.definitions["RE3_WITH_OPUS"] = self.options.with_opus
|
||||
cmake.definitions["RE3_INSTALL"] = True
|
||||
cmake.definitions["RE3_VENDORED_LIBRW"] = False
|
||||
cmake.definitions["RELCS_AUDIO"] = self._reLCS_audio
|
||||
cmake.definitions["RELCS_WITH_OPUS"] = self.options.with_opus
|
||||
cmake.definitions["RELCS_INSTALL"] = True
|
||||
cmake.definitions["RELCS_VENDORED_LIBRW"] = False
|
||||
env = {}
|
||||
if self._os_is_playstation2:
|
||||
cmake.definitions["CMAKE_TOOLCHAIN_FILE"] = self.deps_user_info["ps2dev-cmaketoolchain"].cmake_toolchain_file
|
||||
|
||||
BIN
gamefiles/TEXT/ENGLISH.gxt
Normal file
BIN
gamefiles/TEXT/ENGLISH.gxt
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,363 +0,0 @@
|
||||
; Author: Alexander Roger
|
||||
; Date: 21/12/2000
|
||||
;
|
||||
; Author: Andrzej Madajczyk
|
||||
; Date: 26/02/2001
|
||||
; 14/03/2001 - Alpha (opacity) support added;
|
||||
; 10/05/2001 - Drag/Friction Decceleration changed to constants;
|
||||
; 28/08/2001 - Initial Color Variation added;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; Note! Last line of the file MUST BE ";the end\n", otherwise you'll get parsing error(s) of the file;
|
||||
;
|
||||
;
|
||||
;
|
||||
;Particle Systems Configuration Data:: Format
|
||||
;
|
||||
;
|
||||
;A: Particle Type Name (max 20 chars)
|
||||
;
|
||||
;B/C/D: Render Colouring (r,g,b) (0-255)
|
||||
;
|
||||
;CV: Initial Color Variation (for r,g,b only, in %) (0-100);
|
||||
; (i.e. Color=(100,100,100) and CV=20, then v=random(-20,20), real_color=(100+v, 100+v, 100+v));
|
||||
;
|
||||
;
|
||||
;
|
||||
;B2/C2/D2: Fade Destination Color (r,g,b) (0-255)
|
||||
;
|
||||
;FT: Color Fade Time for (B,C,D)->(B2,C2,D2), (0 for none);
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;E: Default Initial Radius (float)
|
||||
;F: Expansion Rate (float)
|
||||
;
|
||||
;
|
||||
; Color "Fade-to-Black" options:
|
||||
;G: Initial Intensity (0-255)
|
||||
;H: Fade Time (time between fade steps in frames)
|
||||
;I: Fade Amount (-255 to 255) can get brighter or dimmer
|
||||
;
|
||||
; "Fade Alpha" options:
|
||||
;GA: Initial Intensity (0-255)
|
||||
;HA: Fade Time (time between fade steps in frames)
|
||||
;IA: Fade Amount
|
||||
;
|
||||
; "Z Rotation" options:
|
||||
;GZA: Initial Angle (0-1023)
|
||||
;HZA: Change Time (time between steps in frames)
|
||||
;IZA: Angle Change Amount
|
||||
;
|
||||
;GZR: Initial Z Radius
|
||||
;HZR: Change Time (time between steps in frames)
|
||||
;IZR: Z Radius Change Amount
|
||||
;
|
||||
;
|
||||
;J: Animation Speed (0=no animation)(time between steps msec)
|
||||
;K: Start Animation Frame ( 0 -> )
|
||||
;L: Final Animation Frame ( H -> )
|
||||
;
|
||||
;
|
||||
;M: Rotation Speed (0=None,i-deg/frame)
|
||||
;N: Gravitational Acceleration (0=none, float)
|
||||
;O: Drag/Friction Decceleration (int: 0=none, 50=0.50, 80=0.80, 90=0.90, 95=0.95, 96=0.96, 99=0.99)
|
||||
;
|
||||
;P: Default Life-Span of Particle (msec)
|
||||
;
|
||||
;Q: Position Random Error [position += (+/-)rand(a)]
|
||||
;R: Velocity Random Error [velocity += (+/-)rand(b)]
|
||||
;S: Expansion Rate Error [exp_rate += (+)rand(c)]
|
||||
;T: Rotation Rate Error [rot_speed = (+/-)rand(d)]
|
||||
;U: Life-Span Error Shape [shape distribution, e=0->all at default, e->Inf then shape->0] (max=255!!)
|
||||
;V: Trail Length Multiplier [length *= (float) multiplier] (only used if trail flag active)
|
||||
;
|
||||
;CR:Particle Create Range (in meters: 0=no check); if particles are created enough far away from camera, they are deleted (not added to particle system);
|
||||
;
|
||||
;
|
||||
;Z: Flags! Guide: 1=ZCHECK_FIRST, 2=ZCHECK_STEP, 4=DRAW_OPAQUE, 8=SCREEN_TRAIL,
|
||||
; 16=SPEED_TRAIL, 32=RAND_VERT_V, 64=CYCLE_ANIM, 128=DRAW_DARK, 256=VERT_TRAIL
|
||||
; 1024=DRAWTOP2D, 2048=CLIPOUT2D
|
||||
; 4096=ZCHECK_BUMP, 8192=ZCHECK_BUMP_FIRST
|
||||
;
|
||||
;
|
||||
;
|
||||
;default:
|
||||
;GUNFLASH 255 255 255 0 0.1 0.0 255 0 128 0 0 0 0 0.0 1.0 250 0.0 0.0 0.0 0 0 1.0 0
|
||||
;
|
||||
;good idea for fire-smudge?
|
||||
;GUNFLASH 255 255 255 0 1.0 0.0 255 0 32 100 0 3 0 0.0 1.0 400 0.0 0.0 0.0 0 0 1.0 0
|
||||
;
|
||||
;current:
|
||||
;GUNFLASH 255 255 255 0 1.0 0.0 255 0 32 100 0 3 0 0.0 1.0 400 0.0 0.0 0.0 0 0 1.0 0
|
||||
;
|
||||
;
|
||||
;SPARK_SMALL 255 255 128 0 0.005 0.0 255 0 0 0 0 0 0 0.0 1.0 500 0.0 0.05 0.0 0 0 0.5 40
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; A B C D CV B2 C2 D2 FT E F G H I GA HA IA GZA HZA IZA GZR HZR IZR J K L M N O P Q R S T U V CR Z
|
||||
;
|
||||
SPARK 255 128 64 0 0 0 0 0 0.005 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.001 1 300 0.0 0.07 0.0 0 0 1.0 20.0 48
|
||||
SPARK_SMALL 255 255 128 0 0 0 0 0 0.005 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.001 1 500 0.0 0.05 0.0 0 0 0.6 20.0 40
|
||||
;
|
||||
WHEEL_DIRT 8 24 8 0 0 0 0 0 0.05 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.002 1 1000 0.15 0.015 0.0 0 0 1.0 30.0 4
|
||||
;
|
||||
;
|
||||
;WHEEL_WATER 24 24 24 0 0 0 0 0 0.05 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.002 1 1000 0.15 0.015 0.0 0 0 1.0 20.0 0
|
||||
WHEEL_WATER 24 24 32 0 0 0 0 0 0.05 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.004 1 1000 0.15 0.015 0.0 0 0 1.0 20.0 1
|
||||
;
|
||||
;
|
||||
BLOOD 128 128 128 0 0 0 0 0 0.02 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.03 1 2000 0.3 0.05 0.0 0 0 1.0 50.0 5
|
||||
BLOOD_SMALL 255 32 32 0 0 0 0 0 0.007 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.005 1 2000 0.05 0.05 0.0 0 0 1.0 50.0 53
|
||||
;BLOOD_SPLAT 128 128 128 0 0 0 0 0 0.1 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 200 0.3 0.0 0.0 0 0 1.0 400.0 36
|
||||
BLOOD_SPURT 255 32 32 0 0 0 0 0 0.008 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.005 1 2000 0.0 0.01 0.0 0 0 2.0 50.0 52
|
||||
DEBRIS 64 64 64 0 0 0 0 0 0.5 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.01 95 1000 0.2 0.0 0.0 0 0 1.0 50.0 4
|
||||
DEBRIS2 64 64 64 0 0 0 0 0 0.04 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 5 0.01 99 1000 0.03 0.04 0.0 0 0 1.0 50.0 38
|
||||
WATER 64 64 128 0 0 0 0 0 0.01 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 2000 0.0 0.0 0.0 0 0 1.0 100.0 0
|
||||
;
|
||||
;
|
||||
;FLAME 255 74 30 0 0 0 0 0 0.2 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 0.0 1 100 0.05 0.0 0.0 0 0 1.0 400.0 0
|
||||
;FLAME 255 74 30 0 0 255 0 400 0.8 -0.02 255 0 10 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.005 1 2000 0.02 0.01 0.01 0 0 1.0 200.0 0
|
||||
FLAME 255 74 30 0 0 0 0 0 0.8 -0.02 255 0 10 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.005 1 2000 0.02 0.01 0.01 0 0 1.0 200.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;FIREBALL 255 74 30 0 0 0 0 0 0.1 0.04 255 1 8 255 0 0 0 0 0 0.0 0 0.0 32 0 7 0 0.0 96 1000 0.1 0.0 0.0 0 0 1.0 400.0 0
|
||||
;
|
||||
;FIREBALL 255 74 30 0 0 0 0 0 0.1 0.05 255 0 6 255 0 0 0 0 0 0.0 0 0.0 1 0 7 0 -0.002 96 2000 0.1 0.02 0.02 3 0 1.0 200.0 0
|
||||
FIREBALL 255 74 30 0 0 0 0 0 0.1 0.02 255 0 6 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.003 96 2000 0.1 0.03 0.014 2.5 0 1.0 200.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
GUNFLASH 170 170 170 0 0 0 0 0 0.1 0.0 255 1 50 255 0 0 0 0 0 0.0 0 0.0 51 0 3 0 0.0 1 250 0.0 0.0 0.0 0 0 1.0 35.0 0
|
||||
GUNFLASH_NOANIM 128 128 128 0 0 0 0 0 0.1 0.0 255 1 128 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 25 0.0 0.0 0.0 0 0 1.0 35.0 0
|
||||
;
|
||||
GUNSMOKE 64 64 64 0 0 0 0 0 0.15 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 2 0 7 0 -0.002 95 1000 0.0 0.0 0.0 0 0 1.0 60.0 0
|
||||
GUNSMOKE2 255 255 255 0 0 0 0 0 0.05 0.02 255 0 0 255 0 8 0 0 0 0.0 0 0.0 0 0 3 4 -0.001 80 1400 0.05 0.05 0.01 3 0 1.0 60.0 4
|
||||
;
|
||||
;
|
||||
SMOKE 32 32 32 0 0 0 0 0 0.15 0.015 255 5 25 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.01 95 1000 0.05 0.05 0.01 3 0 1.0 150.0 0
|
||||
;SMOKE_SLOWMOTION 32 32 32 0 0 0 0 0 0.15 0.015 255 5 15 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.003 95 1000 0.05 0.05 0.01 3 0 1.0 400.0 0
|
||||
SMOKE_SLOWMOTION 32 32 32 0 0 0 0 0 0.15 0.015 128 5 11 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.003 95 3000 0.05 0.05 0.01 3 0 1.0 150.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;GARAGEPAINT_SPRAY 32 32 32 0 0 0 0 0 0.15 0.015 255 0 5 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 -0.001 95 2000 0.05 0.05 0.01 3 0 1.0 400.0 0
|
||||
GARAGEPAINT_SPRAY 32 32 32 0 0 0 0 0 0.15 0.015 255 0 5 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 -0.0005 95 4000 0.05 0.05 0.01 3 0 1.0 100.0 0
|
||||
SHARD 255 255 255 0 0 0 0 0 0.03 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 96 300 0.0 0.0 0.0 0 0 1.0 100.0 0
|
||||
SPLASH 64 64 128 0 0 0 0 0 0.1 0.007 255 1 10 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 100.0 0
|
||||
;BLOOD_SPLASH 24 64 0 0 0 0 0 0 0.1 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 96 300 0.0 0.0 0.0 0 0 1.0 100.0 0
|
||||
;
|
||||
;
|
||||
;CARFLAME 255 74 30 0 0 0 0 0 0.5 0.04 255 2 20 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 0.0 1 1000 0.4 0.0 0.0 0 0 1.0 400.0 64
|
||||
;CARFLAME 255 74 30 0 0 0 0 0 0.8 -0.02 255 0 10 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.001 1 2000 0.4 0.01 0.01 0 0 1.0 400.0 64
|
||||
;CARFLAME 255 74 30 0 0 0 0 0 0.8 -0.02 255 0 10 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.001 1 2000 0.4 0.01 0.01 0 0 1.0 400.0 64
|
||||
;
|
||||
CARFLAME 255 74 30 0 0 0 0 0 0.8 -0.02 255 0 10 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.005 1 2000 0.02 0.01 0.01 0 0 1.0 100.0 0
|
||||
;
|
||||
;
|
||||
STEAM 64 64 64 0 0 0 0 0 0.5 0.05 255 1 16 255 0 0 0 0 0 0.0 0 0.0 32 0 4 0 -0.005 95 2000 0.01 0.03 0.0 0 0 1.0 85.0 0
|
||||
;
|
||||
;default:
|
||||
;STEAM2 255 255 255 0 0 0 0 0 0.5 0.05 255 0 0 128 2 8 0 0 0 0.0 0 0.0 32 0 4 0 -0.005 95 2000 0.01 0.03 0.0 0 0 1.0 400.0 4
|
||||
STEAM2 255 255 255 0 0 0 0 0 0.5 0.015 255 0 0 192 0 1 0 0 10 0.5 1 0.02 32 0 4 0 -0.002 95 8000 0.01 0.03 0.0 0 0 1.0 85.0 4
|
||||
;
|
||||
;
|
||||
;STEAM_NY 255 255 255 0 0 0 0 0 0.5 0.05 255 0 0 128 2 8 0 0 0 0.0 0 0.0 32 0 4 0 -0.005 95 2000 0.01 0.03 0.0 0 0 1.0 400.0 4
|
||||
STEAM_NY 255 255 255 0 0 0 0 0 0.5 0.05 255 0 0 96 2 8 0 0 0 0.0 0 0.0 32 0 4 0 -0.005 95 1400 0.01 0.03 0.0 0 0 1.0 85.0 4
|
||||
STEAM_NY_SLOWMOTION 255 255 255 0 0 0 0 0 0.5 0.05 255 0 0 96 2 8 0 0 0 0.0 0 0.0 32 0 4 0 -0.0015 95 1400 0.01 0.03 0.0 0 0 1.0 85.0 4
|
||||
;
|
||||
;
|
||||
;ENGINE_STEAM 210 210 210 0 0 0 0 0 0.5 0.05 255 0 0 192 2 16 0 0 0 0.0 0 0.0 32 0 4 0 -0.005 95 2000 0.01 0.03 0.0 0 0 1.0 250.0 4
|
||||
ENGINE_STEAM 210 210 210 0 0 0 0 0 0.5 0.05 255 0 0 192 0 10 0 0 0 0.0 0 0.0 32 0 4 1 -0.005 95 4000 0.03 0.03 0.02 0 0 1.0 85.0 4
|
||||
;
|
||||
;
|
||||
;RAINDROP 32 32 32 0 0 0 0 0 0.6 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.025 1 1000 0.0 0.0 0.0 0 0 1.0 15.0 1
|
||||
RAINDROP 64 64 64 0 0 0 0 0 0.4 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 3 0 0.05 1 1000 0.0 0.0 0.0 0 0 1.0 15.0 1
|
||||
RAINDROP_SMALL 16 16 16 0 0 0 0 0 0.3 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.05 1 1000 0.0 0.0 0.0 0 0 1.0 15.0 1
|
||||
RAIN_SPLASH 32 32 32 0 0 0 0 0 0.08 0.0 255 0 5 255 0 0 0 0 0 0.0 0 0.0 1 0 4 0 0.0 1 500 0.0 0.0 0.0 0 0 1.0 15.0 0
|
||||
RAIN_SPLASH_BIGGROW 128 128 128 0 0 0 0 0 0.5 0.06 255 0 2 255 0 0 0 0 0 0.0 0 0.0 2 1 4 0 0.0 1 5500 0.0 0.0 0.0 0 0 1.0 15.0 0
|
||||
RAIN_SPLASHUP 48 48 48 0 0 0 0 0 0.1 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 1 0 0.0 1 50 0.0 0.0 0.0 0 0 1.0 15.0 0
|
||||
;
|
||||
WATERSPRAY 64 64 64 0 0 0 0 0 0.2 0.0 255 0 25 255 0 0 0 0 0 0.0 0 0.0 3 0 2 0 0.002 1 800 0.05 0.0 0.01 0 0 1.0 20.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;EXPLOSION_MEDIUM 80 80 80 0 0 0 0 0 0.6 0.04 255 5 8 255 0 0 0 0 0 0.0 0 0.0 8 0 11 0 0.0 96 15000 0.2 0.0 0.0 3 0 1.0 400.0 0
|
||||
;EXPLOSION_LARGE 80 80 80 0 0 0 0 0 1.1 0.04 255 5 8 255 0 0 0 0 0 0.0 0 0.0 8 0 11 0 0.0 96 15000 0.8 0.0 0.0 3 0 1.0 400.0 0
|
||||
;EXPLOSION_MEDIUM 80 80 80 0 0 0 0 0 0.6 0.04 255 1 4 255 0 0 0 0 0 0.0 0 0.0 1 0 11 0 0.0 96 7000 0.2 0.0 0.0 0 0 1.0 400.0 0
|
||||
;EXPLOSION_LARGE 80 80 80 0 0 0 0 0 1.1 0.04 255 1 4 255 0 0 0 0 0 0.0 0 0.0 1 0 11 0 0.0 96 7000 0.8 0.0 0.0 0 0 1.0 400.0 0
|
||||
;
|
||||
;EXPLOSION_MEDIUM 80 80 80 0 0 0 0 0 0.6 0.04 255 0 3 255 0 0 0 0 0 0.0 0 0.0 1 0 11 0 -0.001 96 6000 0.2 0.0 0.0 0 0 1.0 400.0 0
|
||||
;EXPLOSION_LARGE 80 80 80 0 0 0 0 0 1.1 0.04 255 0 3 255 0 0 0 0 0 0.0 0 0.0 1 0 11 0 -0.001 96 6000 0.8 0.0 0.0 0 0 1.0 400.0 0
|
||||
EXPLOSION_MEDIUM 80 80 80 0 0 0 0 0 0.6 0.04 255 0 3 255 0 0 0 0 0 0.0 0 0.0 2 0 5 0 -0.001 96 6000 0.2 0.0 0.0 0 0 1.0 200.0 0
|
||||
EXPLOSION_LARGE 80 80 80 0 0 0 0 0 1.1 0.04 255 0 3 255 0 0 0 0 0 0.0 0 0.0 2 0 5 0 -0.001 96 6000 0.8 0.0 0.0 0 0 1.0 200.0 0
|
||||
EXPLOSION_MFAST 80 80 80 0 0 0 0 0 0.6 0.04 255 0 6 255 0 0 0 0 0 0.0 0 0.0 2 0 5 0 -0.001 96 3500 0.2 0.0 0.0 0 0 1.0 200.0 0
|
||||
EXPLOSION_LFAST 80 80 80 0 0 0 0 0 1.1 0.04 255 0 6 255 0 0 0 0 0 0.0 0 0.0 2 0 5 0 -0.001 96 3500 0.8 0.0 0.0 0 0 1.0 200.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;BOAT_SPLASH 32 64 32 0 0 0 0 0 0.2 0.2 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.01 1 2000 0.0 0.0 0.0 0 0 1.0 200.0 0
|
||||
;BOAT_THRUSTJET 24 32 24 0 0 0 0 0 0.5 0.1 255 0 0 255 0 0 0 0 0 0.0 0 0.0 250 0 4 0 0.01 50 1000 0.0 0.0 0.0 0 4 1.0 200.0 8
|
||||
;BOAT_SPLASH 16 32 32 0 0 0 0 0 0.2 0.2 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.01 1 2000 0.0 0.0 0.0 0 0 1.0 200.0 0
|
||||
;BOAT_THRUSTJET 8 24 24 0 0 0 0 0 0.5 0.1 255 0 0 255 0 0 0 0 0 0.0 0 0.0 250 0 4 0 0.01 50 1000 0.0 0.0 0.0 0 4 1.0 200.0 8
|
||||
;CAR_SPLASH 64 64 64 0 0 0 0 0 2.0 0.25 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.02 1 2000 0.0 0.0 0.0 0 0 1.0 250.0 0
|
||||
;CAR_SPLASH 64 64 64 0 0 0 0 0 2.0 0.25 255 0 0 200 0 8 0 0 0 0.0 0 0.0 0 0 0 0 0.04 1 2000 0.0 0.0 0.0 0 0 1.0 150.0 4
|
||||
;CAR_SPLASH 64 64 64 0 0 0 0 0 2.0 0.35 255 0 0 200 0 8 0 0 0 0.0 0 0.0 0 0 0 0 0.05 1 2000 0.0 0.0 0.0 0 0 1.0 150.0 4
|
||||
;CAR_SPLASH 64 64 64 0 0 0 0 0 1.0 0.25 255 0 0 180 0 5 0 0 0 0.0 0 0.0 2 1 3 0 0.05 1 1000 0.0 0.0 0.0 0 0 1.0 150.0 12
|
||||
;
|
||||
;
|
||||
;CAR_SPLASH 64 64 64 0 0 0 0 0 1.0 0.15 255 0 0 180 0 2 0 0 0 0.0 0 0.0 2 0 3 0 0.02 1 2000 0.0 0.0 0.0 0 0 1.0 150.0 12
|
||||
;CAR_SPLASH 48 48 64 0 0 0 0 0 1.0 0.15 96 0 0 255 0 0 0 0 0 0.0 0 0.0 6 0 2 0 0.01 1 2000 0.5 0.04 0.0 0 0 2.0 150.0 288
|
||||
;CAR_SPLASH 48 48 64 0 0 0 0 0 1.0 0.05 96 0 0 255 0 0 0 0 0 0.0 0 0.0 0 1 2 0 0.01 1 2000 0.5 0.04 0.0 0 0 2.0 150.0 288
|
||||
; A B C D CV B2 C2 D2 FT E F G H I GA HA IA GZA HZA IZA GZR HZR IZR J K L M N O P Q R S T U V CR Z
|
||||
CAR_SPLASH 48 48 60 0 0 0 0 0 1.0 0.00 128 1 4 128 0 0 0 0 0 0.0 0 0.0 0 0 2 0 0.01 1 2000 0.5 0.04 0.0 0 0 1.4 150.0 272
|
||||
;
|
||||
;
|
||||
;
|
||||
;BOAT_SPLASH 70 70 70 0 0 0 0 0 0.2 0.2 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.01 1 1000 0.0 0.0 0.0 0 0 1.0 150.0 0
|
||||
BOAT_SPLASH 64 64 64 0 0 0 0 0 0.2 0.2 255 0 2 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.01 1 1000 0.0 0.0 0.0 0 0 1.0 150.0 0
|
||||
;
|
||||
;
|
||||
;BOAT_THRUSTJET 90 90 90 0 0 0 0 0 1.8 0.1 255 0 0 120 0 1 0 0 0 0.0 0 0.0 0 1 4 0 0.01 50 1600 0.8 0.4 0.02 0 4 1.0 150.0 4
|
||||
BOAT_THRUSTJET 90 90 90 0 0 0 0 0 1.4 0.06 255 0 0 96 0 1 0 0 0 0.0 0 0.0 0 1 4 0 0.01 50 1600 0.8 0.4 0.02 0 4 1.0 150.0 4
|
||||
;
|
||||
;
|
||||
;BOAT_WAKE 255 255 255 0 0 0 0 0 2.0 0.2 255 0 0 128 0 1 0 0 0 0.0 0 0.0 0 0 0 0 0.03 50 1600 0.8 0.4 0.02 0 4 1.0 150.0 4
|
||||
BOAT_WAKE 255 255 255 0 0 0 0 0 1.5 0.45 255 0 0 192 0 2 0 0 0 0.0 0 0.0 0 0 0 0 0.0 50 1600 0.8 0.4 0.02 0 4 1.0 150.0 4
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; A B C D CV B2 C2 D2 FT E F G H I GA HA IA GZA HZA IZA GZR HZR IZR J K L M N O P Q R S T U V CR Z
|
||||
WATER_HYDRANT 64 64 64 0 0 0 0 0 0.8 0.01 255 1 16 255 1 16 0 0 0 0.0 0 0.0 0 0 2 0 0.007 99 500 0.02 0.08 0.0 0 4 1.0 85.0 16
|
||||
WATER_CANNON 64 64 128 0 0 0 0 0 0.03 0.03 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 85.0 0
|
||||
EXTINGUISH_STEAM 32 32 32 0 0 0 0 0 0.1 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 85.0 0
|
||||
;
|
||||
;
|
||||
;
|
||||
;PED_SPLASH 32 32 64 0 0 0 0 0 0.1 0.05 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 85.0 0
|
||||
PED_SPLASH 48 48 60 0 0 0 0 0 0.1 0.06 96 0 0 255 0 0 0 0 0 0.0 0 0.0 0 1 2 0 0.01 1 2000 0.5 0.04 0.0 0 0 1.4 50.0 256
|
||||
;
|
||||
;
|
||||
PEDFOOT_DUST 170 166 150 0 0 0 0 0 0.01 0.015 255 0 0 63 0 4 0 0 0 0.0 0 0.0 0 0 0 0 -0.0005 1 1000 0.0 0.0 0.0 0 0 1.0 6.0 4
|
||||
;
|
||||
HELI_DUST 17 15 9 0 0 0 0 0 0.2 0.1 255 1 8 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.001 1 1000 0.2 0.05 0.0 0 0 1.0 85.0 0
|
||||
HELI_ATTACK 255 255 128 0 0 0 0 0 0.01 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 500 0.0 0.0 0.0 0 0 0.5 85.0 10
|
||||
;
|
||||
;
|
||||
;ENGINE_SMOKE 16 16 16 0 0 0 0 0 0.5 0.04 255 0 0 63 0 0 0 0 0 0.0 0 0.0 0 0 0 0 -0.005 95 2000 0.01 0.03 0.0 0 0 1.0 150.0 4
|
||||
;ENGINE_SMOKE2 8 8 8 0 0 0 0 0 1.0 0.2 128 2 4 63 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.001 1 1000 0.0 0.0 0.0 0 3 1.0 150.0 4
|
||||
ENGINE_SMOKE 16 16 16 0 0 0 0 0 0.5 0.04 255 0 0 52 0 2 10 0 80 0.0 0 0.0 0 0 5 2 -0.009 95 2000 0.11 0.03 0.01 1 0 1.0 85.0 4
|
||||
ENGINE_SMOKE2 9 9 9 80 0 0 0 0 1.0 0.06 128 0 1 140 0 5 10 0 80 0.0 0 0.0 0 0 0 2 0.002 1 1300 0.0 0.01 0.0 3 3 1.0 85.0 4
|
||||
;
|
||||
;
|
||||
CARFLAME_SMOKE 32 32 32 0 0 0 0 0 0.05 0.01 255 0 0 64 0 2 0 0 0 0.0 0 0.0 0 0 0 0 -0.008 95 2000 0.01 0.03 0.01 0 0 1.0 85.0 4
|
||||
FIREBALL_SMOKE 32 32 32 0 0 0 0 0 0.05 0.03 255 0 0 128 0 2 0 0 0 0.0 0 0.0 0 0 0 0 -0.004 95 2000 0.01 0.03 0.01 0 0 1.0 85.0 4
|
||||
;
|
||||
PAINT_SMOKE 255 0 0 0 0 0 0 0 0.1 0.01 255 1 8 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 95 3000 0.0 0.005 0.0 0 0 1.0 85.0 0
|
||||
TREE_LEAVES 64 64 64 0 0 0 0 0 0.2 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 85.0 0
|
||||
;
|
||||
;
|
||||
;CARCOLLISION_DUST 224 224 224 0 0 0 0 0 0.15 0.04 255 0 0 127 1 8 0 0 0 0.0 0 0.0 0 0 0 0 -0.002 90 2000 0.02 0.02 0.0 0 0 1.0 80.0 4
|
||||
CARCOLLISION_DUST 76 76 76 0 0 0 0 0 0.10 0.02 255 0 0 160 0 4 0 0 0 0.0 0 0.0 0 0 0 0 -0.0015 90 2000 0.02 0.02 0.0 0 0 1.0 30.0 4
|
||||
;
|
||||
;
|
||||
CAR_DEBRIS 32 32 32 0 0 0 0 0 0.5 0.0 224 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.010 90 1000 0.02 0.02 0.0 0 0 1.0 50.0 4
|
||||
HELI_DEBRIS 32 32 32 0 0 0 0 0 1.5 0.0 224 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.065 90 1500 0.02 0.02 0.0 0 0 1.0 150.0 4
|
||||
;
|
||||
;
|
||||
;
|
||||
;EXHAUST_FUMES 80 80 80 0 0 0 0 0 0.03 0.03 255 0 0 122 0 4 0 0 0 0.0 0 0.0 2 0 4 0 -0.001 95 1500 0.01 0.03 0.0 0 0 1.0 50.0 4
|
||||
EXHAUST_FUMES 98 98 108 0 0 0 0 0 0.03 0.06 255 0 0 152 0 12 0 0 0 0.0 0 0.0 2 0 4 0 -0.002 96 1000 0.01 0.03 0.0 0 0 1.0 25.0 4
|
||||
;
|
||||
;
|
||||
;RUBBER 40 40 40 0 0 0 0 0 0.4 0.005 255 21 20 255 0 0 0 0 0 0.0 0 0.0 3 0 4 0 -0.0005 1 1000 0.02 0.0 0.0 0 0 1.0 400.0 4
|
||||
RUBBER_SMOKE 255 255 255 0 0 0 0 0 0.4 0.005 255 0 0 127 1 8 0 0 0 0.0 0 0.0 3 0 4 0 -0.0005 1 1000 0.02 0.0 0.0 0 0 1.0 50.0 4
|
||||
;BURNINGRUBBER_SMOKE128 128 128 0 0 0 0 0 0.35 0.06 255 0 0 192 1 6 0 0 0 0.0 0 0.0 0 0 0 0 -0.002 90 4000 0.02 0.02 0.0 0 0 1.0 400.0 4
|
||||
BURNINGRUBBER_SMOKE 128 128 128 0 0 0 0 0 0.35 0.06 255 0 0 128 0 4 0 0 0 0.0 0 0.0 0 0 0 0 -0.002 90 2000 0.02 0.02 0.0 0 0 1.0 50.0 4
|
||||
;
|
||||
;
|
||||
BULLETHIT_SMOKE 192 192 192 0 0 0 0 0 0.15 0.03 70 0 2 255 1 10 0 0 0 0.0 0 0.0 0 0 0 0 -0.001 90 2000 0.04 0.02 0.0 0 0 1.0 150.0 0
|
||||
;
|
||||
;
|
||||
GUNSHELL_FIRST 108 108 108 0 0 0 0 0 0.015 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.010 90 1000 0.02 0.02 0.0 0 0 1.0 0.0 12292
|
||||
GUNSHELL 108 108 108 0 0 0 0 0 0.015 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.010 90 1000 0.02 0.02 0.0 0 0 1.0 12.0 4100
|
||||
GUNSHELL_BUMP1 108 108 108 0 0 0 0 0 0.015 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.010 90 1000 0.02 0.02 0.0 0 0 1.0 8.0 4100
|
||||
GUNSHELL_BUMP2 108 108 108 0 0 0 0 0 0.015 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 0 4 0 0.010 90 400 0.02 0.02 0.0 0 0 1.0 8.0 4100
|
||||
;
|
||||
;
|
||||
TEST 255 64 64 0 0 0 0 0 0.2 0.025 255 1 20 255 0 0 0 0 0 0.0 0 0.0 0 0 0 0 0.0 1 3000 0.0 0.0 0.0 0 0 1.0 400.0 128
|
||||
;
|
||||
;
|
||||
;Particles with flag DRAWTOP2D should be placed last and VR (Visibility Range) set to 0!
|
||||
;
|
||||
;BIRD_FRONT 8 8 8 0 0 0 0 0 0.05 0.0 255 0 0 255 2 1 0 0 0 0.0 0 0.0 1 0 3 0 0.0 1 10000 0.0 0.0 0.0 0 0 1.0 0.0 3140
|
||||
BIRD_FRONT 8 8 8 0 0 0 0 0 1.05 0.0 255 0 0 255 2 2 0 0 0 0.0 0 0.0 1 0 3 0 0.0 1 8000 0.0 0.0 0.0 0 0 1.0 0.0 68
|
||||
;
|
||||
RAINDROP_2D 32 32 32 0 0 0 0 0 0.5 0.0 255 0 0 255 0 0 0 0 0 0.0 0 0.0 0 1 0 0 0.0 1 1000 0.0 0.0 0.0 0 0 1.0 0.0 3072
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; below is just backup of above values:
|
||||
;
|
||||
;SPARK 255 128 64 0.005 0.0 255 0 0 0 0 0 0 0.0 1.0 300 0.0 0.07 0.0 0 0 1.0 48
|
||||
;SPARK_SMALL 255 255 128 0.005 0.0 255 0 0 0 0 0 0 0.0 1.0 500 0.0 0.05 0.0 0 0 0.6 40
|
||||
;BLOOD 128 128 128 0.02 0.0 255 0 0 0 0 0 0 0.03 1.0 2000 0.3 0.05 0.0 0 0 1.0 6
|
||||
;BLOOD_SMALL 255 32 32 0.007 0.0 255 0 0 0 0 0 0 0.005 1.0 2000 0.05 0.05 0.0 0 0 1.0 54
|
||||
;BLOOD_SPLAT 128 128 128 0.1 0.0 255 0 0 0 0 0 0 0.0 1.0 200 0.3 0.0 0.0 0 0 1.0 36
|
||||
;BLOOD_SPURT 255 32 32 0.008 0.0 255 0 0 0 0 0 0 0.005 1.0 2000 0.0 0.01 0.0 0 0 2.0 52
|
||||
;DEBRIS 64 64 64 0.5 0.0 255 0 0 0 0 0 0 0.01 0.95 1000 0.2 0.0 0.0 0 0 1.0 4
|
||||
;DEBRIS2 64 64 64 0.04 0.0 255 0 0 0 0 0 5 0.01 0.99 1000 0.03 0.04 0.0 0 0 1.0 38
|
||||
;WATER 64 64 128 0.01 0.0 255 0 0 0 0 0 0 0.0 1.0 2000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;FLAME 255 74 30 0.2 0.0 255 0 0 31 0 5 0 0.0 1.0 100 0.05 0.0 0.0 0 0 1.0 0
|
||||
;FIREBALL 255 74 30 0.1 0.04 255 0 8 31 0 8 0 0.0 0.96 1000 0.1 0.0 0.0 0 0 1.0 0
|
||||
;GUNFLASH 255 255 255 0.1 0.0 255 0 50 50 0 3 0 0.0 1.0 250 0.0 0.0 0.0 0 0 1.0 0
|
||||
;GUNFLASHSTATIC 255 255 255 0.1 0.0 255 0 128 0 0 0 0 0.0 1.0 25 0.0 0.0 0.0 0 0 1.0 0
|
||||
;SMOKE 32 32 32 0.15 0.015 255 4 25 31 0 5 0 -0.01 0.95 1000 0.05 0.05 0.01 3 0 1.0 0
|
||||
;SHARD 255 255 255 0.03 0.0 255 0 0 0 0 0 0 0.0 0.96 300 0.0 0.0 0.0 0 0 1.0 0
|
||||
;SPLASH 64 64 128 0.1 0.007 255 0 10 0 0 0 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;BLOOD_SPLASH 24 64 0 0.1 0.0 255 0 0 0 0 0 0 0.0 0.96 300 0.0 0.0 0.0 0 0 1.0 0
|
||||
;RUBBER 40 40 40 0.4 0.005 255 1 25 31 0 5 0 0.0 1.0 1000 0.02 0.0 0.0 0 0 1.0 0
|
||||
;CARFLAME 255 74 30 0.5 0.04 255 1 20 31 0 5 0 0.0 1.0 1000 0.4 0.0 0.0 0 0 1.0 64
|
||||
;STEAM 64 64 64 0.5 0.05 255 0 16 31 0 5 0 -0.005 0.95 2000 0.01 0.03 0.0 0 0 1.0 0
|
||||
;RAINDROP 32 32 32 0.6 0.0 255 0 0 0 0 0 0 0.1 1.0 1000 0.0 0.0 0.0 0 0 1.0 1
|
||||
;RAIN_SPLASH 32 32 32 0.08 0.0 255 0 0 1 0 4 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;RAINDROP_SMALL 32 32 32 0.3 0.0 255 0 0 0 0 0 0 0.1 1.0 1000 0.0 0.0 0.0 0 0 1.0 1
|
||||
;EXPLOSION_MEDIUM 80 80 80 0.6 0.04 255 4 8 7 0 11 0 0.0 0.96 30000 0.2 0.0 0.0 3 0 1.0 0
|
||||
;EXPLOSION_LARGE 80 80 80 1.1 0.04 255 4 8 7 0 11 0 0.0 0.96 30000 0.8 0.0 0.0 3 0 1.0 0
|
||||
;BOAT_SPLASH 32 64 32 0.2 0.2 255 0 0 0 0 0 0 0.01 1.0 2000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;BOAT_THRUSTJET 24 32 24 0.5 0.1 255 0 0 250 0 5 0 0.01 0.5 1000 0.0 0.0 0.0 0 4 1.0 8
|
||||
;WATER_HYDRANT 64 64 128 0.4 0.01 255 1 2 20 0 5 0 0.007 0.99 500 0.02 0.05 0.0 0 4 1.0 256
|
||||
;WATER_CANNON 64 64 128 0.03 0.03 255 0 0 0 0 0 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;EXTINGUISH_STEAM 32 32 32 0.1 0.0 255 0 0 0 0 0 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;PED_SPLASH 32 32 64 0.1 0.05 255 0 0 0 0 0 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;HELI_DUST 17 15 9 0.2 0.1 255 0 8 0 0 0 0 -0.001 1.0 1000 0.2 0.05 0.0 0 0 1.0 0
|
||||
;HELI_ATTACK 255 255 128 0.01 0.0 255 0 0 0 0 0 0 0.0 1.0 500 0.0 0.0 0.0 0 0 0.5 10
|
||||
;ENGINE_SMOKE 16 16 16 0.5 0.04 255 0 0 0 0 0 0 -0.005 0.95 2000 0.01 0.03 0.0 0 0 1.0 4
|
||||
;ENGINE_SMOKE2 4 4 4 1.0 0.2 255 1 4 0 0 0 0 0.001 1.0 1000 0.0 0.0 0.0 0 3 1.0 4
|
||||
;PAINT_SMOKE 255 0 0 0.1 0.01 255 0 8 0 0 0 0 0.0 0.95 3000 0.0 0.005 0.0 0 0 1.0 0
|
||||
;TREE_LEAVES 64 64 64 0.2 0.0 255 0 0 0 0 0 0 0.0 1.0 1000 0.0 0.0 0.0 0 0 1.0 0
|
||||
;TEST 255 64 64 0.2 0.05 255 0 16 0 0 0 0 0.0 1.0 3000 0.0 0.0 0.0 0 0 1.0 128
|
||||
;
|
||||
;
|
||||
;the end
|
||||
BIN
gamefiles/data/freeroam_miami.scm
Normal file
BIN
gamefiles/data/freeroam_miami.scm
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
gamefiles/models/frontend_ds2.txd
Normal file
BIN
gamefiles/models/frontend_ds2.txd
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,104 +1,104 @@
|
||||
# Fresnal RO Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
0.400000 0.400000 0.400000 0.150000 # Midnight
|
||||
0.400000 0.400000 0.400000 0.150000 # 1am
|
||||
0.400000 0.400000 0.400000 0.150000 # 2am
|
||||
0.400000 0.400000 0.400000 0.150000 # 3am
|
||||
0.400000 0.400000 0.400000 0.150000 # 4am
|
||||
0.400000 0.400000 0.400000 0.150000 # 5am
|
||||
0.400000 0.400000 0.400000 0.150000 # 6am
|
||||
0.400000 0.400000 0.400000 0.150000 # 7am
|
||||
0.400000 0.400000 0.400000 0.150000 # 8am
|
||||
0.400000 0.400000 0.400000 0.150000 # 9am
|
||||
0.400000 0.400000 0.400000 0.150000 # 10am
|
||||
0.400000 0.400000 0.400000 0.150000 # 11am
|
||||
0.400000 0.400000 0.400000 0.150000 # Midday
|
||||
0.400000 0.400000 0.400000 0.150000 # 1pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 2pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 3pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 4pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 5pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 6pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 7pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 8pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 9pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 10pm
|
||||
0.400000 0.400000 0.400000 0.150000 # 11pm
|
||||
# Specular Power Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
128.000000 80.000000 30.000000 128.000000 # Midnight
|
||||
128.000000 80.000000 30.000000 128.000000 # 1am
|
||||
128.000000 80.000000 30.000000 128.000000 # 2am
|
||||
128.000000 80.000000 30.000000 128.000000 # 3am
|
||||
128.000000 80.000000 30.000000 128.000000 # 4am
|
||||
80.000000 60.000000 30.000000 128.000000 # 5am
|
||||
80.000000 60.000000 30.000000 128.000000 # 6am
|
||||
80.000000 60.000000 30.000000 128.000000 # 7am
|
||||
80.000000 60.000000 30.000000 128.000000 # 8am
|
||||
80.000000 60.000000 30.000000 128.000000 # 9am
|
||||
80.000000 60.000000 30.000000 128.000000 # 10am
|
||||
80.000000 60.000000 30.000000 128.000000 # 11am
|
||||
80.000000 60.000000 30.000000 128.000000 # Midday
|
||||
80.000000 60.000000 30.000000 128.000000 # 1pm
|
||||
80.000000 60.000000 30.000000 128.000000 # 2pm
|
||||
80.000000 60.000000 30.000000 128.000000 # 3pm
|
||||
80.000000 60.000000 30.000000 128.000000 # 4pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 5pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 6pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 7pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 8pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 9pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 10pm
|
||||
128.000000 80.000000 30.000000 128.000000 # 11pm
|
||||
# Diffuse Colour Modifier Table (Red,Green,Blue,Amount)
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midnight
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midday
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11pm
|
||||
# Specular Colour Table (Red,Green,Blue,Amount)
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # Midnight
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 1am
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 2am
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 3am
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 4am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 5am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 6am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 7am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 8am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 9am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 10am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 11am
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # Midday
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 1pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 2pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 3pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 4pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 5pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 6pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 7pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 8pm
|
||||
178, 178, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 9pm
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 10pm
|
||||
81, 150, 178, 100 178, 178, 178, 50 178, 178, 178, 75 178, 178, 178, 20 # 11pm
|
||||
# Fresnel RO Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # Midnight
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 1am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 2am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 3am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 4am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 5am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 6am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 7am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 8am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 9am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 10am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 11am
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # Midday
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 1pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 2pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 3pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 4pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 5pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 6pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 7pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 8pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 9pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 10pm
|
||||
0.4 0.4 0.4 0.4 0.4 0.4 0.4 # 11pm
|
||||
# Specular Power Table (ther higher, the tighter the highlite)
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
25 15 70 10 15 15 18 # Midnight
|
||||
25 15 70 10 15 15 18 # 1am
|
||||
25 15 70 10 15 15 18 # 2am
|
||||
25 15 70 10 15 15 18 # 3am
|
||||
25 15 70 10 15 15 18 # 4am
|
||||
25 15 70 10 15 15 18 # 5am
|
||||
25 15 70 10 15 15 18 # 6am
|
||||
25 15 70 10 15 15 18 # 7am
|
||||
25 15 70 10 15 15 18 # 8am
|
||||
25 15 70 10 15 15 18 # 9am
|
||||
25 15 70 10 15 15 18 # 10am
|
||||
25 15 70 10 15 15 18 # 11am
|
||||
25 15 70 10 15 15 18 # Midday
|
||||
25 15 70 10 15 15 18 # 1pm
|
||||
25 15 70 10 15 15 18 # 2pm
|
||||
25 15 70 10 15 15 18 # 3pm
|
||||
25 15 70 10 15 15 18 # 4pm
|
||||
25 15 70 10 15 15 18 # 5pm
|
||||
25 15 70 10 15 15 18 # 6pm
|
||||
25 15 70 10 15 15 18 # 7pm
|
||||
25 15 70 10 15 15 18 # 8pm
|
||||
25 15 70 10 15 15 18 # 9pm
|
||||
25 15 70 10 15 15 18 # 10pm
|
||||
25 15 70 10 15 15 18 # 11pm
|
||||
# Diffuse Colour Modifier Table (Red,Green,Blue,Amount)
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midnight
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11am
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # Midday
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 1pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 2pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 3pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 4pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 5pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 6pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 7pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 8pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 9pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 10pm
|
||||
0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 0, 0, 0, 0 # 11pm
|
||||
# Specular Colour Table (Red,Green,Blue,Ignored)
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # Midnight
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 1am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 2am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 3am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 4am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 5am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 6am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 7am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 8am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 9am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 10am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 11am
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # Midday
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 1pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 2pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 3pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 4pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 5pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 6pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 7pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 8pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 9pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 10pm
|
||||
178, 178, 178, 100 140, 140, 150, 50 220, 220, 220, 75 255, 255, 255, 20 178, 178, 178, 100 178, 178, 178, 75 178, 178, 178, 100 # 11pm
|
||||
|
||||
Binary file not shown.
@@ -1,130 +1,130 @@
|
||||
# Ramp Start Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # Midnight
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 1am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 2am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 3am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 4am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 5am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 6am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 7am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 8am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 9am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 10am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 11am
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # Midday
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 1pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 2pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 3pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 4pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 5pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 6pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 7pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 8pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 9pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 10pm
|
||||
60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 60, 55, 53, 100 # 11pm
|
||||
# Ramp End Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # Midnight
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 1am
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 2am
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 3am
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 4am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 5am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 6am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 7am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 8am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 9am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 10am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 11am
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # Midday
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 1pm
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 2pm
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 3pm
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 4pm
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 5pm
|
||||
255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 255, 230, 224, 100 # 6pm
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 7pm
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 8pm
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 9pm
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 10pm
|
||||
190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 190, 171, 167, 100 # 11pm
|
||||
# Offset Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
0 0 0 0 # Midnight
|
||||
0 0 0 0 # 1am
|
||||
0 0 0 0 # 2am
|
||||
0 0 0 0 # 3am
|
||||
0 0 0 0 # 4am
|
||||
0 0 0 0 # 5am
|
||||
0 0 0 0 # 6am
|
||||
0 0 0 0 # 7am
|
||||
0 0 0 0 # 8am
|
||||
0 0 0 0 # 9am
|
||||
0 0 0 0 # 10am
|
||||
0 0 0 0 # 11am
|
||||
0 0 0 0 # Midday
|
||||
0 0 0 0 # 1pm
|
||||
0 0 0 0 # 2pm
|
||||
0 0 0 0 # 3pm
|
||||
0 0 0 0 # 4pm
|
||||
0 0 0 0 # 5pm
|
||||
0 0 0 0 # 6pm
|
||||
0 0 0 0 # 7pm
|
||||
0 0 0 0 # 8pm
|
||||
0 0 0 0 # 9pm
|
||||
0 0 0 0 # 10pm
|
||||
0 0 0 0 # 11pm
|
||||
# Scale Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
1.5 1.5 1.0 1.0 # Midnight
|
||||
1.5 1.5 1.0 1.0 # 1am
|
||||
1.5 1.5 1.0 1.0 # 2am
|
||||
1.5 1.5 1.5 1.5 # 3am
|
||||
2.0 2.0 2.0 2.0 # 4am
|
||||
2.0 2.0 2.0 2.0 # 5am
|
||||
2.0 2.0 2.0 2.0 # 6am
|
||||
2.5 2.5 2.0 2.0 # 7am
|
||||
2.5 2.5 2.0 2.0 # 8am
|
||||
2.5 2.5 2.0 2.0 # 9am
|
||||
2.5 2.5 2.0 2.0 # 10am
|
||||
2.5 2.5 2.0 2.0 # 11am
|
||||
2.5 2.5 2.0 2.0 # Midday
|
||||
2.5 2.5 2.0 2.0 # 1pm
|
||||
2.5 2.5 2.0 2.0 # 2pm
|
||||
2.5 2.5 2.0 2.0 # 3pm
|
||||
2.5 2.5 2.0 2.0 # 4pm
|
||||
2.0 2.0 2.0 2.0 # 5pm
|
||||
2.0 2.0 2.0 2.0 # 6pm
|
||||
2.0 2.0 2.0 2.0 # 7pm
|
||||
1.5 1.5 1.5 1.5 # 8pm
|
||||
1.5 1.5 1.0 1.0 # 9pm
|
||||
1.5 1.5 1.0 1.0 # 10pm
|
||||
1.5 1.5 1.0 1.0 # 11pm
|
||||
# Scaling Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY
|
||||
0.2 0.2 0.1 0.1 # Midnight
|
||||
0.2 0.2 0.1 0.1 # 1am
|
||||
0.7 0.7 0.2 0.2 # 6am
|
||||
0.7 0.7 0.2 0.2 # 3am
|
||||
0.7 0.7 0.2 0.2 # 4am
|
||||
2.0 2.0 0.3 0.3 # 5am
|
||||
3.0 3.0 0.3 0.3 # 6am
|
||||
4.0 4.0 0.3 0.3 # 7am
|
||||
5.0 5.0 0.3 0.3 # 8am
|
||||
6.0 6.0 1.3 1.3 # 9am
|
||||
6.0 6.0 2.0 2.0 # 10am
|
||||
6.0 6.0 2.0 2.0 # 11am
|
||||
6.0 6.0 2.0 2.0 # Midday
|
||||
6.0 6.0 2.0 2.0 # 1pm
|
||||
6.0 6.0 1.3 1.3 # 6pm
|
||||
5.0 5.0 0.3 0.3 # 3pm
|
||||
4.0 4.0 0.3 0.3 # 4pm
|
||||
3.0 3.0 0.3 0.3 # 5pm
|
||||
2.0 2.0 0.3 0.3 # 6pm
|
||||
0.7 0.7 0.2 0.2 # 7pm
|
||||
0.7 0.7 0.2 0.2 # 8pm
|
||||
0.7 0.7 0.2 0.2 # 9pm
|
||||
0.2 0.2 0.1 0.1 # 10pm
|
||||
0.2 0.2 0.1 0.1 # 11pm
|
||||
# Ramp Start Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # Midnight
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 1am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 2am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 3am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 4am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 5am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 6am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 7am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 8am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 9am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 10am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 11am
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # Midday
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 1pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 2pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 3pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 4pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 5pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 6pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 7pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 8pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 9pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 10pm
|
||||
0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 0, 0, 0, 255 # 11pm
|
||||
# Ramp End Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # Midnight
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 1am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 2am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 3am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 4am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 5am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 6am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 7am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 8am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 9am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 10am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 11am
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # Midday
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 1pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 2pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 3pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 4pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 5pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 6pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 7pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 8pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 9pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 10pm
|
||||
255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 255, 255, 255, 255 # 11pm
|
||||
# Offset Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # Midnight
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 1am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 2am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 3am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 4am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 5am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 6am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 7am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 8am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 9am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 10am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 11am
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # Midday
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 1pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 2pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 3pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 4pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 5pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 6pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 7pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 8pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 9pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 10pm
|
||||
0.5 0.5 0.5 0.5 0.5 0.5 0.5 # 11pm
|
||||
# Scale Table (the lentgh of the light band?)
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # Midnight
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 1am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 2am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 3am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 4am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 5am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 6am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 7am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 8am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 9am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 10am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 11am
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # Midday
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 1pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 2pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 3pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 4pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 5pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 6pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 7pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 8pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 9pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 10pm
|
||||
1 0.5 1.5 0.5 1.5 1.5 1.5 # 11pm
|
||||
# Scaling Table (how strong the overall effect is)
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS time multiplier
|
||||
1 0.3 0.5 0.1 1 1 1 # Midnight 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 1am 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 2am 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 3am 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 4am 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 5am 0.5
|
||||
1 0.3 0.5 0.1 1 1 1 # 6am 0.5
|
||||
1.2 0.36 0.6 0.12 1.2 1.2 1.2 # 7am 0.6
|
||||
1.4 0.42 0.7 0.14 1.4 1.4 1.4 # 8am 0.7
|
||||
1.6 0.48 0.8 0.16 1.6 1.6 1.6 # 9am 0.8
|
||||
1.8 0.54 0.9 0.18 1.8 1.8 1.8 # 10am 0.9
|
||||
2 0.6 1 0.2 2 2 2 # 11am 1
|
||||
2 0.6 1 0.2 2 2 2 # Midday tweaking value
|
||||
2 0.6 1 0.2 2 2 2 # 1pm 1
|
||||
2 0.6 1 0.2 2 2 2 # 2pm 1
|
||||
2.2 0.66 1.1 0.22 2.2 2.2 2.2 # 3pm 1.1
|
||||
2.2 0.66 1.1 0.22 2.2 2.2 2.2 # 4pm 1.1
|
||||
2.4 0.72 1.2 0.24 2.4 2.4 2.4 # 5pm 1.2
|
||||
2.4 0.72 1.2 0.24 2.4 2.4 2.4 # 6pm 1.2
|
||||
2.2 0.66 1.1 0.22 2.2 2.2 2.2 # 7pm 1.1
|
||||
2 0.6 1 0.2 2 2 2 # 8pm 1
|
||||
1.6 0.48 0.8 0.16 1.6 1.6 1.6 # 9pm 0.8
|
||||
1.2 0.36 0.6 0.12 1.2 1.2 1.2 # 10pm 0.6
|
||||
1 0.3 0.5 0.1 1 1 1 # 11pm 0.5
|
||||
|
||||
@@ -1,26 +1,30 @@
|
||||
# LM blend Table
|
||||
# SUNNY CLOUDY RAINY FOGGY
|
||||
0.700000 0.700000 0.700000 0.550000 # Midnight
|
||||
0.700000 0.700000 0.700000 0.550000 # 1am
|
||||
0.700000 0.700000 0.700000 0.550000 # 2am
|
||||
0.700000 0.700000 0.700000 0.550000 # 3am
|
||||
0.700000 0.700000 0.700000 0.550000 # 4am
|
||||
0.750000 0.750000 0.700000 0.600000 # 5am
|
||||
0.800000 0.800000 0.750000 0.600000 # 6am
|
||||
0.850000 0.850000 0.800000 0.650000 # 7am
|
||||
0.900000 0.900000 0.800000 0.700000 # 8am
|
||||
0.950000 0.900000 0.800000 0.700000 # 9am
|
||||
1.000000 0.900000 0.800000 0.700000 # 10am
|
||||
1.000000 0.900000 0.800000 0.700000 # 11am
|
||||
1.000000 0.900000 0.800000 0.700000 # Midday
|
||||
1.000000 0.900000 0.800000 0.700000 # 1pm
|
||||
1.000000 0.900000 0.800000 0.700000 # 2pm
|
||||
0.950000 0.900000 0.800000 0.700000 # 3pm
|
||||
0.900000 0.900000 0.800000 0.700000 # 4pm
|
||||
0.850000 0.850000 0.800000 0.650000 # 5pm
|
||||
0.800000 0.800000 0.750000 0.600000 # 6pm
|
||||
0.750000 0.750000 0.700000 0.600000 # 7pm
|
||||
0.700000 0.700000 0.700000 0.550000 # 8pm
|
||||
0.700000 0.700000 0.700000 0.550000 # 9pm
|
||||
0.700000 0.700000 0.700000 0.550000 # 10pm
|
||||
0.700000 0.700000 0.700000 0.550000 # 11pm
|
||||
# LM blend Table
|
||||
# SUNNY CLOUDY RAINY, FOGGY EXTRASUNNY HURRICANE EXTRACOLOURS basic daytime ramp
|
||||
0.45 0.6 0.75 0.525 0.45 0.75 0.375 # Midnight 0.75 0.1
|
||||
0.48 0.64 0.8 0.56 0.48 0.8 0.4 # 1am 0.8 0.2
|
||||
0.51 0.68 0.85 0.595 0.51 0.85 0.425 # 2am 0.85 0.3
|
||||
0.54 0.72 0.9 0.63 0.54 0.9 0.45 # 3am 0.9 0.4
|
||||
0.57 0.76 0.95 0.665 0.57 0.95 0.475 # 4am 0.95 0.6
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 5am 1 0.8
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 6am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 7am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 8am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 9am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 10am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 11am 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # Midday 1 tweak here
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 1pm 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 2pm 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 3pm 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 4pm 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 5pm 1 1
|
||||
0.6 0.8 1 0.7 0.6 1 0.5 # 6pm 1 0.8
|
||||
0.57 0.76 0.95 0.665 0.57 0.95 0.475 # 7pm 0.95 0.6
|
||||
0.54 0.72 0.9 0.63 0.54 0.9 0.45 # 8pm 0.9 0.5
|
||||
0.51 0.68 0.85 0.595 0.51 0.85 0.425 # 9pm 0.85 0.4
|
||||
0.48 0.64 0.8 0.56 0.48 0.8 0.4 # 10pm 0.8 0.3
|
||||
0.45 0.6 0.75 0.525 0.45 0.75 0.375 # 11pm 0.75 0.2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
965
premake5.lua
965
premake5.lua
@@ -1,477 +1,488 @@
|
||||
newoption {
|
||||
trigger = "glfwdir64",
|
||||
value = "PATH",
|
||||
description = "Directory of glfw",
|
||||
default = "vendor/glfw-3.3.2.bin.WIN64",
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "glfwdir32",
|
||||
value = "PATH",
|
||||
description = "Directory of glfw",
|
||||
default = "vendor/glfw-3.3.2.bin.WIN32",
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-asan",
|
||||
description = "Build with address sanitizer"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-librw",
|
||||
description = "Build and use librw from this solution"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-opus",
|
||||
description = "Build with opus"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-lto",
|
||||
description = "Build with link time optimization"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "no-git-hash",
|
||||
description = "Don't print git commit hash into binary"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "no-full-paths",
|
||||
description = "Don't print full paths into binary"
|
||||
}
|
||||
|
||||
require("autoconf")
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
Librw = "vendor/librw"
|
||||
else
|
||||
Librw = os.getenv("LIBRW") or "vendor/librw"
|
||||
end
|
||||
|
||||
function getsys(a)
|
||||
if a == 'windows' then
|
||||
return 'win'
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
function getarch(a)
|
||||
if a == 'x86_64' then
|
||||
return 'amd64'
|
||||
elseif a == 'ARM' then
|
||||
return 'arm'
|
||||
elseif a == 'ARM64' then
|
||||
return 'arm64'
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
workspace "re3"
|
||||
language "C++"
|
||||
configurations { "Debug", "Release" }
|
||||
startproject "re3"
|
||||
location "build"
|
||||
symbols "Full"
|
||||
staticruntime "off"
|
||||
|
||||
if _OPTIONS["with-asan"] then
|
||||
buildoptions { "-fsanitize=address -g3 -fno-omit-frame-pointer" }
|
||||
linkoptions { "-fsanitize=address" }
|
||||
end
|
||||
|
||||
filter { "system:windows" }
|
||||
configurations { "Vanilla" }
|
||||
platforms {
|
||||
"win-x86-RW33_d3d8-mss",
|
||||
"win-x86-librw_d3d9-mss",
|
||||
"win-x86-librw_gl3_glfw-mss",
|
||||
"win-x86-RW33_d3d8-oal",
|
||||
"win-x86-librw_d3d9-oal",
|
||||
"win-x86-librw_gl3_glfw-oal",
|
||||
"win-amd64-librw_d3d9-oal",
|
||||
"win-amd64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter { "system:linux" }
|
||||
platforms {
|
||||
"linux-x86-librw_gl3_glfw-oal",
|
||||
"linux-amd64-librw_gl3_glfw-oal",
|
||||
"linux-arm-librw_gl3_glfw-oal",
|
||||
"linux-arm64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter { "system:bsd" }
|
||||
platforms {
|
||||
"bsd-x86-librw_gl3_glfw-oal",
|
||||
"bsd-amd64-librw_gl3_glfw-oal",
|
||||
"bsd-arm-librw_gl3_glfw-oal",
|
||||
"bsd-arm64-librw_gl3_glfw-oal"
|
||||
}
|
||||
|
||||
filter { "system:macosx" }
|
||||
platforms {
|
||||
"macosx-arm64-librw_gl3_glfw-oal",
|
||||
"macosx-amd64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter "configurations:Debug"
|
||||
defines { "DEBUG" }
|
||||
|
||||
filter "configurations:not Debug"
|
||||
defines { "NDEBUG" }
|
||||
optimize "Speed"
|
||||
if(_OPTIONS["with-lto"]) then
|
||||
flags { "LinkTimeOptimization" }
|
||||
end
|
||||
|
||||
filter { "platforms:win*" }
|
||||
system "windows"
|
||||
|
||||
filter { "platforms:linux*" }
|
||||
system "linux"
|
||||
|
||||
filter { "platforms:bsd*" }
|
||||
system "bsd"
|
||||
|
||||
filter { "platforms:macosx*" }
|
||||
system "macosx"
|
||||
|
||||
filter { "platforms:*x86*" }
|
||||
architecture "x86"
|
||||
|
||||
filter { "platforms:*amd64*" }
|
||||
architecture "amd64"
|
||||
|
||||
filter { "platforms:*arm*" }
|
||||
architecture "ARM"
|
||||
|
||||
filter { "platforms:macosx-arm64-*", "files:**.cpp"}
|
||||
buildoptions { "-target", "arm64-apple-macos11", "-std=gnu++14" }
|
||||
|
||||
filter { "platforms:macosx-arm64-*", "files:**.c"}
|
||||
buildoptions { "-target", "arm64-apple-macos11" }
|
||||
|
||||
filter { "platforms:macosx-amd64-*", "files:**.cpp"}
|
||||
buildoptions { "-target", "x86_64-apple-macos10.12", "-std=gnu++14" }
|
||||
|
||||
filter { "platforms:macosx-amd64-*", "files:**.c"}
|
||||
buildoptions { "-target", "x86_64-apple-macos10.12" }
|
||||
|
||||
filter { "platforms:*librw_d3d9*" }
|
||||
defines { "RW_D3D9" }
|
||||
if(not _OPTIONS["with-librw"]) then
|
||||
libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") }
|
||||
end
|
||||
|
||||
filter "platforms:*librw_gl3_glfw*"
|
||||
defines { "RW_GL3" }
|
||||
if(not _OPTIONS["with-librw"]) then
|
||||
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
||||
end
|
||||
|
||||
filter "platforms:*x86-librw_gl3_glfw*"
|
||||
includedirs { path.join(_OPTIONS["glfwdir32"], "include") }
|
||||
|
||||
filter "platforms:*amd64-librw_gl3_glfw*"
|
||||
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
||||
|
||||
filter {}
|
||||
|
||||
function setpaths (gamepath, exepath)
|
||||
if (gamepath) then
|
||||
postbuildcommands {
|
||||
'{COPYFILE} "%{cfg.buildtarget.abspath}" "' .. gamepath .. '%{cfg.buildtarget.name}"'
|
||||
}
|
||||
debugdir (gamepath)
|
||||
if (exepath) then
|
||||
-- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS??
|
||||
debugcommand (gamepath .. "$(TargetFileName)")
|
||||
dir, file = exepath:match'(.*/)(.*)'
|
||||
debugdir (gamepath .. (dir or ""))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
project "librw"
|
||||
kind "StaticLib"
|
||||
targetname "rw"
|
||||
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
||||
files { path.join(Librw, "src/*.*") }
|
||||
files { path.join(Librw, "src/*/*.*") }
|
||||
files { path.join(Librw, "src/gl/*/*.*") }
|
||||
|
||||
filter { "platforms:*x86*" }
|
||||
architecture "x86"
|
||||
|
||||
filter { "platforms:*amd64*" }
|
||||
architecture "amd64"
|
||||
|
||||
filter "platforms:win*"
|
||||
defines { "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE" }
|
||||
staticruntime "on"
|
||||
buildoptions { "/Zc:sizedDealloc-" }
|
||||
|
||||
filter "platforms:bsd*"
|
||||
includedirs { "/usr/local/include" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
-- Support MacPorts and Homebrew
|
||||
filter "platforms:macosx-arm64-*"
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/opt/homebrew/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/opt/homebrew/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*"
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/usr/local/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
filter "platforms:*gl3_glfw*"
|
||||
staticruntime "off"
|
||||
|
||||
filter "platforms:*RW33*"
|
||||
flags { "ExcludeFromBuild" }
|
||||
filter {}
|
||||
end
|
||||
|
||||
local function addSrcFiles( prefix )
|
||||
return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc"
|
||||
end
|
||||
|
||||
project "re3"
|
||||
kind "WindowedApp"
|
||||
targetname "re3"
|
||||
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
dependson "librw"
|
||||
end
|
||||
|
||||
files { addSrcFiles("src") }
|
||||
files { addSrcFiles("src/animation") }
|
||||
files { addSrcFiles("src/audio") }
|
||||
files { addSrcFiles("src/audio/eax") }
|
||||
files { addSrcFiles("src/audio/oal") }
|
||||
files { addSrcFiles("src/buildings") }
|
||||
files { addSrcFiles("src/collision") }
|
||||
files { addSrcFiles("src/control") }
|
||||
files { addSrcFiles("src/core") }
|
||||
files { addSrcFiles("src/entities") }
|
||||
files { addSrcFiles("src/math") }
|
||||
files { addSrcFiles("src/modelinfo") }
|
||||
files { addSrcFiles("src/objects") }
|
||||
files { addSrcFiles("src/peds") }
|
||||
files { addSrcFiles("src/renderer") }
|
||||
files { addSrcFiles("src/rw") }
|
||||
files { addSrcFiles("src/save") }
|
||||
files { addSrcFiles("src/skel") }
|
||||
files { addSrcFiles("src/skel/glfw") }
|
||||
files { addSrcFiles("src/text") }
|
||||
files { addSrcFiles("src/vehicles") }
|
||||
files { addSrcFiles("src/weapons") }
|
||||
files { addSrcFiles("src/extras") }
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
files { "src/extras/GitSHA1.cpp" } -- this won't be in repo in first build
|
||||
else
|
||||
removefiles { "src/extras/GitSHA1.cpp" } -- but it will be everytime after
|
||||
end
|
||||
|
||||
includedirs { "src" }
|
||||
includedirs { "src/animation" }
|
||||
includedirs { "src/audio" }
|
||||
includedirs { "src/audio/eax" }
|
||||
includedirs { "src/audio/oal" }
|
||||
includedirs { "src/buildings" }
|
||||
includedirs { "src/collision" }
|
||||
includedirs { "src/control" }
|
||||
includedirs { "src/core" }
|
||||
includedirs { "src/entities" }
|
||||
includedirs { "src/math" }
|
||||
includedirs { "src/modelinfo" }
|
||||
includedirs { "src/objects" }
|
||||
includedirs { "src/peds" }
|
||||
includedirs { "src/renderer" }
|
||||
includedirs { "src/rw" }
|
||||
includedirs { "src/save/" }
|
||||
includedirs { "src/skel/" }
|
||||
includedirs { "src/skel/glfw" }
|
||||
includedirs { "src/text" }
|
||||
includedirs { "src/vehicles" }
|
||||
includedirs { "src/weapons" }
|
||||
includedirs { "src/extras" }
|
||||
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
defines { "USE_OUR_VERSIONING" }
|
||||
end
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
includedirs { "vendor/ogg/include" }
|
||||
includedirs { "vendor/opus/include" }
|
||||
includedirs { "vendor/opusfile/include" }
|
||||
end
|
||||
|
||||
filter "configurations:Vanilla"
|
||||
defines { "VANILLA_DEFINES" }
|
||||
|
||||
filter "platforms:*mss"
|
||||
defines { "AUDIO_MSS" }
|
||||
includedirs { "vendor/milessdk/include" }
|
||||
libdirs { "vendor/milessdk/lib" }
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
filter "platforms:win*"
|
||||
libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||
libdirs { "vendor/opus/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||
libdirs { "vendor/opusfile/win32/VS2015/Win32/Release-NoHTTP" }
|
||||
filter {}
|
||||
defines { "AUDIO_OPUS" }
|
||||
end
|
||||
|
||||
filter "platforms:*oal"
|
||||
defines { "AUDIO_OAL" }
|
||||
|
||||
filter {}
|
||||
if(os.getenv("GTA_III_RE_DIR")) then
|
||||
setpaths(os.getenv("GTA_III_RE_DIR") .. "/", "%(cfg.buildtarget.name)")
|
||||
end
|
||||
|
||||
filter "platforms:win*"
|
||||
files { addSrcFiles("src/skel/win") }
|
||||
includedirs { "src/skel/win" }
|
||||
buildoptions { "/Zc:sizedDealloc-" }
|
||||
linkoptions "/SAFESEH:NO"
|
||||
characterset ("MBCS")
|
||||
targetextension ".exe"
|
||||
if(_OPTIONS["no-full-paths"]) then
|
||||
usefullpaths "off"
|
||||
linkoptions "/PDBALTPATH:%_PDB%"
|
||||
end
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
-- external librw is dynamic
|
||||
staticruntime "on"
|
||||
end
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' }
|
||||
end
|
||||
|
||||
filter "platforms:not win*"
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' }
|
||||
end
|
||||
|
||||
filter "platforms:win*glfw*"
|
||||
staticruntime "off"
|
||||
|
||||
filter "platforms:*glfw*"
|
||||
premake.modules.autoconf.parameters = "-lglfw -lX11"
|
||||
autoconfigure {
|
||||
-- iterates all configs and runs on them
|
||||
["dontWrite"] = function (cfg)
|
||||
check_symbol_exists(cfg, "haveX11", "glfwGetX11Display", { "X11/Xlib.h", "X11/XKBlib.h", "GLFW/glfw3.h", "GLFW/glfw3native.h" }, "GLFW_EXPOSE_NATIVE_X11")
|
||||
if cfg.autoconf["haveX11"] ~= nil and cfg.autoconf["haveX11"] == 1 then
|
||||
table.insert(cfg.links, "X11")
|
||||
table.insert(cfg.defines, "GET_KEYBOARD_INPUT_FROM_X11")
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
filter "platforms:win*oal"
|
||||
includedirs { "vendor/openal-soft/include" }
|
||||
includedirs { "vendor/libsndfile/include" }
|
||||
includedirs { "vendor/mpg123/include" }
|
||||
|
||||
filter "platforms:win-x86*oal"
|
||||
libdirs { "vendor/mpg123/lib/Win32" }
|
||||
libdirs { "vendor/libsndfile/lib/Win32" }
|
||||
libdirs { "vendor/openal-soft/libs/Win32" }
|
||||
|
||||
filter "platforms:win-amd64*oal"
|
||||
libdirs { "vendor/mpg123/lib/Win64" }
|
||||
libdirs { "vendor/libsndfile/lib/Win64" }
|
||||
libdirs { "vendor/openal-soft/libs/Win64" }
|
||||
|
||||
filter "platforms:linux*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:bsd*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:macosx*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:macosx-arm64-*oal"
|
||||
includedirs { "/opt/homebrew/opt/openal-soft/include" }
|
||||
libdirs { "/opt/homebrew/opt/openal-soft/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*oal"
|
||||
includedirs { "/usr/local/opt/openal-soft/include" }
|
||||
libdirs { "/usr/local/opt/openal-soft/lib" }
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
filter {}
|
||||
links { "libogg" }
|
||||
links { "opus" }
|
||||
links { "opusfile" }
|
||||
end
|
||||
|
||||
filter "platforms:*RW33*"
|
||||
includedirs { "sdk/rwsdk/include/d3d8" }
|
||||
libdirs { "sdk/rwsdk/lib/d3d8/release" }
|
||||
links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse", "rpanisot" }
|
||||
defines { "RWLIBS" }
|
||||
linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text"
|
||||
|
||||
filter "platforms:*librw*"
|
||||
defines { "LIBRW" }
|
||||
files { addSrcFiles("src/fakerw") }
|
||||
includedirs { "src/fakerw" }
|
||||
includedirs { Librw }
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
libdirs { "vendor/librw/lib/%{cfg.platform}/%{cfg.buildcfg}" }
|
||||
end
|
||||
links { "rw" }
|
||||
|
||||
filter "platforms:*d3d9*"
|
||||
defines { "USE_D3D9" }
|
||||
links { "d3d9" }
|
||||
|
||||
filter "platforms:*x86*d3d*"
|
||||
includedirs { "sdk/dx8sdk/include" }
|
||||
libdirs { "sdk/dx8sdk/lib" }
|
||||
|
||||
filter "platforms:win-x86*gl3_glfw*"
|
||||
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||
links { "opengl32", "glfw3" }
|
||||
|
||||
filter "platforms:win-amd64*gl3_glfw*"
|
||||
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||
links { "opengl32", "glfw3" }
|
||||
|
||||
filter "platforms:linux*gl3_glfw*"
|
||||
links { "GL", "glfw" }
|
||||
|
||||
filter "platforms:bsd*gl3_glfw*"
|
||||
links { "GL", "glfw", "sysinfo" }
|
||||
includedirs { "/usr/local/include" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
filter "platforms:macosx-arm64-*gl3_glfw*"
|
||||
links { "glfw" }
|
||||
linkoptions { "-framework OpenGL" }
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/opt/homebrew/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/opt/homebrew/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*gl3_glfw*"
|
||||
links { "glfw" }
|
||||
linkoptions { "-framework OpenGL" }
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/usr/local/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
newoption {
|
||||
trigger = "glfwdir64",
|
||||
value = "PATH",
|
||||
description = "Directory of glfw",
|
||||
default = "vendor/glfw-3.3.2.bin.WIN64",
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "glfwdir32",
|
||||
value = "PATH",
|
||||
description = "Directory of glfw",
|
||||
default = "vendor/glfw-3.3.2.bin.WIN32",
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-asan",
|
||||
description = "Build with address sanitizer"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-librw",
|
||||
description = "Build and use librw from this solution"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-opus",
|
||||
description = "Build with opus"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "with-lto",
|
||||
description = "Build with link time optimization"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "no-git-hash",
|
||||
description = "Don't print git commit hash into binary"
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "no-full-paths",
|
||||
description = "Don't print full paths into binary"
|
||||
}
|
||||
|
||||
require("autoconf")
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
Librw = "vendor/librw"
|
||||
else
|
||||
Librw = os.getenv("LIBRW") or "vendor/librw"
|
||||
end
|
||||
|
||||
function getsys(a)
|
||||
if a == 'windows' then
|
||||
return 'win'
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
function getarch(a)
|
||||
if a == 'x86_64' then
|
||||
return 'amd64'
|
||||
elseif a == 'ARM' then
|
||||
return 'arm'
|
||||
elseif a == 'ARM64' then
|
||||
return 'arm64'
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
workspace "reLCS"
|
||||
language "C++"
|
||||
configurations { "Debug", "Release" }
|
||||
startproject "reLCS"
|
||||
location "build"
|
||||
symbols "Full"
|
||||
staticruntime "off"
|
||||
|
||||
-- for CVECTORHACK
|
||||
configuration { "gmake*" }
|
||||
buildoptions { "-fpermissive" }
|
||||
|
||||
filter { "platforms:macosx*" }
|
||||
buildoptions { "-Wno-address-of-temporary" }
|
||||
|
||||
if _OPTIONS["with-asan"] then
|
||||
buildoptions { "-fsanitize=address -g3 -fno-omit-frame-pointer" }
|
||||
linkoptions { "-fsanitize=address" }
|
||||
end
|
||||
|
||||
filter { "system:windows" }
|
||||
configurations { "Vanilla" }
|
||||
platforms {
|
||||
"win-x86-RW34_d3d8-mss",
|
||||
"win-x86-librw_d3d9-mss",
|
||||
"win-x86-librw_gl3_glfw-mss",
|
||||
"win-x86-RW34_d3d8-oal",
|
||||
"win-x86-librw_d3d9-oal",
|
||||
"win-x86-librw_gl3_glfw-oal",
|
||||
"win-amd64-librw_d3d9-oal",
|
||||
"win-amd64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter { "system:linux" }
|
||||
platforms {
|
||||
"linux-x86-librw_gl3_glfw-oal",
|
||||
"linux-amd64-librw_gl3_glfw-oal",
|
||||
"linux-arm-librw_gl3_glfw-oal",
|
||||
"linux-arm64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter { "system:bsd" }
|
||||
platforms {
|
||||
"bsd-x86-librw_gl3_glfw-oal",
|
||||
"bsd-amd64-librw_gl3_glfw-oal",
|
||||
"bsd-arm-librw_gl3_glfw-oal",
|
||||
"bsd-arm64-librw_gl3_glfw-oal"
|
||||
}
|
||||
|
||||
filter { "system:macosx" }
|
||||
platforms {
|
||||
"macosx-arm64-librw_gl3_glfw-oal",
|
||||
"macosx-amd64-librw_gl3_glfw-oal",
|
||||
}
|
||||
|
||||
filter "configurations:Debug"
|
||||
defines { "DEBUG" }
|
||||
|
||||
filter "configurations:not Debug"
|
||||
defines { "NDEBUG" }
|
||||
optimize "Speed"
|
||||
if(_OPTIONS["with-lto"]) then
|
||||
flags { "LinkTimeOptimization" }
|
||||
end
|
||||
|
||||
filter { "platforms:win*" }
|
||||
system "windows"
|
||||
|
||||
filter { "platforms:linux*" }
|
||||
system "linux"
|
||||
|
||||
filter { "platforms:bsd*" }
|
||||
system "bsd"
|
||||
|
||||
filter { "platforms:macosx*" }
|
||||
system "macosx"
|
||||
|
||||
filter { "platforms:*x86*" }
|
||||
architecture "x86"
|
||||
|
||||
filter { "platforms:*amd64*" }
|
||||
architecture "amd64"
|
||||
|
||||
filter { "platforms:*arm*" }
|
||||
architecture "ARM"
|
||||
|
||||
filter { "platforms:macosx-arm64-*", "files:**.cpp"}
|
||||
buildoptions { "-target", "arm64-apple-macos11", "-std=gnu++14" }
|
||||
|
||||
filter { "platforms:macosx-arm64-*", "files:**.c"}
|
||||
buildoptions { "-target", "arm64-apple-macos11" }
|
||||
|
||||
filter { "platforms:macosx-amd64-*", "files:**.cpp"}
|
||||
buildoptions { "-target", "x86_64-apple-macos10.12", "-std=gnu++14" }
|
||||
|
||||
filter { "platforms:macosx-amd64-*", "files:**.c"}
|
||||
buildoptions { "-target", "x86_64-apple-macos10.12" }
|
||||
|
||||
filter { "platforms:*librw_d3d9*" }
|
||||
defines { "RW_D3D9" }
|
||||
if(not _OPTIONS["with-librw"]) then
|
||||
libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") }
|
||||
end
|
||||
|
||||
filter "platforms:*librw_gl3_glfw*"
|
||||
defines { "RW_GL3" }
|
||||
if(not _OPTIONS["with-librw"]) then
|
||||
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
||||
end
|
||||
|
||||
filter "platforms:*x86-librw_gl3_glfw*"
|
||||
includedirs { path.join(_OPTIONS["glfwdir32"], "include") }
|
||||
|
||||
filter "platforms:*amd64-librw_gl3_glfw*"
|
||||
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
||||
|
||||
filter {}
|
||||
|
||||
function setpaths (gamepath, exepath)
|
||||
if (gamepath) then
|
||||
postbuildcommands {
|
||||
'{COPYFILE} "%{cfg.buildtarget.abspath}" "' .. gamepath .. '%{cfg.buildtarget.name}"'
|
||||
}
|
||||
debugdir (gamepath)
|
||||
if (exepath) then
|
||||
-- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS??
|
||||
debugcommand (gamepath .. "$(TargetFileName)")
|
||||
dir, file = exepath:match'(.*/)(.*)'
|
||||
debugdir (gamepath .. (dir or ""))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
project "librw"
|
||||
kind "StaticLib"
|
||||
targetname "rw"
|
||||
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
||||
files { path.join(Librw, "src/*.*") }
|
||||
files { path.join(Librw, "src/*/*.*") }
|
||||
files { path.join(Librw, "src/gl/*/*.*") }
|
||||
|
||||
filter { "platforms:*x86*" }
|
||||
architecture "x86"
|
||||
|
||||
filter { "platforms:*amd64*" }
|
||||
architecture "amd64"
|
||||
|
||||
filter "platforms:win*"
|
||||
defines { "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE" }
|
||||
staticruntime "on"
|
||||
buildoptions { "/Zc:sizedDealloc-" }
|
||||
|
||||
filter "platforms:bsd*"
|
||||
includedirs { "/usr/local/include" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
-- Support MacPorts and Homebrew
|
||||
filter "platforms:macosx-arm64-*"
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/opt/homebrew/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/opt/homebrew/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*"
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/usr/local/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
filter "platforms:*gl3_glfw*"
|
||||
staticruntime "off"
|
||||
|
||||
filter "platforms:*RW34*"
|
||||
flags { "ExcludeFromBuild" }
|
||||
filter {}
|
||||
end
|
||||
|
||||
local function addSrcFiles( prefix )
|
||||
return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc"
|
||||
end
|
||||
|
||||
project "reLCS"
|
||||
kind "WindowedApp"
|
||||
targetname "reLCS"
|
||||
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
||||
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
dependson "librw"
|
||||
end
|
||||
|
||||
files { addSrcFiles("src") }
|
||||
files { addSrcFiles("src/animation") }
|
||||
files { addSrcFiles("src/audio") }
|
||||
files { addSrcFiles("src/audio/eax") }
|
||||
files { addSrcFiles("src/audio/oal") }
|
||||
files { addSrcFiles("src/buildings") }
|
||||
files { addSrcFiles("src/collision") }
|
||||
files { addSrcFiles("src/control") }
|
||||
files { addSrcFiles("src/core") }
|
||||
files { addSrcFiles("src/entities") }
|
||||
files { addSrcFiles("src/leeds") }
|
||||
files { addSrcFiles("src/leeds/base") }
|
||||
files { addSrcFiles("src/math") }
|
||||
files { addSrcFiles("src/modelinfo") }
|
||||
files { addSrcFiles("src/objects") }
|
||||
files { addSrcFiles("src/peds") }
|
||||
files { addSrcFiles("src/renderer") }
|
||||
files { addSrcFiles("src/rw") }
|
||||
files { addSrcFiles("src/save") }
|
||||
files { addSrcFiles("src/skel") }
|
||||
files { addSrcFiles("src/skel/glfw") }
|
||||
files { addSrcFiles("src/text") }
|
||||
files { addSrcFiles("src/vehicles") }
|
||||
files { addSrcFiles("src/weapons") }
|
||||
files { addSrcFiles("src/extras") }
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
files { "src/extras/GitSHA1.cpp" } -- this won't be in repo in first build
|
||||
else
|
||||
removefiles { "src/extras/GitSHA1.cpp" } -- but it will be everytime after
|
||||
end
|
||||
|
||||
includedirs { "src" }
|
||||
includedirs { "src/animation" }
|
||||
includedirs { "src/audio" }
|
||||
includedirs { "src/audio/eax" }
|
||||
includedirs { "src/audio/oal" }
|
||||
includedirs { "src/buildings" }
|
||||
includedirs { "src/collision" }
|
||||
includedirs { "src/control" }
|
||||
includedirs { "src/core" }
|
||||
includedirs { "src/entities" }
|
||||
includedirs { "src/leeds" }
|
||||
includedirs { "src/leeds/base" }
|
||||
includedirs { "src/math" }
|
||||
includedirs { "src/modelinfo" }
|
||||
includedirs { "src/objects" }
|
||||
includedirs { "src/peds" }
|
||||
includedirs { "src/renderer" }
|
||||
includedirs { "src/rw" }
|
||||
includedirs { "src/save/" }
|
||||
includedirs { "src/skel/" }
|
||||
includedirs { "src/skel/glfw" }
|
||||
includedirs { "src/text" }
|
||||
includedirs { "src/vehicles" }
|
||||
includedirs { "src/weapons" }
|
||||
includedirs { "src/extras" }
|
||||
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
defines { "USE_OUR_VERSIONING" }
|
||||
end
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
includedirs { "vendor/ogg/include" }
|
||||
includedirs { "vendor/opus/include" }
|
||||
includedirs { "vendor/opusfile/include" }
|
||||
end
|
||||
|
||||
filter "configurations:Vanilla"
|
||||
defines { "VANILLA_DEFINES" }
|
||||
|
||||
filter "platforms:*mss"
|
||||
defines { "AUDIO_MSS" }
|
||||
includedirs { "vendor/milessdk/include" }
|
||||
libdirs { "vendor/milessdk/lib" }
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
filter "platforms:win*"
|
||||
libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||
libdirs { "vendor/opus/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||
libdirs { "vendor/opusfile/win32/VS2015/Win32/Release-NoHTTP" }
|
||||
filter {}
|
||||
defines { "AUDIO_OPUS" }
|
||||
end
|
||||
|
||||
filter "platforms:*oal"
|
||||
defines { "AUDIO_OAL" }
|
||||
|
||||
filter {}
|
||||
if(os.getenv("GTA_LCS_RE_DIR")) then
|
||||
setpaths(os.getenv("GTA_LCS_RE_DIR") .. "/", "%(cfg.buildtarget.name)")
|
||||
end
|
||||
|
||||
filter "platforms:win*"
|
||||
files { addSrcFiles("src/skel/win") }
|
||||
includedirs { "src/skel/win" }
|
||||
buildoptions { "/Zc:sizedDealloc-" }
|
||||
linkoptions "/SAFESEH:NO"
|
||||
characterset ("MBCS")
|
||||
targetextension ".exe"
|
||||
if(_OPTIONS["no-full-paths"]) then
|
||||
usefullpaths "off"
|
||||
linkoptions "/PDBALTPATH:%_PDB%"
|
||||
end
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
-- external librw is dynamic
|
||||
staticruntime "on"
|
||||
end
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' }
|
||||
end
|
||||
|
||||
filter "platforms:not win*"
|
||||
if(not _OPTIONS["no-git-hash"]) then
|
||||
prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' }
|
||||
end
|
||||
|
||||
filter "platforms:win*glfw*"
|
||||
staticruntime "off"
|
||||
|
||||
filter "platforms:*glfw*"
|
||||
premake.modules.autoconf.parameters = "-lglfw -lX11"
|
||||
autoconfigure {
|
||||
-- iterates all configs and runs on them
|
||||
["dontWrite"] = function (cfg)
|
||||
check_symbol_exists(cfg, "haveX11", "glfwGetX11Display", { "X11/Xlib.h", "X11/XKBlib.h", "GLFW/glfw3.h", "GLFW/glfw3native.h" }, "GLFW_EXPOSE_NATIVE_X11")
|
||||
if cfg.autoconf["haveX11"] ~= nil and cfg.autoconf["haveX11"] == 1 then
|
||||
table.insert(cfg.links, "X11")
|
||||
table.insert(cfg.defines, "GET_KEYBOARD_INPUT_FROM_X11")
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
filter "platforms:win*oal"
|
||||
includedirs { "vendor/openal-soft/include" }
|
||||
includedirs { "vendor/libsndfile/include" }
|
||||
includedirs { "vendor/mpg123/include" }
|
||||
|
||||
filter "platforms:win-x86*oal"
|
||||
libdirs { "vendor/mpg123/lib/Win32" }
|
||||
libdirs { "vendor/libsndfile/lib/Win32" }
|
||||
libdirs { "vendor/openal-soft/libs/Win32" }
|
||||
|
||||
filter "platforms:win-amd64*oal"
|
||||
libdirs { "vendor/mpg123/lib/Win64" }
|
||||
libdirs { "vendor/libsndfile/lib/Win64" }
|
||||
libdirs { "vendor/openal-soft/libs/Win64" }
|
||||
|
||||
filter "platforms:linux*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:bsd*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:macosx*oal"
|
||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||
|
||||
filter "platforms:macosx-arm64-*oal"
|
||||
includedirs { "/opt/homebrew/opt/openal-soft/include" }
|
||||
libdirs { "/opt/homebrew/opt/openal-soft/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*oal"
|
||||
includedirs { "/usr/local/opt/openal-soft/include" }
|
||||
libdirs { "/usr/local/opt/openal-soft/lib" }
|
||||
|
||||
if _OPTIONS["with-opus"] then
|
||||
filter {}
|
||||
links { "libogg" }
|
||||
links { "opus" }
|
||||
links { "opusfile" }
|
||||
end
|
||||
|
||||
filter "platforms:*RW34*"
|
||||
includedirs { "sdk/rwsdk/include/d3d8" }
|
||||
libdirs { "sdk/rwsdk/lib/d3d8/release" }
|
||||
links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtanim", "rtcharse", "rpanisot" }
|
||||
defines { "RWLIBS" }
|
||||
linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text"
|
||||
|
||||
filter "platforms:*librw*"
|
||||
defines { "LIBRW" }
|
||||
files { addSrcFiles("src/fakerw") }
|
||||
includedirs { "src/fakerw" }
|
||||
includedirs { Librw }
|
||||
if(_OPTIONS["with-librw"]) then
|
||||
libdirs { "vendor/librw/lib/%{cfg.platform}/%{cfg.buildcfg}" }
|
||||
end
|
||||
links { "rw" }
|
||||
|
||||
filter "platforms:*d3d9*"
|
||||
defines { "USE_D3D9" }
|
||||
links { "d3d9" }
|
||||
|
||||
filter "platforms:*x86*d3d*"
|
||||
includedirs { "sdk/dx8sdk/include" }
|
||||
libdirs { "sdk/dx8sdk/lib" }
|
||||
|
||||
filter "platforms:win-x86*gl3_glfw*"
|
||||
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||
links { "opengl32", "glfw3" }
|
||||
|
||||
filter "platforms:win-amd64*gl3_glfw*"
|
||||
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||
links { "opengl32", "glfw3" }
|
||||
|
||||
filter "platforms:linux*gl3_glfw*"
|
||||
links { "GL", "glfw" }
|
||||
|
||||
filter "platforms:bsd*gl3_glfw*"
|
||||
links { "GL", "glfw", "sysinfo" }
|
||||
includedirs { "/usr/local/include" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
filter "platforms:macosx-arm64-*gl3_glfw*"
|
||||
links { "glfw" }
|
||||
linkoptions { "-framework OpenGL" }
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/opt/homebrew/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/opt/homebrew/lib" }
|
||||
|
||||
filter "platforms:macosx-amd64-*gl3_glfw*"
|
||||
links { "glfw" }
|
||||
linkoptions { "-framework OpenGL" }
|
||||
includedirs { "/opt/local/include" }
|
||||
includedirs {"/usr/local/include" }
|
||||
libdirs { "/opt/local/lib" }
|
||||
libdirs { "/usr/local/lib" }
|
||||
|
||||
@@ -7,18 +7,51 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="re3_final.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="reVC.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07, custom)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 270.93331 270.93334"
|
||||
height="1024"
|
||||
width="1024"
|
||||
inkscape:export-filename="/home/hazelnot/Design/re3_red.png"
|
||||
inkscape:export-filename="/home/hazelnot/Design/re3_final.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
id="defs2">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1055">
|
||||
<feFlood
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1045" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1047" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="0"
|
||||
result="blur"
|
||||
id="feGaussianBlur1049" />
|
||||
<feOffset
|
||||
dx="1"
|
||||
dy="1"
|
||||
result="offset"
|
||||
id="feOffset1051" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="offset"
|
||||
operator="over"
|
||||
result="composite2"
|
||||
id="feComposite1053" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
@@ -30,10 +63,10 @@
|
||||
inkscape:pagecheckerboard="false"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="g837"
|
||||
inkscape:current-layer="svg8"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="544.84615"
|
||||
inkscape:cx="415.73725"
|
||||
inkscape:cy="624.20389"
|
||||
inkscape:cx="108.63858"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
@@ -61,10 +94,11 @@
|
||||
</metadata>
|
||||
<g
|
||||
id="g837"
|
||||
transform="matrix(2.1130708,0,0,2.1130708,14.956432,63.50059)">
|
||||
transform="matrix(2.1130708,0,0,2.1130708,14.956432,63.50059)"
|
||||
style="display:none">
|
||||
<path
|
||||
id="path1450"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.836;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.83595;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.91799998,0.91799998 V 54.101316 H 17.960888 v 2.33009 c 0,2.95453 1.347497,6.384348 3.911905,8.332308 2.564408,1.947971 5.514112,2.433445 8.500257,2.433445 h 46.367194 v -14.5464 c 2.171993,1.134845 4.548071,1.450557 6.948413,1.450557 h 17.042893 c 2.98614,0 5.93584,-0.485482 8.50025,-2.433442 2.5644,-1.94796 3.91191,-5.377273 3.91191,-8.331793 V 30.964744 c 0,-1.094128 -0.25094,-2.296243 -0.70487,-3.457153 0.45593,-1.16196 0.70487,-2.363609 0.70487,-3.453019 V 11.81656 c 0,-2.9682265 -1.29681,-6.3966108 -3.85713,-8.3907028 -2.56031,-1.9940909 -5.55104,-2.50785722 -8.55503,-2.50785722 H 83.819398 c -3.003989,0 -5.99213,0.51376632 -8.55245,2.50785722 C 74.832145,3.7645045 74.436551,4.1470248 74.074773,4.5591214 73.713016,4.1470532 73.317379,3.7644843 72.8826,3.4258572 70.322288,1.4317663 67.332073,0.91799998 64.328081,0.91799998 H 47.285195 c -2.976748,0 -5.937909,0.51342982 -8.482687,2.46289872 C 36.275393,1.4370808 33.325985,0.91799998 30.37305,0.91799998 Z"
|
||||
inkscape:label="Border" />
|
||||
<g
|
||||
@@ -79,10 +113,50 @@
|
||||
transform="translate(-2.6458322)"
|
||||
inkscape:label="re" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Pricedown;-inkscape-font-specification:Pricedown;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c60000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11.136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Pricedown;-inkscape-font-specification:Pricedown;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c60000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11.1359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 135.23613,125.97382 c -4.56245,0 -6.84367,-1.73285 -6.84367,-5.19855 v -7.89654 h 13.68733 v 2.50057 c 0,0.0877 0.0439,0.13161 0.13161,0.13161 h 3.09281 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -6.11982 c 0,-0.0877 -0.0439,-0.13161 -0.13161,-0.13161 h -16.71434 v -8.35717 h 16.71434 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -6.054011 c 0,-0.08774 -0.0439,-0.131609 -0.13161,-0.131609 h -3.09281 c -0.0877,0 -0.13161,0.04387 -0.13161,0.131609 v 2.434766 h -13.55572 v -7.764931 c 0,-3.553443 2.28122,-5.330164 6.84366,-5.330164 h 16.91176 c 4.56245,0 6.84367,1.776721 6.84367,5.330164 v 12.239636 c 0,2.01801 -1.14061,3.15862 -3.42184,3.42183 2.28123,0.30709 3.42184,1.46964 3.42184,3.48764 v 12.37125 c 0,3.4657 -2.28122,5.19855 -6.84367,5.19855 z"
|
||||
id="path1458"
|
||||
inkscape:label="3" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3625-7"
|
||||
inkscape:label="reVC_10"
|
||||
transform="matrix(2.4113736,0,0,2.4113736,-122.44911,-160.08821)">
|
||||
<path
|
||||
style="display:inline;fill:#00bbe2;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 102.78895,112.11187 54.54276,9.96769 -30.34918,43.22598 z"
|
||||
id="path1613-9"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="triangle" />
|
||||
<g
|
||||
id="g3669-0"
|
||||
style="display:inline;opacity:1"
|
||||
inkscape:label="re">
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:1.60863;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 57.388672,80.632812 v 48.632808 h 17.042969 v 4.60547 c 0,2.45514 1.029322,5.01368 3.011718,6.51953 1.982397,1.50586 4.425056,1.97071 7.123047,1.97071 H 128.6582 v -17.04688 h -1.47851 c 0.87224,-1.37715 1.47851,-2.92106 1.47851,-4.53906 v -7.23633 -3.95312 -20.330081 c 0,-2.481169 -1.00049,-5.053605 -2.98047,-6.595703 -1.97997,-1.542097 -4.44771,-2.027344 -7.15625,-2.027344 h -17.04296 c -2.708546,10e-7 -5.176278,0.485247 -7.156254,2.027344 -0.588908,0.458669 -0.913121,1.140613 -1.328125,1.751953 -0.409812,-0.606749 -0.72664,-1.284534 -1.308594,-1.742187 -1.967878,-1.547555 -4.428385,-2.03711 -7.119141,-2.03711 z m 6.582031,6.583985 h 20.595703 c 1.827819,0 2.757419,0.399739 3.048828,0.628906 0.29141,0.229167 0.4375,0.331111 0.4375,1.410156 v 12.238281 c 0,0.0702 0.0022,0.0438 0.002,0.0801 0.03874,-0.0312 0.06635,0.0114 -0.451172,0.0723 l -0.05469,6.53321 c 0.66816,0.0899 0.752817,0.24295 0.65625,0.14453 -0.09657,-0.0984 -0.08594,-0.3087 -0.08594,0.0801 v 20.07031 c 0,0.59276 0.198598,1.6281 0.996093,2.42578 0.797496,0.79768 1.834701,0.99805 2.427735,0.99805 h 30.53125 v 3.8789 H 84.566406 c -1.864454,0 -2.841799,-0.40191 -3.140625,-0.6289 -0.298826,-0.227 -0.410156,-0.26677 -0.410156,-1.27735 v -24.61132 c 0,-0.59276 -0.200551,-1.6281 -0.998047,-2.42579 -0.797496,-0.79768 -1.832748,-0.99804 -2.425781,-0.99804 h -6.517578 v 16.8457 h -7.103516 z m 37.507817,0 h 17.04296 c 1.8539,0 2.80813,0.402095 3.10938,0.636719 0.30124,0.234623 0.44336,0.33007 0.44336,1.402343 V 106.95508 H 105.0293 v 8.42383 c 0,0.59313 0.20067,1.63031 0.99804,2.42773 0.79738,0.79742 1.83258,0.99609 2.42578,0.99609 h 3.09376 c 0.59313,0 1.62836,-0.19872 2.42578,-0.99609 0.51996,-0.51993 0.73732,-1.1028 0.85937,-1.63672 h 7.24219 v 4.60547 c 0,1.01057 -0.11133,1.05035 -0.41016,1.27734 -0.29882,0.227 -1.27812,0.62891 -3.14258,0.62891 h -17.04296 c -1.864458,0 -2.841803,-0.40191 -3.140629,-0.62891 -0.298826,-0.22699 -0.410157,-0.26677 -0.410157,-1.27734 V 89.255859 c 0,-1.072272 0.140161,-1.167719 0.441407,-1.402343 0.301246,-0.234625 1.255472,-0.636719 3.109379,-0.636719 z M 71.074219,91.162109 V 104.0625 h 6.517578 c 0.592903,0 1.628193,-0.20031 2.425781,-0.99805 0.797588,-0.79773 0.998047,-1.83309 0.998047,-2.42578 v -6.052732 c 0,-0.592528 -0.200189,-1.629881 -0.998047,-2.427735 -0.797858,-0.797853 -1.83326,-0.996094 -2.425781,-0.996094 z m 37.378901,0 c -0.59275,0 -1.62809,0.198598 -2.42578,0.996094 -0.79768,0.797496 -0.99804,1.834701 -0.99804,2.427735 v 9.148442 h 9.9414 v -9.148442 c 0,-0.592903 -0.20031,-1.630147 -0.99804,-2.427735 -0.79774,-0.797588 -1.8331,-0.996094 -2.42578,-0.996094 z"
|
||||
id="path3671-2"
|
||||
inkscape:label="outline" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:9.53813;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 84.566726,139.06892 c -4.562445,0 -6.843668,-1.73285 -6.843668,-5.19856 v -24.61088 c 0,-0.0877 -0.04387,-0.13161 -0.131609,-0.13161 h -3.22442 v 16.84595 H 60.679694 V 83.92475 h 23.887032 c 4.518575,0 6.777863,1.776721 6.777863,5.330164 v 12.239636 c 0,2.01801 -1.118676,3.15862 -3.356029,3.42183 2.281223,0.30709 3.421834,1.46964 3.421834,3.48764 v 20.07037 c 0,0.0877 0.04387,0.13161 0.131609,0.13161 h 33.823507 v 10.46292 z M 77.723058,94.585079 c 0,-0.08774 -0.04387,-0.131609 -0.131609,-0.131609 h -3.22442 v 6.31723 h 3.22442 c 0.08774,0 0.131609,-0.0439 0.131609,-0.13161 z m 33.955122,0 c 0,-0.08774 -0.0439,-0.131609 -0.13161,-0.131609 h -3.09281 c -0.0877,0 -0.13161,0.04387 -0.13161,0.131609 v 5.856601 h 3.35603 z m -10.1997,31.388741 c -4.562444,0 -6.843666,-1.73285 -6.843666,-5.19855 V 89.254914 c 0,-3.553443 2.281222,-5.330164 6.843666,-5.330164 h 17.04337 c 4.56244,0 6.84366,1.776721 6.84366,5.330164 v 20.991636 h -17.04336 v 5.13275 c 0,0.0877 0.0439,0.13161 0.13161,0.13161 h 3.09281 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -2.50057 h 13.68733 v 7.89654 c 0,3.4657 -2.28122,5.19855 -6.84366,5.19855 z"
|
||||
id="path3673-3"
|
||||
inkscape:label="text" />
|
||||
</g>
|
||||
<g
|
||||
id="g861-9-7"
|
||||
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#f17db2;stroke-opacity:1;filter:url(#filter1055)"
|
||||
transform="matrix(1.3835644,0,0,1.3835644,-22.936608,36.936115)"
|
||||
inkscape:label="Vc">
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 115.29478,55.979585 a 1.0583349,1.0583349 0 0 0 -0.94727,0.53711 l -13.61915,24.06445 -1.763667,-7.15234 a 1.0583349,1.0583349 0 0 0 -1.28125,-0.77344 1.0583349,1.0583349 0 0 0 -0.77344,1.28125 l 2.40235,9.73438 a 1.0584408,1.0584408 0 0 0 1.947257,0.26757 l 14.9297,-26.38086 a 1.0583349,1.0583349 0 0 0 -0.39844,-1.4414 1.0583349,1.0583349 0 0 0 -0.49609,-0.13672 z"
|
||||
id="path892-1-5" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 118.1854,69.604585 a 1.0583349,1.0583349 0 0 0 -0.27343,0.0391 c 0,0 -2.1903,0.59881 -4.46875,2.08789 -2.27846,1.48909 -4.77359,3.96951 -5.16602,7.69531 -0.20107,1.90898 0.49022,3.43086 1.68359,4.15821 1.19338,0.72735 2.6066,0.75222 3.94727,0.60547 2.68134,-0.29351 5.29297,-1.44336 5.29297,-1.44336 a 1.0583349,1.0583349 0 0 0 0.55078,-1.39063 1.0583349,1.0583349 0 0 0 -1.39063,-0.55273 c 0,0 -2.46507,1.04035 -4.68359,1.2832 -1.10926,0.12142 -2.10191,0.002 -2.61523,-0.31055 -0.51333,-0.31286 -0.82729,-0.72566 -0.67969,-2.12695 0.3049,-2.89473 2.23993,-4.85323 4.21875,-6.14648 1.97882,-1.29326 3.87305,-1.82032 3.87305,-1.82032 a 1.0583349,1.0583349 0 0 0 0.73828,-1.30078 1.0583349,1.0583349 0 0 0 -1.02735,-0.77734 z"
|
||||
id="path896-2-9" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 21 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 57 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 30 KiB |
@@ -112,6 +112,8 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang
|
||||
if (NOT LIBRW_PLATFORM_PS2)
|
||||
target_compile_options(${EXECUTABLE}
|
||||
PRIVATE
|
||||
-fpermissive # for CVECTORHACK
|
||||
-Wno-address-of-temporary # for CVECTORHACK
|
||||
-Wextra
|
||||
-Wdouble-promotion
|
||||
-Wpedantic
|
||||
@@ -167,4 +169,4 @@ if(${PROJECT}_INSTALL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
re3_platform_target(${EXECUTABLE} INSTALL)
|
||||
reVC_platform_target(${EXECUTABLE} INSTALL)
|
||||
|
||||
@@ -12,16 +12,21 @@
|
||||
|
||||
#include "General.h"
|
||||
#include "RwHelper.h"
|
||||
#include "ModelIndices.h"
|
||||
#include "ModelInfo.h"
|
||||
#include "AnimManager.h"
|
||||
#include "RpAnimBlend.h"
|
||||
#include "AnimBlendAssociation.h"
|
||||
#include "AnimBlendAssocGroup.h"
|
||||
#include "KeyGen.h"
|
||||
|
||||
CAnimBlendAssocGroup::CAnimBlendAssocGroup(void)
|
||||
{
|
||||
animBlock = nil;
|
||||
assocList = nil;
|
||||
numAssociations = 0;
|
||||
firstAnimId = 0;
|
||||
groupId = -1;
|
||||
}
|
||||
|
||||
CAnimBlendAssocGroup::~CAnimBlendAssocGroup(void)
|
||||
@@ -42,7 +47,7 @@ CAnimBlendAssocGroup::DestroyAssociations(void)
|
||||
CAnimBlendAssociation*
|
||||
CAnimBlendAssocGroup::GetAnimation(uint32 id)
|
||||
{
|
||||
return &assocList[id];
|
||||
return &assocList[id - firstAnimId];
|
||||
}
|
||||
|
||||
CAnimBlendAssociation*
|
||||
@@ -52,6 +57,7 @@ CAnimBlendAssocGroup::GetAnimation(const char *name)
|
||||
for(i = 0; i < numAssociations; i++)
|
||||
if(!CGeneral::faststricmp(assocList[i].hierarchy->name, name))
|
||||
return &assocList[i];
|
||||
debug("\n\nCan't find the fucking animation %s\n\n\n", name);
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -101,23 +107,39 @@ strcmpIgnoringDigits(const char *s1, const char *s2)
|
||||
c2 = __ascii_toupper(c2);
|
||||
#endif
|
||||
|
||||
if(c1 != c2)
|
||||
if(c1 && c2 && c1 != c2)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
extern const char* csPlayerNames[];
|
||||
extern const char* playerNames[];
|
||||
|
||||
CBaseModelInfo*
|
||||
GetModelFromName(const char *name)
|
||||
{
|
||||
int i;
|
||||
CBaseModelInfo *mi;
|
||||
CBaseModelInfo* mi;
|
||||
if (CKeyGen::GetUppercaseKey(name) == CKeyGen::GetUppercaseKey("cstoni_a")) {
|
||||
i = 0;
|
||||
while (csPlayerNames[i][0] != '\0') {
|
||||
if (CModelInfo::GetModelInfo(0)->GetNameHashKey() == CKeyGen::GetUppercaseKey(playerNames[i])) {
|
||||
name = csPlayerNames[i];
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
for(i = 0; i < MODELINFOSIZE; i++){
|
||||
uint32 hashKey = CKeyGen::GetUppercaseKey(name);
|
||||
for (i = 0; i < CModelInfo::GetNumModelInfos(); i++) {
|
||||
mi = CModelInfo::GetModelInfo(i);
|
||||
if(mi && mi->GetRwObject() && RwObjectGetType(mi->GetRwObject()) == rpCLUMP &&
|
||||
strcmpIgnoringDigits(mi->GetModelName(), name))
|
||||
if (mi && mi->GetRwObject()
|
||||
&& RwObjectGetType(mi->GetRwObject()) == rpCLUMP &&
|
||||
hashKey == mi->GetNameHashKey())
|
||||
return mi;
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -127,8 +149,7 @@ CAnimBlendAssocGroup::CreateAssociations(const char *name)
|
||||
int i;
|
||||
CAnimBlock *animBlock;
|
||||
|
||||
if(assocList)
|
||||
DestroyAssociations();
|
||||
DestroyAssociations();
|
||||
|
||||
animBlock = CAnimManager::GetAnimationBlock(name);
|
||||
assocList = new CAnimBlendAssociation[animBlock->numAnims];
|
||||
@@ -137,17 +158,18 @@ CAnimBlendAssocGroup::CreateAssociations(const char *name)
|
||||
for(i = 0; i < animBlock->numAnims; i++){
|
||||
CAnimBlendHierarchy *anim = CAnimManager::GetAnimation(animBlock->firstIndex + i);
|
||||
CBaseModelInfo *model = GetModelFromName(anim->name);
|
||||
assert(model);
|
||||
printf("Associated anim %s with model %s\n", anim->name, model->GetModelName());
|
||||
RpClump *clump = (RpClump*)model->CreateInstance();
|
||||
#ifdef PED_SKIN
|
||||
if(IsClumpSkinned(clump))
|
||||
RpClumpForAllAtomics(clump, AtomicRemoveAnimFromSkinCB, nil);
|
||||
#endif
|
||||
RpAnimBlendClumpInit(clump);
|
||||
assocList[i].Init(clump, anim);
|
||||
RpClumpDestroy(clump);
|
||||
assocList[i].animId = i;
|
||||
if(model){
|
||||
debug("Associated anim %s with model %s\n", anim->name, model->GetModelName());
|
||||
RpClump *clump = (RpClump*)model->CreateInstance();
|
||||
RpAnimBlendClumpInit(clump);
|
||||
assocList[i].Init(clump, anim);
|
||||
if(IsClumpSkinned(clump))
|
||||
RpClumpForAllAtomics(clump, AtomicRemoveAnimFromSkinCB, nil);
|
||||
RpClumpDestroy(clump);
|
||||
assocList[i].animId = firstAnimId + i;
|
||||
assocList[i].groupId = groupId;
|
||||
}else
|
||||
debug("\n\nCANNOT FIND MODELINFO WITH NAME %s\n\n\n", anim->name);
|
||||
}
|
||||
numAssociations = animBlock->numAnims;
|
||||
}
|
||||
@@ -157,10 +179,8 @@ void
|
||||
CAnimBlendAssocGroup::CreateAssociations(const char *blockName, RpClump *clump, const char **animNames, int numAssocs)
|
||||
{
|
||||
int i;
|
||||
CAnimBlock *animBlock;
|
||||
|
||||
if(assocList)
|
||||
DestroyAssociations();
|
||||
DestroyAssociations();
|
||||
|
||||
animBlock = CAnimManager::GetAnimationBlock(blockName);
|
||||
assocList = new CAnimBlendAssociation[numAssocs];
|
||||
@@ -168,7 +188,50 @@ CAnimBlendAssocGroup::CreateAssociations(const char *blockName, RpClump *clump,
|
||||
numAssociations = 0;
|
||||
for(i = 0; i < numAssocs; i++){
|
||||
assocList[i].Init(clump, CAnimManager::GetAnimation(animNames[i], animBlock));
|
||||
assocList[i].animId = i;
|
||||
assocList[i].animId = firstAnimId + i;
|
||||
assocList[i].groupId = groupId;
|
||||
}
|
||||
numAssociations = numAssocs;
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendAssocGroup::CreateAssociations(const char *blockName, const char *animNames, const char *objectNames, int numChars)
|
||||
{
|
||||
if (!objectNames) {
|
||||
CreateAssociations(blockName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (assocList)
|
||||
DestroyAssociations();
|
||||
|
||||
animBlock = CAnimManager::GetAnimationBlock(blockName);
|
||||
assocList = new CAnimBlendAssociation[animBlock->numAnims];
|
||||
|
||||
numAssociations = 0;
|
||||
if (animBlock->numAnims > 0)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < animBlock->numAnims; i++) {
|
||||
int animId = -1;
|
||||
for (j = 0; j != animBlock->numAnims; j++)
|
||||
if (strcmp(CAnimManager::GetAnimation(i + animBlock->firstIndex)->name, animNames + numChars * j) == 0)
|
||||
animId = j;
|
||||
|
||||
if (animId != -1) {
|
||||
CBaseModelInfo* minfo = GetModelFromName(objectNames + numChars * animId);
|
||||
if (minfo)
|
||||
{
|
||||
RpClump* clump = (RpClump*)minfo->CreateInstance();
|
||||
RpAnimBlendClumpInit(clump);
|
||||
assocList[numAssociations].Init(clump, CAnimManager::GetAnimation(i + animBlock->firstIndex));
|
||||
if (IsClumpSkinned(clump))
|
||||
RpClumpForAllAtomics(clump, AtomicRemoveAnimFromSkinCB, nil);
|
||||
RpClumpDestroy(clump);
|
||||
assocList[numAssociations].animId = i + numAssociations;
|
||||
assocList[numAssociations++].groupId = groupId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
class CAnimBlendAssociation;
|
||||
struct CAnimBlock;
|
||||
|
||||
class CAnimBlendAssocGroup
|
||||
{
|
||||
public:
|
||||
CAnimBlock *animBlock;
|
||||
CAnimBlendAssociation *assocList;
|
||||
int32 numAssociations;
|
||||
int32 firstAnimId;
|
||||
int32 groupId; // id of self in ms_aAnimAssocGroups
|
||||
|
||||
CAnimBlendAssocGroup(void);
|
||||
~CAnimBlendAssocGroup(void);
|
||||
@@ -17,4 +21,5 @@ public:
|
||||
CAnimBlendAssociation *CopyAnimation(const char *name);
|
||||
void CreateAssociations(const char *name);
|
||||
void CreateAssociations(const char *blockName, RpClump *clump, const char **animNames, int numAssocs);
|
||||
void CreateAssociations(const char *blockName, const char *animNames, const char *objectNames, int numChars);
|
||||
};
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
CAnimBlendAssociation::CAnimBlendAssociation(void)
|
||||
{
|
||||
groupId = -1;
|
||||
nodes = nil;
|
||||
blendAmount = 1.0f;
|
||||
blendDelta = 0.0f;
|
||||
@@ -54,8 +55,8 @@ CAnimBlendAssociation::AllocateAnimBlendNodeArray(int n)
|
||||
void
|
||||
CAnimBlendAssociation::FreeAnimBlendNodeArray(void)
|
||||
{
|
||||
assert(nodes != nil);
|
||||
RwFreeAlign(nodes);
|
||||
if(nodes)
|
||||
RwFreeAlign(nodes);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -75,7 +76,10 @@ CAnimBlendAssociation::Init(RpClump *clump, CAnimBlendHierarchy *hier)
|
||||
// NB: This is where the order of nodes is defined
|
||||
for(i = 0; i < hier->numSequences; i++){
|
||||
CAnimBlendSequence *seq = &hier->sequences[i];
|
||||
frame = RpAnimBlendClumpFindFrame(clump, seq->name);
|
||||
if(seq->boneTag == -1)
|
||||
frame = RpAnimBlendClumpFindFrame(clump, seq->name);
|
||||
else
|
||||
frame = RpAnimBlendClumpFindBone(clump, seq->boneTag);
|
||||
if(frame && seq->numFrames > 0)
|
||||
nodes[frame - clumpData->frames].sequence = seq;
|
||||
}
|
||||
@@ -90,6 +94,7 @@ CAnimBlendAssociation::Init(CAnimBlendAssociation &assoc)
|
||||
numNodes = assoc.numNodes;
|
||||
flags = assoc.flags;
|
||||
animId = assoc.animId;
|
||||
groupId = assoc.groupId;
|
||||
AllocateAnimBlendNodeArray(numNodes);
|
||||
for(i = 0; i < numNodes; i++){
|
||||
nodes[i] = assoc.nodes[i];
|
||||
@@ -126,12 +131,25 @@ CAnimBlendAssociation::SetCurrentTime(float time)
|
||||
int i;
|
||||
|
||||
for(currentTime = time; currentTime >= hierarchy->totalLength; currentTime -= hierarchy->totalLength)
|
||||
if(!IsRepeating())
|
||||
return;
|
||||
if (!IsRepeating()) {
|
||||
currentTime = hierarchy->totalLength;
|
||||
break;
|
||||
}
|
||||
|
||||
CAnimManager::UncompressAnimation(hierarchy);
|
||||
for(i = 0; i < numNodes; i++)
|
||||
if(nodes[i].sequence)
|
||||
nodes[i].FindKeyFrame(currentTime);
|
||||
#ifdef ANIM_COMPRESSION
|
||||
// strangely PC has this but android doesn't
|
||||
if(hierarchy->keepCompressed){
|
||||
for(i = 0; i < numNodes; i++)
|
||||
if(nodes[i].sequence)
|
||||
nodes[i].SetupKeyFrameCompressed();
|
||||
}else
|
||||
#endif
|
||||
{
|
||||
for(i = 0; i < numNodes; i++)
|
||||
if(nodes[i].sequence)
|
||||
nodes[i].FindKeyFrame(currentTime);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -147,13 +165,23 @@ CAnimBlendAssociation::Start(float time)
|
||||
SetCurrentTime(time);
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendAssociation::UpdateTimeStep(float timeDelta, float relSpeed)
|
||||
{
|
||||
if(IsRunning())
|
||||
timeStep = (flags & ASSOC_MOVEMENT ? relSpeed*hierarchy->totalLength : speed) * timeDelta;
|
||||
}
|
||||
|
||||
bool
|
||||
CAnimBlendAssociation::UpdateTime(float timeDelta, float relSpeed)
|
||||
{
|
||||
if(!IsRunning())
|
||||
return true;
|
||||
if(currentTime >= hierarchy->totalLength){
|
||||
flags &= ~ASSOC_RUNNING;
|
||||
return true;
|
||||
}
|
||||
|
||||
timeStep = (flags & ASSOC_MOVEMENT ? relSpeed*hierarchy->totalLength : speed) * timeDelta;
|
||||
currentTime += timeStep;
|
||||
|
||||
if(currentTime >= hierarchy->totalLength){
|
||||
@@ -163,7 +191,6 @@ CAnimBlendAssociation::UpdateTime(float timeDelta, float relSpeed)
|
||||
currentTime -= hierarchy->totalLength;
|
||||
else{
|
||||
currentTime = hierarchy->totalLength;
|
||||
flags &= ~ASSOC_RUNNING;
|
||||
if(flags & ASSOC_FADEOUTWHENDONE){
|
||||
flags |= ASSOC_DELETEFADEDOUT;
|
||||
blendDelta = -4.0f;
|
||||
@@ -203,3 +230,9 @@ CAnimBlendAssociation::UpdateBlend(float timeDelta)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendAssociation::Remove()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
@@ -12,12 +12,13 @@ enum {
|
||||
ASSOC_PARTIAL = 0x10,
|
||||
ASSOC_MOVEMENT = 0x20, // ???
|
||||
ASSOC_HAS_TRANSLATION = 0x40,
|
||||
ASSOC_WALK = 0x80, // for CPed::PlayFootSteps(void)
|
||||
ASSOC_IDLE = 0x100, // only used by xpress scratch, see CPed::Chat(void)
|
||||
ASSOC_NOWALK = 0x200, // see CPed::PlayFootSteps(void)
|
||||
ASSOC_BLOCK = 0x400, // unused in assoc description, blocks other anims from being played
|
||||
ASSOC_FRONTAL = 0x800, // anims that we fall to front
|
||||
ASSOC_HAS_X_TRANSLATION = 0x1000, // for 2d velocity extraction
|
||||
ASSOC_HAS_X_TRANSLATION = 0x80, // for 2d velocity extraction
|
||||
ASSOC_WALK = 0x100, // for CPed::PlayFootSteps(void)
|
||||
ASSOC_IDLE = 0x200, // only xpress scratch has it by default, but game adds it to player's idle animations later
|
||||
ASSOC_NOWALK = 0x400, // see CPed::PlayFootSteps(void)
|
||||
ASSOC_BLOCK = 0x800, // unused in assoc description, blocks other anims from being played
|
||||
ASSOC_FRONTAL = 0x1000, // anims that we fall to front
|
||||
ASSOC_DRIVING = 0x2000, // new in VC
|
||||
};
|
||||
|
||||
// Anim hierarchy associated with a clump
|
||||
@@ -35,7 +36,8 @@ public:
|
||||
|
||||
CAnimBlendLink link;
|
||||
|
||||
int32 numNodes; // taken from CAnimBlendClumpData::numFrames
|
||||
int16 numNodes; // taken from CAnimBlendClumpData::numFrames
|
||||
int16 groupId; // ID of CAnimBlendAssocGroup this is in
|
||||
// NB: Order of these depends on order of nodes in Clump this was built from
|
||||
CAnimBlendNode *nodes;
|
||||
CAnimBlendHierarchy *hierarchy;
|
||||
@@ -44,8 +46,8 @@ public:
|
||||
float currentTime;
|
||||
float speed;
|
||||
float timeStep;
|
||||
int32 animId;
|
||||
int32 flags;
|
||||
int16 animId;
|
||||
int16 flags;
|
||||
int32 callbackType;
|
||||
void (*callback)(CAnimBlendAssociation*, void*);
|
||||
void *callbackArg;
|
||||
@@ -76,16 +78,17 @@ public:
|
||||
void SetCurrentTime(float time);
|
||||
void SyncAnimation(CAnimBlendAssociation *other);
|
||||
void Start(float time);
|
||||
void UpdateTimeStep(float timeDelta, float relSpeed);
|
||||
bool UpdateTime(float timeDelta, float relSpeed);
|
||||
bool UpdateBlend(float timeDelta);
|
||||
void Remove();
|
||||
|
||||
void SetRun(void) { flags |= ASSOC_RUNNING; }
|
||||
|
||||
inline float GetTimeLeft() { return hierarchy->totalLength - currentTime; }
|
||||
float GetTimeLeft() { return hierarchy->totalLength - currentTime; }
|
||||
float GetProgress() { return currentTime / hierarchy->totalLength; }
|
||||
|
||||
static CAnimBlendAssociation *FromLink(CAnimBlendLink *l) {
|
||||
return (CAnimBlendAssociation*)((uint8*)l - offsetof(CAnimBlendAssociation, link));
|
||||
}
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(CAnimBlendAssociation, 0x40);
|
||||
|
||||
@@ -10,23 +10,19 @@ struct AnimBlendFrameData
|
||||
IGNORE_TRANSLATION = 4,
|
||||
VELOCITY_EXTRACTION = 8,
|
||||
VELOCITY_EXTRACTION_3D = 0x10,
|
||||
UPDATE_KEYFRAMES = 0x20,
|
||||
COMPRESSED = 0x40
|
||||
};
|
||||
|
||||
uint8 flag;
|
||||
RwV3d resetPos;
|
||||
#ifdef PED_SKIN
|
||||
union {
|
||||
RwFrame *frame;
|
||||
RpHAnimStdInterpFrame *hanimFrame;
|
||||
};
|
||||
int32 nodeID;
|
||||
#else
|
||||
RwFrame *frame;
|
||||
#endif
|
||||
};
|
||||
#ifndef PED_SKIN
|
||||
VALIDATE_SIZE(AnimBlendFrameData, 0x14);
|
||||
#endif
|
||||
VALIDATE_SIZE(AnimBlendFrameData, 0x18);
|
||||
|
||||
|
||||
class CAnimBlendClumpData
|
||||
@@ -34,9 +30,6 @@ class CAnimBlendClumpData
|
||||
public:
|
||||
CAnimBlendLink link;
|
||||
int32 numFrames;
|
||||
#ifdef PED_SKIN
|
||||
int32 modelNumber; // doesn't seem to be used
|
||||
#endif
|
||||
union {
|
||||
CVector2D *velocity2d;
|
||||
CVector *velocity3d;
|
||||
@@ -47,11 +40,6 @@ public:
|
||||
CAnimBlendClumpData(void);
|
||||
~CAnimBlendClumpData(void);
|
||||
void SetNumberOfFrames(int n);
|
||||
#ifdef PED_SKIN
|
||||
void SetNumberOfBones(int n) { SetNumberOfFrames(n); }
|
||||
#endif
|
||||
void ForAllFrames(void (*cb)(AnimBlendFrameData*, void*), void *arg);
|
||||
};
|
||||
#ifndef PED_SKIN
|
||||
VALIDATE_SIZE(CAnimBlendClumpData, 0x14);
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "AnimBlendSequence.h"
|
||||
#include "AnimBlendHierarchy.h"
|
||||
#include "AnimManager.h"
|
||||
|
||||
CAnimBlendHierarchy::CAnimBlendHierarchy(void)
|
||||
{
|
||||
@@ -15,9 +16,10 @@ CAnimBlendHierarchy::CAnimBlendHierarchy(void)
|
||||
void
|
||||
CAnimBlendHierarchy::Shutdown(void)
|
||||
{
|
||||
CAnimManager::RemoveFromUncompressedCache(this);
|
||||
RemoveAnimSequences();
|
||||
totalLength = 0.0f;
|
||||
compressed = 0;
|
||||
linkPtr = nil;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -30,13 +32,43 @@ void
|
||||
CAnimBlendHierarchy::CalcTotalTime(void)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
totalLength = 0.0f;
|
||||
|
||||
for(i = 0; i < numSequences; i++){
|
||||
float seqTime = 0.0f;
|
||||
for(j = 0; j < sequences[i].numFrames; j++)
|
||||
seqTime += sequences[i].GetKeyFrame(j)->deltaTime;
|
||||
totalLength = Max(totalLength, seqTime);
|
||||
#ifdef FIX_BUGS
|
||||
if(sequences[i].numFrames == 0)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
totalLength = Max(totalLength, sequences[i].GetKeyFrame(sequences[i].numFrames-1)->deltaTime);
|
||||
for(j = sequences[i].numFrames-1; j >= 1; j--){
|
||||
KeyFrame *kf1 = sequences[i].GetKeyFrame(j);
|
||||
KeyFrame *kf2 = sequences[i].GetKeyFrame(j-1);
|
||||
kf1->deltaTime -= kf2->deltaTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendHierarchy::CalcTotalTimeCompressed(void)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
totalLength = 0.0f;
|
||||
|
||||
for(i = 0; i < numSequences; i++){
|
||||
#ifdef FIX_BUGS
|
||||
if(sequences[i].numFrames == 0)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
totalLength = Max(totalLength, sequences[i].GetKeyFrameCompressed(sequences[i].numFrames-1)->GetDeltaTime());
|
||||
for(j = sequences[i].numFrames-1; j >= 1; j--){
|
||||
KeyFrameCompressed *kf1 = sequences[i].GetKeyFrameCompressed(j);
|
||||
KeyFrameCompressed *kf2 = sequences[i].GetKeyFrameCompressed(j-1);
|
||||
kf1->deltaTime -= kf2->deltaTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +85,7 @@ void
|
||||
CAnimBlendHierarchy::RemoveAnimSequences(void)
|
||||
{
|
||||
delete[] sequences;
|
||||
sequences = nil;
|
||||
numSequences = 0;
|
||||
}
|
||||
|
||||
@@ -65,9 +98,11 @@ CAnimBlendHierarchy::Uncompress(void)
|
||||
for(i = 0; i < numSequences; i++)
|
||||
sequences[i].Uncompress();
|
||||
#endif
|
||||
if(totalLength == 0.0f)
|
||||
CalcTotalTime();
|
||||
compressed = 0;
|
||||
if(totalLength == 0.0f){
|
||||
RemoveQuaternionFlips();
|
||||
CalcTotalTime();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -15,7 +15,8 @@ public:
|
||||
char name[24];
|
||||
CAnimBlendSequence *sequences;
|
||||
int16 numSequences;
|
||||
int16 compressed;
|
||||
bool compressed;
|
||||
bool keepCompressed;
|
||||
float totalLength;
|
||||
CLink<CAnimBlendHierarchy*> *linkPtr;
|
||||
|
||||
@@ -23,11 +24,13 @@ public:
|
||||
void Shutdown(void);
|
||||
void SetName(char *name);
|
||||
void CalcTotalTime(void);
|
||||
void CalcTotalTimeCompressed(void);
|
||||
void RemoveQuaternionFlips(void);
|
||||
void RemoveAnimSequences(void);
|
||||
void Uncompress(void);
|
||||
void RemoveUncompressedData(void);
|
||||
void MoveMemory(bool onlyone = false);
|
||||
bool IsCompressed() { return !!compressed; };
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(CAnimBlendHierarchy, 0x28);
|
||||
@@ -45,6 +45,44 @@ CAnimBlendNode::Update(CVector &trans, CQuaternion &rot, float weight)
|
||||
return looped;
|
||||
}
|
||||
|
||||
bool
|
||||
CAnimBlendNode::UpdateCompressed(CVector &trans, CQuaternion &rot, float weight)
|
||||
{
|
||||
bool looped = false;
|
||||
|
||||
trans = CVector(0.0f, 0.0f, 0.0f);
|
||||
rot = CQuaternion(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
|
||||
if(association->IsRunning()){
|
||||
remainingTime -= association->timeStep;
|
||||
if(remainingTime <= 0.0f)
|
||||
looped = NextKeyFrameCompressed();
|
||||
}
|
||||
|
||||
float blend = association->GetBlendAmount(weight);
|
||||
if(blend > 0.0f){
|
||||
KeyFrameTransCompressed *kfA = (KeyFrameTransCompressed*)sequence->GetKeyFrameCompressed(frameA);
|
||||
KeyFrameTransCompressed *kfB = (KeyFrameTransCompressed*)sequence->GetKeyFrameCompressed(frameB);
|
||||
float t = kfA->deltaTime == 0 ? 0.0f : (kfA->GetDeltaTime() - remainingTime)/kfA->GetDeltaTime();
|
||||
if(sequence->type & CAnimBlendSequence::KF_TRANS){
|
||||
CVector transA, transB;
|
||||
kfA->GetTranslation(&transA);
|
||||
kfB->GetTranslation(&transB);
|
||||
trans = transB + t*(transA - transB);
|
||||
trans *= blend;
|
||||
}
|
||||
if(sequence->type & CAnimBlendSequence::KF_ROT){
|
||||
CQuaternion rotA, rotB;
|
||||
kfA->GetRotation(&rotA);
|
||||
kfB->GetRotation(&rotB);
|
||||
rot.Slerp(rotB, rotA, theta, invSin, t);
|
||||
rot *= blend;
|
||||
}
|
||||
}
|
||||
|
||||
return looped;
|
||||
}
|
||||
|
||||
bool
|
||||
CAnimBlendNode::NextKeyFrame(void)
|
||||
{
|
||||
@@ -82,6 +120,43 @@ CAnimBlendNode::NextKeyFrame(void)
|
||||
return looped;
|
||||
}
|
||||
|
||||
bool
|
||||
CAnimBlendNode::NextKeyFrameCompressed(void)
|
||||
{
|
||||
bool looped;
|
||||
|
||||
if(sequence->numFrames <= 1)
|
||||
return false;
|
||||
|
||||
looped = false;
|
||||
frameB = frameA;
|
||||
|
||||
// Advance as long as we have to
|
||||
while(remainingTime <= 0.0f){
|
||||
frameA++;
|
||||
|
||||
if(frameA >= sequence->numFrames){
|
||||
// reached end of animation
|
||||
if(!association->IsRepeating()){
|
||||
frameA--;
|
||||
remainingTime = 0.0f;
|
||||
return false;
|
||||
}
|
||||
looped = true;
|
||||
frameA = 0;
|
||||
}
|
||||
|
||||
remainingTime += sequence->GetKeyFrameCompressed(frameA)->GetDeltaTime();
|
||||
}
|
||||
|
||||
frameB = frameA - 1;
|
||||
if(frameB < 0)
|
||||
frameB += sequence->numFrames;
|
||||
|
||||
CalcDeltasCompressed();
|
||||
return looped;
|
||||
}
|
||||
|
||||
// Set animation to time t
|
||||
bool
|
||||
CAnimBlendNode::FindKeyFrame(float t)
|
||||
@@ -92,20 +167,22 @@ CAnimBlendNode::FindKeyFrame(float t)
|
||||
frameA = 0;
|
||||
frameB = frameA;
|
||||
|
||||
if(sequence->numFrames >= 2){
|
||||
frameA++;
|
||||
|
||||
if(sequence->numFrames == 1){
|
||||
remainingTime = 0.0f;
|
||||
}else{
|
||||
// advance until t is between frameB and frameA
|
||||
while(t > sequence->GetKeyFrame(frameA)->deltaTime){
|
||||
while (t > sequence->GetKeyFrame(++frameA)->deltaTime) {
|
||||
t -= sequence->GetKeyFrame(frameA)->deltaTime;
|
||||
frameB = frameA++;
|
||||
if(frameA >= sequence->numFrames){
|
||||
if (frameA + 1 >= sequence->numFrames) {
|
||||
// reached end of animation
|
||||
if(!association->IsRepeating())
|
||||
if (!association->IsRepeating()) {
|
||||
CalcDeltas();
|
||||
remainingTime = 0.0f;
|
||||
return false;
|
||||
}
|
||||
frameA = 0;
|
||||
frameB = 0;
|
||||
}
|
||||
frameB = frameA;
|
||||
}
|
||||
|
||||
remainingTime = sequence->GetKeyFrame(frameA)->deltaTime - t;
|
||||
@@ -115,6 +192,25 @@ CAnimBlendNode::FindKeyFrame(float t)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CAnimBlendNode::SetupKeyFrameCompressed(void)
|
||||
{
|
||||
if(sequence->numFrames < 1)
|
||||
return false;
|
||||
|
||||
frameA = 1;
|
||||
frameB = 0;
|
||||
|
||||
if(sequence->numFrames == 1){
|
||||
frameA = 0;
|
||||
remainingTime = 0.0f;
|
||||
}else
|
||||
remainingTime = sequence->GetKeyFrameCompressed(frameA)->GetDeltaTime();
|
||||
|
||||
CalcDeltasCompressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::CalcDeltas(void)
|
||||
{
|
||||
@@ -129,6 +225,28 @@ CAnimBlendNode::CalcDeltas(void)
|
||||
invSin = theta == 0.0f ? 0.0f : 1.0f/Sin(theta);
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::CalcDeltasCompressed(void)
|
||||
{
|
||||
if((sequence->type & CAnimBlendSequence::KF_ROT) == 0)
|
||||
return;
|
||||
KeyFrameCompressed *kfA = sequence->GetKeyFrameCompressed(frameA);
|
||||
KeyFrameCompressed *kfB = sequence->GetKeyFrameCompressed(frameB);
|
||||
CQuaternion rotA, rotB;
|
||||
kfA->GetRotation(&rotA);
|
||||
kfB->GetRotation(&rotB);
|
||||
float cos = DotProduct(rotA, rotB);
|
||||
if(cos < 0.0f){
|
||||
rotB *= -1.0f;
|
||||
kfB->SetRotation(rotB);
|
||||
}
|
||||
cos = DotProduct(rotA, rotB);
|
||||
if(cos > 1.0f)
|
||||
cos = 1.0f;
|
||||
theta = Acos(cos);
|
||||
invSin = theta == 0.0f ? 0.0f : 1.0f/Sin(theta);
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::GetCurrentTranslation(CVector &trans, float weight)
|
||||
{
|
||||
@@ -138,7 +256,7 @@ CAnimBlendNode::GetCurrentTranslation(CVector &trans, float weight)
|
||||
if(blend > 0.0f){
|
||||
KeyFrameTrans *kfA = (KeyFrameTrans*)sequence->GetKeyFrame(frameA);
|
||||
KeyFrameTrans *kfB = (KeyFrameTrans*)sequence->GetKeyFrame(frameB);
|
||||
float t = (kfA->deltaTime - remainingTime)/kfA->deltaTime;
|
||||
float t = kfA->deltaTime == 0.0f ? 0.0f : (kfA->deltaTime - remainingTime)/kfA->deltaTime;
|
||||
if(sequence->type & CAnimBlendSequence::KF_TRANS){
|
||||
trans = kfB->translation + t*(kfA->translation - kfB->translation);
|
||||
trans *= blend;
|
||||
@@ -146,6 +264,26 @@ CAnimBlendNode::GetCurrentTranslation(CVector &trans, float weight)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::GetCurrentTranslationCompressed(CVector &trans, float weight)
|
||||
{
|
||||
trans = CVector(0.0f, 0.0f, 0.0f);
|
||||
|
||||
float blend = association->GetBlendAmount(weight);
|
||||
if(blend > 0.0f){
|
||||
KeyFrameTransCompressed *kfA = (KeyFrameTransCompressed*)sequence->GetKeyFrameCompressed(frameA);
|
||||
KeyFrameTransCompressed *kfB = (KeyFrameTransCompressed*)sequence->GetKeyFrameCompressed(frameB);
|
||||
float t = kfA->deltaTime == 0 ? 0.0f : (kfA->GetDeltaTime() - remainingTime)/kfA->GetDeltaTime();
|
||||
if(sequence->type & CAnimBlendSequence::KF_TRANS){
|
||||
CVector transA, transB;
|
||||
kfA->GetTranslation(&transA);
|
||||
kfB->GetTranslation(&transB);
|
||||
trans = transB + t*(transA - transB);
|
||||
trans *= blend;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::GetEndTranslation(CVector &trans, float weight)
|
||||
{
|
||||
@@ -158,3 +296,19 @@ CAnimBlendNode::GetEndTranslation(CVector &trans, float weight)
|
||||
trans = kf->translation * blend;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendNode::GetEndTranslationCompressed(CVector &trans, float weight)
|
||||
{
|
||||
trans = CVector(0.0f, 0.0f, 0.0f);
|
||||
|
||||
float blend = association->GetBlendAmount(weight);
|
||||
if(blend > 0.0f){
|
||||
KeyFrameTransCompressed *kf = (KeyFrameTransCompressed*)sequence->GetKeyFrameCompressed(sequence->numFrames-1);
|
||||
if(sequence->type & CAnimBlendSequence::KF_TRANS){
|
||||
CVector pos;
|
||||
kf->GetTranslation(&pos);
|
||||
trans = pos * blend;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,11 +20,17 @@ public:
|
||||
|
||||
void Init(void);
|
||||
bool Update(CVector &trans, CQuaternion &rot, float weight);
|
||||
bool UpdateCompressed(CVector &trans, CQuaternion &rot, float weight);
|
||||
bool NextKeyFrame(void);
|
||||
bool NextKeyFrameCompressed(void);
|
||||
bool FindKeyFrame(float t);
|
||||
bool SetupKeyFrameCompressed(void);
|
||||
void CalcDeltas(void);
|
||||
void CalcDeltasCompressed(void);
|
||||
void GetCurrentTranslation(CVector &trans, float weight);
|
||||
void GetCurrentTranslationCompressed(CVector &trans, float weight);
|
||||
void GetEndTranslation(CVector &trans, float weight);
|
||||
void GetEndTranslationCompressed(CVector &trans, float weight);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -9,9 +9,7 @@ CAnimBlendSequence::CAnimBlendSequence(void)
|
||||
numFrames = 0;
|
||||
keyFrames = nil;
|
||||
keyFramesCompressed = nil;
|
||||
#ifdef PED_SKIN
|
||||
boneTag = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
CAnimBlendSequence::~CAnimBlendSequence(void)
|
||||
@@ -29,18 +27,21 @@ CAnimBlendSequence::SetName(char *name)
|
||||
}
|
||||
|
||||
void
|
||||
CAnimBlendSequence::SetNumFrames(int numFrames, bool translation)
|
||||
CAnimBlendSequence::SetNumFrames(int numFrames, bool translation, bool compressed)
|
||||
{
|
||||
int sz;
|
||||
|
||||
if(translation){
|
||||
sz = sizeof(KeyFrameTrans);
|
||||
type |= KF_ROT | KF_TRANS;
|
||||
if(compressed)
|
||||
keyFramesCompressed = RwMalloc(sizeof(KeyFrameTrans) * numFrames);
|
||||
else
|
||||
keyFrames = RwMalloc(sizeof(KeyFrameTrans) * numFrames);
|
||||
}else{
|
||||
sz = sizeof(KeyFrame);
|
||||
type |= KF_ROT;
|
||||
if(compressed)
|
||||
keyFramesCompressed = RwMalloc(sizeof(KeyFrame) * numFrames);
|
||||
else
|
||||
keyFrames = RwMalloc(sizeof(KeyFrame) * numFrames);
|
||||
}
|
||||
keyFrames = RwMalloc(sz * numFrames);
|
||||
this->numFrames = numFrames;
|
||||
}
|
||||
|
||||
@@ -76,7 +77,7 @@ CAnimBlendSequence::Uncompress(void)
|
||||
|
||||
float rotScale = 1.0f/4096.0f;
|
||||
float timeScale = 1.0f/60.0f;
|
||||
float transScale = 1.0f/128.0f;
|
||||
float transScale = 1.0f/1024.0f;
|
||||
if(type & KF_TRANS){
|
||||
void *newKfs = RwMalloc(numFrames * sizeof(KeyFrameTrans));
|
||||
KeyFrameTransCompressed *ckf = (KeyFrameTransCompressed*)keyFramesCompressed;
|
||||
@@ -129,7 +130,7 @@ CAnimBlendSequence::CompressKeyframes(void)
|
||||
|
||||
float rotScale = 4096.0f;
|
||||
float timeScale = 60.0f;
|
||||
float transScale = 128.0f;
|
||||
float transScale = 1024.0f;
|
||||
if(type & KF_TRANS){
|
||||
void *newKfs = RwMalloc(numFrames * sizeof(KeyFrameTransCompressed));
|
||||
KeyFrameTransCompressed *ckf = (KeyFrameTransCompressed*)newKfs;
|
||||
@@ -197,4 +198,3 @@ CAnimBlendSequence::MoveMemory(void)
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -19,10 +19,38 @@ struct KeyFrameTrans : KeyFrame {
|
||||
struct KeyFrameCompressed {
|
||||
int16 rot[4]; // 4096
|
||||
int16 deltaTime; // 60
|
||||
|
||||
void GetRotation(CQuaternion *quat){
|
||||
float scale = 1.0f/4096.0f;
|
||||
quat->x = rot[0]*scale;
|
||||
quat->y = rot[1]*scale;
|
||||
quat->z = rot[2]*scale;
|
||||
quat->w = rot[3]*scale;
|
||||
}
|
||||
void SetRotation(const CQuaternion &quat){
|
||||
rot[0] = quat.x * 4096.0f;
|
||||
rot[1] = quat.y * 4096.0f;
|
||||
rot[2] = quat.z * 4096.0f;
|
||||
rot[3] = quat.w * 4096.0f;
|
||||
}
|
||||
float GetDeltaTime(void) { return deltaTime/60.0f; }
|
||||
void SetTime(float t) { deltaTime = t*60.0f + 0.5f; }
|
||||
};
|
||||
|
||||
struct KeyFrameTransCompressed : KeyFrameCompressed {
|
||||
int16 trans[3]; // 128
|
||||
int16 trans[3]; // 1024
|
||||
|
||||
void GetTranslation(CVector *vec) {
|
||||
float scale = 1.0f/1024.0f;
|
||||
vec->x = trans[0]*scale;
|
||||
vec->y = trans[1]*scale;
|
||||
vec->z = trans[2]*scale;
|
||||
}
|
||||
void SetTranslation(const CVector &vec){
|
||||
trans[0] = vec.x*1024.0f;
|
||||
trans[1] = vec.y*1024.0f;
|
||||
trans[2] = vec.z*1024.0f;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -37,32 +65,31 @@ public:
|
||||
int32 type;
|
||||
char name[24];
|
||||
int32 numFrames;
|
||||
#ifdef PED_SKIN
|
||||
int16 boneTag;
|
||||
#endif
|
||||
void *keyFrames;
|
||||
void *keyFramesCompressed;
|
||||
|
||||
CAnimBlendSequence(void);
|
||||
virtual ~CAnimBlendSequence(void);
|
||||
void SetName(char *name);
|
||||
void SetNumFrames(int numFrames, bool translation);
|
||||
void SetNumFrames(int numFrames, bool translation, bool compressed);
|
||||
void RemoveQuaternionFlips(void);
|
||||
KeyFrame *GetKeyFrame(int n) {
|
||||
return type & KF_TRANS ?
|
||||
&((KeyFrameTrans*)keyFrames)[n] :
|
||||
&((KeyFrame*)keyFrames)[n];
|
||||
}
|
||||
KeyFrameCompressed *GetKeyFrameCompressed(int n) {
|
||||
return type & KF_TRANS ?
|
||||
&((KeyFrameTransCompressed*)keyFramesCompressed)[n] :
|
||||
&((KeyFrameCompressed*)keyFramesCompressed)[n];
|
||||
}
|
||||
bool HasTranslation(void) { return !!(type & KF_TRANS); }
|
||||
void Uncompress(void);
|
||||
void CompressKeyframes(void);
|
||||
void RemoveUncompressedData(void);
|
||||
bool MoveMemory(void);
|
||||
|
||||
#ifdef PED_SKIN
|
||||
void SetBoneTag(int tag) { boneTag = tag; }
|
||||
#endif
|
||||
};
|
||||
#ifndef PED_SKIN
|
||||
VALIDATE_SIZE(CAnimBlendSequence, 0x2C);
|
||||
#endif
|
||||
VALIDATE_SIZE(CAnimBlendSequence, 0x30);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,24 +6,59 @@
|
||||
enum AssocGroupId
|
||||
{
|
||||
ASSOCGRP_STD,
|
||||
ASSOCGRP_VAN,
|
||||
ASSOCGRP_COACH,
|
||||
ASSOCGRP_BIKE_STANDARD,
|
||||
ASSOCGRP_BIKE_VESPA,
|
||||
ASSOCGRP_BIKE_HARLEY,
|
||||
ASSOCGRP_BIKE_DIRT,
|
||||
ASSOCGRP_UNARMED,
|
||||
ASSOCGRP_SCREWDRIVER,
|
||||
ASSOCGRP_KNIFE,
|
||||
ASSOCGRP_BASEBALLBAT,
|
||||
ASSOCGRP_GOLFCLUB,
|
||||
ASSOCGRP_CHAINSAW,
|
||||
ASSOCGRP_PYTHON,
|
||||
ASSOCGRP_COLT,
|
||||
ASSOCGRP_SHOTGUN,
|
||||
ASSOCGRP_BUDDY,
|
||||
ASSOCGRP_TEC,
|
||||
ASSOCGRP_UZI,
|
||||
ASSOCGRP_RIFLE,
|
||||
ASSOCGRP_M60,
|
||||
ASSOCGRP_SNIPER,
|
||||
ASSOCGRP_THROW,
|
||||
ASSOCGRP_FLAMETHROWER,
|
||||
ASSOCGRP_ROCKETLAUNCHER,
|
||||
ASSOCGRP_MEDIC,
|
||||
ASSOCGRP_SUNBATHE,
|
||||
ASSOCGRP_PLAYER_IDLE,
|
||||
ASSOCGRP_RIOT,
|
||||
ASSOCGRP_STRIP,
|
||||
ASSOCGRP_LANCE,
|
||||
ASSOCGRP_PLAYER,
|
||||
ASSOCGRP_PLAYERROCKET,
|
||||
ASSOCGRP_PLAYER1ARMED,
|
||||
ASSOCGRP_PLAYER2ARMED,
|
||||
ASSOCGRP_PLAYERBBBAT,
|
||||
ASSOCGRP_AICHAINSAW,
|
||||
ASSOCGRP_PLAYERCHAINSAW,
|
||||
ASSOCGRP_SHUFFLE,
|
||||
ASSOCGRP_OLD,
|
||||
ASSOCGRP_GANG1,
|
||||
ASSOCGRP_GANG2,
|
||||
ASSOCGRP_FAT,
|
||||
ASSOCGRP_OLDFAT,
|
||||
ASSOCGRP_JOGGER,
|
||||
ASSOCGRP_WOMAN,
|
||||
ASSOCGRP_WOMANSHOP,
|
||||
ASSOCGRP_BUSYWOMAN,
|
||||
ASSOCGRP_SEXYWOMAN,
|
||||
ASSOCGRP_OLDWOMAN,
|
||||
ASSOCGRP_FATWOMAN,
|
||||
ASSOCGRP_OLDWOMAN,
|
||||
ASSOCGRP_JOGWOMAN,
|
||||
ASSOCGRP_PANICCHUNKY,
|
||||
ASSOCGRP_SKATE,
|
||||
#ifdef PC_PLAYER_CONTROLS
|
||||
ASSOCGRP_PLAYERBACK,
|
||||
ASSOCGRP_PLAYERLEFT,
|
||||
@@ -33,17 +68,46 @@ enum AssocGroupId
|
||||
ASSOCGRP_ROCKETRIGHT,
|
||||
#endif
|
||||
|
||||
ASSOCGRP_MPNOTE,
|
||||
ASSOCGRP_CSMISC,
|
||||
ASSOCGRP_DONH2,
|
||||
ASSOCGRP_DONH3,
|
||||
ASSOCGRP_JDT2,
|
||||
ASSOCGRP_JDT4,
|
||||
ASSOCGRP_JDT5,
|
||||
ASSOCGRP_JDT6,
|
||||
ASSOCGRP_MAR1,
|
||||
ASSOCGRP_MAR2,
|
||||
ASSOCGRP_MAR3,
|
||||
ASSOCGRP_SAL1,
|
||||
ASSOCGRP_SAL2,
|
||||
ASSOCGRP_SAL3,
|
||||
ASSOCGRP_SAL4,
|
||||
ASSOCGRP_SAL6,
|
||||
ASSOCGRP_SAL7,
|
||||
ASSOCGRP_VIC2,
|
||||
ASSOCGRP_VIC3,
|
||||
ASSOCGRP_VIC4,
|
||||
ASSOCGRP_VIC6,
|
||||
ASSOCGRP_TOURIST,
|
||||
ASSOCGRP_MAC2,
|
||||
ASSOCGRP_VIC7,
|
||||
|
||||
NUM_ANIM_ASSOC_GROUPS
|
||||
};
|
||||
|
||||
class CAnimBlendAssociation;
|
||||
class CAnimBlendAssocGroup;
|
||||
|
||||
#define MAX_ANIMBLOCK_NAME 20
|
||||
|
||||
// A block of hierarchies
|
||||
struct CAnimBlock
|
||||
{
|
||||
char name[24];
|
||||
int32 firstIndex;
|
||||
char name[MAX_ANIMBLOCK_NAME];
|
||||
bool isLoaded;
|
||||
int16 refCount;
|
||||
int32 firstIndex; // first animtion in ms_aAnimations
|
||||
int32 numAnims;
|
||||
};
|
||||
|
||||
@@ -77,7 +141,16 @@ public:
|
||||
static void Initialise(void);
|
||||
static void Shutdown(void);
|
||||
static void UncompressAnimation(CAnimBlendHierarchy *anim);
|
||||
static void RemoveFromUncompressedCache(CAnimBlendHierarchy *hier);
|
||||
static CAnimBlock *GetAnimationBlock(int32 block) { return &ms_aAnimBlocks[block]; }
|
||||
static CAnimBlock *GetAnimationBlock(const char *name);
|
||||
static int32 GetAnimationBlockIndex(const char *name);
|
||||
static int32 RegisterAnimBlock(const char *name);
|
||||
static int32 GetNumRefsToAnimBlock(int32 block);
|
||||
static void AddAnimBlockRef(int32 block);
|
||||
static void RemoveAnimBlockRefWithoutDelete(int32 block);
|
||||
static void RemoveAnimBlockRef(int32 block);
|
||||
static void RemoveAnimBlock(int32 block);
|
||||
static CAnimBlendHierarchy *GetAnimation(const char *name, CAnimBlock *animBlock);
|
||||
static CAnimBlendHierarchy *GetAnimation(int32 n) { return &ms_aAnimations[n]; }
|
||||
static const char *GetAnimGroupName(AssocGroupId groupId);
|
||||
@@ -89,6 +162,8 @@ public:
|
||||
static CAnimBlendAssociation *BlendAnimation(RpClump *clump, AssocGroupId groupId, AnimationId animId, float delta);
|
||||
static void LoadAnimFiles(void);
|
||||
static void LoadAnimFile(const char *filename);
|
||||
static void LoadAnimFile(int fd, bool compress);
|
||||
static void LoadAnimFile(RwStream *stream, bool compress, char (*uncompressedAnims)[32] = nil);
|
||||
static void CreateAnimAssocGroups(void);
|
||||
static void RemoveLastAnimFile(void);
|
||||
static CAnimBlendAssocGroup* GetAnimAssocGroups(void) { return ms_aAnimAssocGroups; }
|
||||
};
|
||||
|
||||
@@ -40,72 +40,33 @@ enum AnimationId
|
||||
ANIM_STD_HIT_BACK,
|
||||
ANIM_STD_HIT_RIGHT,
|
||||
ANIM_STD_HIT_FLOOR,
|
||||
|
||||
/* names made up */
|
||||
#if GTA_VERSION <= GTA3_PS2_160
|
||||
ANIM_STD_HIT_BODY,
|
||||
#endif
|
||||
ANIM_STD_HIT_BODYBLOW,
|
||||
ANIM_STD_HIT_CHEST,
|
||||
ANIM_STD_HIT_HEAD,
|
||||
ANIM_STD_HIT_WALK,
|
||||
/**/
|
||||
|
||||
ANIM_STD_HIT_WALL,
|
||||
ANIM_STD_HIT_FLOOR_FRONT,
|
||||
ANIM_STD_HIT_BEHIND,
|
||||
ANIM_STD_PUNCH,
|
||||
ANIM_STD_KICKGROUND,
|
||||
|
||||
/* names made up */
|
||||
ANIM_STD_WEAPON_BAT_H,
|
||||
ANIM_STD_WEAPON_BAT_V,
|
||||
ANIM_STD_WEAPON_HGUN_BODY,
|
||||
ANIM_STD_WEAPON_AK_BODY,
|
||||
ANIM_STD_WEAPON_PUMP,
|
||||
ANIM_STD_WEAPON_SNIPER,
|
||||
ANIM_STD_WEAPON_THROW,
|
||||
/**/
|
||||
|
||||
ANIM_STD_THROW_UNDER,
|
||||
|
||||
/* names made up */
|
||||
ANIM_STD_START_THROW,
|
||||
/**/
|
||||
|
||||
ANIM_STD_DETONATE,
|
||||
|
||||
/* names made up */
|
||||
ANIM_STD_HGUN_RELOAD,
|
||||
ANIM_STD_AK_RELOAD,
|
||||
#ifdef PC_PLAYER_CONTROLS
|
||||
// maybe wrong define, but unused anyway
|
||||
ANIM_FPS_PUNCH,
|
||||
ANIM_FPS_BAT,
|
||||
ANIM_FPS_UZI,
|
||||
ANIM_FPS_PUMP,
|
||||
ANIM_FPS_AK,
|
||||
ANIM_FPS_M16,
|
||||
ANIM_FPS_ROCKET,
|
||||
#endif
|
||||
/**/
|
||||
|
||||
ANIM_STD_FIGHT_IDLE,
|
||||
ANIM_STD_FIGHT_2IDLE,
|
||||
ANIM_STD_FIGHT_SHUFFLE_F,
|
||||
|
||||
/* names made up */
|
||||
ANIM_STD_FIGHT_BODYBLOW,
|
||||
ANIM_STD_FIGHT_HEAD,
|
||||
ANIM_STD_FIGHT_KICK,
|
||||
ANIM_STD_FIGHT_KNEE,
|
||||
ANIM_STD_FIGHT_LHOOK,
|
||||
ANIM_STD_FIGHT_PUNCH,
|
||||
ANIM_STD_FIGHT_ROUNDHOUSE,
|
||||
ANIM_STD_FIGHT_LONGKICK,
|
||||
/**/
|
||||
|
||||
ANIM_STD_PARTIAL_PUNCH,
|
||||
ANIM_FIGHT_ATTACK_A1,
|
||||
ANIM_FIGHT_ATTACK_A2,
|
||||
ANIM_FIGHT_ATTACK_A3,
|
||||
ANIM_FIGHT_ATTACK_B1,
|
||||
ANIM_FIGHT_ATTACK_B2,
|
||||
ANIM_FIGHT_ATTACK_B3,
|
||||
ANIM_FIGHT_HIT_A1,
|
||||
ANIM_FIGHT_HIT_A2,
|
||||
ANIM_FIGHT_HIT_A3,
|
||||
ANIM_FIGHT_HIT_B1,
|
||||
ANIM_FIGHT_HIT_B2,
|
||||
ANIM_FIGHT_HIT_B3,
|
||||
ANIM_STD_DETONATE,
|
||||
ANIM_STD_PUNCH,
|
||||
ANIM_STD_PARTIALPUNCH,
|
||||
ANIM_STD_KICKGROUND,
|
||||
|
||||
ANIM_STD_THROW_UNDER,
|
||||
ANIM_STD_FIGHT_SHUFFLE_B,
|
||||
|
||||
ANIM_STD_JACKEDCAR_RHS,
|
||||
ANIM_STD_JACKEDCAR_LO_RHS,
|
||||
ANIM_STD_JACKEDCAR_LHS,
|
||||
@@ -124,6 +85,7 @@ enum AnimationId
|
||||
ANIM_STD_CAR_CLOSE_DOOR_LO_LHS,
|
||||
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS,
|
||||
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS,
|
||||
ANIM_STD_CAR_JUMP_IN_LO_LHS,
|
||||
ANIM_STD_GETOUT_LHS,
|
||||
ANIM_STD_GETOUT_LO_LHS,
|
||||
ANIM_STD_CAR_CLOSE_LHS,
|
||||
@@ -149,29 +111,36 @@ enum AnimationId
|
||||
ANIM_STD_CAR_DRIVE_RIGHT_LO,
|
||||
ANIM_STD_CAR_DRIVEBY_LEFT,
|
||||
ANIM_STD_CAR_DRIVEBY_RIGHT,
|
||||
ANIM_STD_CAR_DRIVEBY_LEFT_LO,
|
||||
ANIM_STD_CAR_DRIVEBY_RIGHT_LO,
|
||||
ANIM_STD_CAR_LOOKBEHIND,
|
||||
ANIM_STD_BOAT_DRIVE,
|
||||
ANIM_STD_BOAT_DRIVE_LEFT,
|
||||
ANIM_STD_BOAT_DRIVE_RIGHT,
|
||||
ANIM_STD_BOAT_LOOKBEHIND,
|
||||
|
||||
ANIM_STD_BIKE_PICKUP_LHS,
|
||||
ANIM_STD_BIKE_PICKUP_RHS,
|
||||
ANIM_STD_BIKE_PULLUP_LHS,
|
||||
ANIM_STD_BIKE_PULLUP_RHS,
|
||||
ANIM_STD_BIKE_ELBOW_LHS,
|
||||
ANIM_STD_BIKE_ELBOW_RHS,
|
||||
ANIM_STD_BIKE_FALLOFF,
|
||||
ANIM_STD_BIKE_FALLBACK,
|
||||
|
||||
ANIM_STD_GETOUT_RHS,
|
||||
ANIM_STD_GETOUT_LO_RHS,
|
||||
ANIM_STD_CAR_CLOSE_RHS,
|
||||
ANIM_STD_CAR_HOOKERTALK,
|
||||
ANIM_STD_COACH_OPEN_LHS,
|
||||
ANIM_STD_COACH_OPEN_RHS,
|
||||
ANIM_STD_COACH_GET_IN_LHS,
|
||||
ANIM_STD_COACH_GET_IN_RHS,
|
||||
ANIM_STD_COACH_GET_OUT_LHS,
|
||||
|
||||
ANIM_STD_TRAIN_GETIN,
|
||||
ANIM_STD_TRAIN_GETOUT,
|
||||
|
||||
ANIM_STD_CRAWLOUT_LHS,
|
||||
ANIM_STD_CRAWLOUT_RHS,
|
||||
ANIM_STD_VAN_OPEN_DOOR_REAR_LHS,
|
||||
ANIM_STD_VAN_GET_IN_REAR_LHS,
|
||||
ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS,
|
||||
ANIM_STD_VAN_GET_OUT_REAR_LHS,
|
||||
ANIM_STD_VAN_OPEN_DOOR_REAR_RHS,
|
||||
ANIM_STD_VAN_GET_IN_REAR_RHS,
|
||||
ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS,
|
||||
ANIM_STD_VAN_GET_OUT_REAR_RHS,
|
||||
ANIM_STD_ROLLOUT_LHS,
|
||||
ANIM_STD_ROLLOUT_RHS,
|
||||
|
||||
ANIM_STD_GET_UP,
|
||||
ANIM_STD_GET_UP_LEFT,
|
||||
ANIM_STD_GET_UP_RIGHT,
|
||||
@@ -183,22 +152,23 @@ enum AnimationId
|
||||
ANIM_STD_FALL_GLIDE,
|
||||
ANIM_STD_FALL_LAND,
|
||||
ANIM_STD_FALL_COLLAPSE,
|
||||
ANIM_STD_FALL_ONBACK,
|
||||
ANIM_STD_FALL_ONFRONT,
|
||||
|
||||
ANIM_STD_EVADE_STEP,
|
||||
ANIM_STD_EVADE_DIVE,
|
||||
ANIM_STD_COMMANDO_ROLL,
|
||||
ANIM_STD_XPRESS_SCRATCH,
|
||||
ANIM_STD_ROADCROSS,
|
||||
ANIM_STD_TURN180,
|
||||
ANIM_STD_ARREST,
|
||||
ANIM_STD_DROWN,
|
||||
ANIM_MEDIC_CPR,
|
||||
ANIM_STD_DUCK_DOWN,
|
||||
ANIM_STD_DUCK_LOW,
|
||||
|
||||
ANIM_STD_DUCK_WEAPON,
|
||||
|
||||
ANIM_STD_RBLOCK_SHOOT,
|
||||
|
||||
/* names made up */
|
||||
ANIM_STD_THROW_UNDER2,
|
||||
/**/
|
||||
|
||||
ANIM_STD_HANDSUP,
|
||||
ANIM_STD_HANDSCOWER,
|
||||
ANIM_STD_PARTIAL_FUCKU,
|
||||
@@ -206,5 +176,157 @@ enum AnimationId
|
||||
ANIM_STD_PHONE_OUT,
|
||||
ANIM_STD_PHONE_TALK,
|
||||
|
||||
ANIM_STD_NUM
|
||||
ANIM_STD_SEAT_DOWN,
|
||||
ANIM_STD_SEAT_UP,
|
||||
ANIM_STD_SEAT_IDLE,
|
||||
ANIM_STD_SEAT_RVRS,
|
||||
ANIM_STD_ATM,
|
||||
ANIM_STD_ABSEIL,
|
||||
|
||||
ANIM_STD_NUM,
|
||||
|
||||
ANIM_STD_VAN_OPEN_DOOR_REAR_LHS,
|
||||
ANIM_STD_VAN_GET_IN_REAR_LHS,
|
||||
ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS,
|
||||
ANIM_STD_VAN_GET_OUT_REAR_LHS,
|
||||
ANIM_STD_VAN_OPEN_DOOR_REAR_RHS,
|
||||
ANIM_STD_VAN_GET_IN_REAR_RHS,
|
||||
ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS,
|
||||
ANIM_STD_VAN_GET_OUT_REAR_RHS,
|
||||
|
||||
ANIM_STD_COACH_OPEN_LHS,
|
||||
ANIM_STD_COACH_OPEN_RHS,
|
||||
ANIM_STD_COACH_GET_IN_LHS,
|
||||
ANIM_STD_COACH_GET_IN_RHS,
|
||||
ANIM_STD_COACH_GET_OUT_LHS,
|
||||
|
||||
ANIM_BIKE_RIDE,
|
||||
ANIM_BIKE_READY,
|
||||
ANIM_BIKE_LEFT,
|
||||
ANIM_BIKE_RIGHT,
|
||||
ANIM_BIKE_LEANB,
|
||||
ANIM_BIKE_LEANF,
|
||||
ANIM_BIKE_WALKBACK,
|
||||
ANIM_BIKE_JUMPON_LHS,
|
||||
ANIM_BIKE_JUMPON_RHS,
|
||||
ANIM_BIKE_KICK,
|
||||
ANIM_BIKE_HIT,
|
||||
ANIM_BIKE_GETOFF_LHS,
|
||||
ANIM_BIKE_GETOFF_RHS,
|
||||
ANIM_BIKE_GETOFF_BACK,
|
||||
ANIM_BIKE_DRIVEBY_LHS,
|
||||
ANIM_BIKE_DRIVEBY_RHS,
|
||||
ANIM_BIKE_DRIVEBY_FORWARD,
|
||||
ANIM_BIKE_RIDE_P,
|
||||
|
||||
ANIM_ATTACK_1,
|
||||
ANIM_ATTACK_2,
|
||||
ANIM_ATTACK_EXTRA1,
|
||||
ANIM_ATTACK_EXTRA2,
|
||||
ANIM_ATTACK_3,
|
||||
|
||||
// our synonyms... because originals are hard to understand
|
||||
ANIM_WEAPON_FIRE = ANIM_ATTACK_1,
|
||||
ANIM_WEAPON_CROUCHFIRE,
|
||||
ANIM_WEAPON_FIRE_2ND = ANIM_WEAPON_CROUCHFIRE,
|
||||
ANIM_WEAPON_RELOAD,
|
||||
ANIM_WEAPON_CROUCHRELOAD,
|
||||
ANIM_WEAPON_FIRE_3RD,
|
||||
ANIM_THROWABLE_THROW = ANIM_ATTACK_1,
|
||||
ANIM_THROWABLE_THROWU,
|
||||
ANIM_THROWABLE_START_THROW,
|
||||
ANIM_MELEE_ATTACK = ANIM_ATTACK_1,
|
||||
ANIM_MELEE_ATTACK_2ND,
|
||||
ANIM_MELEE_ATTACK_START,
|
||||
ANIM_MELEE_IDLE_FIGHTMODE,
|
||||
ANIM_MELEE_ATTACK_FINISH,
|
||||
|
||||
ANIM_SUNBATHE_IDLE,
|
||||
ANIM_SUNBATHE_DOWN,
|
||||
ANIM_SUNBATHE_UP,
|
||||
ANIM_SUNBATHE_ESCAPE,
|
||||
|
||||
ANIM_MEDIC_CPR,
|
||||
|
||||
ANIM_PLAYER_IDLE1,
|
||||
ANIM_PLAYER_IDLE2,
|
||||
ANIM_PLAYER_IDLE3,
|
||||
ANIM_PLAYER_IDLE4,
|
||||
|
||||
ANIM_RIOT_ANGRY,
|
||||
ANIM_RIOT_ANGRY_B,
|
||||
ANIM_RIOT_CHANT,
|
||||
ANIM_RIOT_PUNCHES,
|
||||
ANIM_RIOT_SHOUT,
|
||||
ANIM_RIOT_CHALLENGE,
|
||||
ANIM_RIOT_FUCKYOU,
|
||||
|
||||
ANIM_STRIP_A,
|
||||
ANIM_STRIP_B,
|
||||
ANIM_STRIP_C,
|
||||
ANIM_STRIP_D,
|
||||
ANIM_STRIP_E,
|
||||
ANIM_STRIP_F,
|
||||
ANIM_STRIP_G,
|
||||
|
||||
|
||||
ANIM_MULTIPLAYER_CUTSCENE_MPNOTE,
|
||||
ANIM_MULTIPLAYER_CUTSCENE_MPNOTE_LOOP,
|
||||
|
||||
ANIM_CS_MISC_IDLE_LOOK,
|
||||
ANIM_CS_MISC_IDLE_NO,
|
||||
ANIM_CS_MISC_IDLE_YES,
|
||||
ANIM_CS_MISC_IDLE_CHAT2,
|
||||
ANIM_CS_MISC_IDLE_COUGH,
|
||||
ANIM_CS_MISC_IDLE_GIGGLE_FEMALE,
|
||||
ANIM_CS_MISC_IDLE_TOUGH_CHAT,
|
||||
ANIM_CS_MISC_IDLE_CELL_TALK,
|
||||
|
||||
ANIM_DONH2_CAMERA,
|
||||
ANIM_DONH3_HAPPY,
|
||||
|
||||
ANIM_JDT2_ANXIOUS_TALK,
|
||||
ANIM_JDT2_SHRUG,
|
||||
ANIM_JDT4_DILDO_TALK,
|
||||
ANIM_JDT5_CALM_DOWN,
|
||||
ANIM_JDT5_POINT,
|
||||
ANIM_JDT6_PICKUP,
|
||||
ANIM_JDT6_KNOCK,
|
||||
|
||||
ANIM_MAR1_SKIRT,
|
||||
ANIM_MAR2_CELL_ANSWER,
|
||||
ANIM_MAR2_CELL_END,
|
||||
ANIM_MAR2_CELL_TALK,
|
||||
ANIM_MAR2_FOOT_TAP,
|
||||
ANIM_MAR3_HOOCHY,
|
||||
ANIM_MAR3_NOTE_IDLE,
|
||||
ANIM_MAR3_NOTE_PICKUP,
|
||||
|
||||
ANIM_SAL1_BIREFCASE_DOWN,
|
||||
ANIM_SAL2_IDLE_SEATED,
|
||||
ANIM_SAL2_SEAT_TO_STAND,
|
||||
ANIM_SAL3_SEATED_TALK,
|
||||
ANIM_SAL3_SEATED_IDLE,
|
||||
ANIM_SAL3_SIT_DOWN,
|
||||
ANIM_SAL4_DUST_DOWN,
|
||||
ANIM_SAL4_GIRL_RUN,
|
||||
ANIM_SAL6_ANGRY_SEATED,
|
||||
ANIM_SAL6_IDLE_SEATED,
|
||||
ANIM_SAL7_LOOKOUT,
|
||||
|
||||
ANIM_VIC2_POINT_ANGRY,
|
||||
ANIM_VIC3_WAFT,
|
||||
ANIM_VIC3_PICKUP_ROLL,
|
||||
ANIM_VIC4_CARRY_BOX,
|
||||
ANIM_VIC4_CELL_LOOK,
|
||||
ANIM_VIC4_CRATE_IDLE,
|
||||
ANIM_VIC6_CELL_ANGRY,
|
||||
|
||||
ANIM_TOURIST3,
|
||||
ANIM_TOURIST2,
|
||||
ANIM_TOURIST1,
|
||||
|
||||
ANIM_MAC2_PLEAD,
|
||||
|
||||
ANIM_VIC7_PROD_WITH_FOOT
|
||||
};
|
||||
@@ -2,26 +2,29 @@
|
||||
#include "PedModelInfo.h"
|
||||
#include "Bones.h"
|
||||
|
||||
#ifdef PED_SKIN
|
||||
|
||||
int
|
||||
ConvertPedNode2BoneTag(int node)
|
||||
{
|
||||
switch(node){
|
||||
case PED_TORSO: return BONE_waist;
|
||||
case PED_MID: return BONE_torso; // this is what Xbox/Mobile use
|
||||
// return BONE_mid; // this is what PS2/PC use
|
||||
case PED_HEAD: return BONE_head;
|
||||
case PED_UPPERARML: return BONE_upperarml;
|
||||
case PED_UPPERARMR: return BONE_upperarmr;
|
||||
case PED_HANDL: return BONE_Lhand;
|
||||
case PED_HANDR: return BONE_Rhand;
|
||||
case PED_UPPERLEGL: return BONE_upperlegl;
|
||||
case PED_UPPERLEGR: return BONE_upperlegr;
|
||||
case PED_FOOTL: return BONE_footl;
|
||||
case PED_FOOTR: return BONE_footr;
|
||||
case PED_LOWERLEGR: return BONE_lowerlegl;
|
||||
case PED_MID: return BONE_spine1;
|
||||
case PED_HEAD: return BONE_head;
|
||||
case PED_UPPERARML: return BONE_l_upperarm;
|
||||
case PED_UPPERARMR: return BONE_r_upperarm;
|
||||
case PED_HANDL: return BONE_l_hand;
|
||||
case PED_HANDR: return BONE_r_hand;
|
||||
case PED_UPPERLEGL: return BONE_l_thigh;
|
||||
case PED_UPPERLEGR: return BONE_r_thigh;
|
||||
case PED_FOOTL: return BONE_l_foot;
|
||||
case PED_FOOTR: return BONE_r_foot;
|
||||
case PED_LOWERLEGR: return BONE_r_calf;
|
||||
case PED_LOWERLEGL: return BONE_l_calf;
|
||||
case PED_FOREARML: return BONE_l_forearm;
|
||||
case PED_FOREARMR: return BONE_r_forearm;
|
||||
case PED_CLAVICLEL: return BONE_l_clavicle;
|
||||
case PED_CLAVICLER: return BONE_r_clavicle;
|
||||
case PED_NECK: return BONE_neck;
|
||||
}
|
||||
assert(0 && "this node has no bone");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -29,24 +32,28 @@ const char*
|
||||
ConvertBoneTag2BoneName(int tag)
|
||||
{
|
||||
switch(tag){
|
||||
case BONE_waist: return "Swaist";
|
||||
case BONE_upperlegr: return "Supperlegr";
|
||||
case BONE_lowerlegr: return "Slowerlegr";
|
||||
case BONE_footr: return "Sfootr";
|
||||
case BONE_upperlegl: return "Supperlegl";
|
||||
case BONE_lowerlegl: return "Slowerlegl";
|
||||
case BONE_footl: return "Sfootl";
|
||||
case BONE_mid: return "Smid";
|
||||
case BONE_torso: return "Storso";
|
||||
case BONE_head: return "Shead";
|
||||
case BONE_upperarmr: return "Supperarmr";
|
||||
case BONE_lowerarmr: return "Slowerarmr";
|
||||
case BONE_Rhand: return "SRhand";
|
||||
case BONE_upperarml: return "Supperarml";
|
||||
case BONE_lowerarml: return "Slowerarml";
|
||||
case BONE_Lhand: return "SLhand";
|
||||
case BONE_root: return "Root";
|
||||
case BONE_pelvis: return "Pelvis";
|
||||
case BONE_spine: return "Spine";
|
||||
case BONE_spine1: return "Spine1";
|
||||
case BONE_neck: return "Neck";
|
||||
case BONE_head: return "Head";
|
||||
case BONE_r_clavicle: return "Bip01 R Clavicle";
|
||||
case BONE_r_upperarm: return "R UpperArm";
|
||||
case BONE_r_forearm: return "R Forearm";
|
||||
case BONE_r_hand: return "R Hand";
|
||||
case BONE_r_finger: return "R Fingers";
|
||||
case BONE_l_clavicle: return "Bip01 L Clavicle";
|
||||
case BONE_l_upperarm: return "L UpperArm";
|
||||
case BONE_l_forearm: return "L Forearm";
|
||||
case BONE_l_hand: return "L Hand";
|
||||
case BONE_l_finger: return "L Fingers";
|
||||
case BONE_l_thigh: return "L Thigh";
|
||||
case BONE_l_calf: return "L Calf";
|
||||
case BONE_l_foot: return "L Foot";
|
||||
case BONE_r_thigh: return "R Thigh";
|
||||
case BONE_r_calf: return "R Calf";
|
||||
case BONE_r_foot: return "R Foot";
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,22 +2,28 @@
|
||||
|
||||
enum BoneTag
|
||||
{
|
||||
BONE_waist,
|
||||
BONE_upperlegr,
|
||||
BONE_lowerlegr,
|
||||
BONE_footr,
|
||||
BONE_upperlegl,
|
||||
BONE_lowerlegl,
|
||||
BONE_footl,
|
||||
BONE_mid,
|
||||
BONE_torso,
|
||||
BONE_head,
|
||||
BONE_upperarmr,
|
||||
BONE_lowerarmr,
|
||||
BONE_Rhand,
|
||||
BONE_upperarml,
|
||||
BONE_lowerarml,
|
||||
BONE_Lhand,
|
||||
BONE_root = 0,
|
||||
BONE_pelvis = 1,
|
||||
BONE_spine = 2,
|
||||
BONE_spine1 = 3,
|
||||
BONE_neck = 4,
|
||||
BONE_head = 5,
|
||||
BONE_l_clavicle = 31,
|
||||
BONE_l_upperarm = 32,
|
||||
BONE_l_forearm = 33,
|
||||
BONE_l_hand = 34,
|
||||
BONE_l_finger = 35,
|
||||
BONE_r_clavicle = 21,
|
||||
BONE_r_upperarm = 22,
|
||||
BONE_r_forearm = 23,
|
||||
BONE_r_hand = 24,
|
||||
BONE_r_finger = 25,
|
||||
BONE_l_thigh = 41,
|
||||
BONE_l_calf = 42,
|
||||
BONE_l_foot = 43,
|
||||
BONE_r_thigh = 51,
|
||||
BONE_r_calf = 52,
|
||||
BONE_r_foot = 53,
|
||||
};
|
||||
|
||||
int ConvertPedNode2BoneTag(int node);
|
||||
|
||||
@@ -16,147 +16,60 @@
|
||||
#include "World.h"
|
||||
#include "PlayerPed.h"
|
||||
#include "Wanted.h"
|
||||
#include "CutsceneHead.h"
|
||||
#include "RpAnimBlend.h"
|
||||
#include "ModelIndices.h"
|
||||
#include "TempColModels.h"
|
||||
#include "ColStore.h"
|
||||
#include "Radar.h"
|
||||
#include "Pools.h"
|
||||
#include "crossplatform.h"
|
||||
|
||||
const struct {
|
||||
const char *szTrackName;
|
||||
int iTrackId;
|
||||
} musicNameIdAssoc[] = {
|
||||
{ "JB", STREAMED_SOUND_NEWS_INTRO },
|
||||
{ "BET", STREAMED_SOUND_BANK_INTRO },
|
||||
{ "L1_LG", STREAMED_SOUND_CUTSCENE_LUIGI1_LG },
|
||||
{ "L2_DSB", STREAMED_SOUND_CUTSCENE_LUIGI2_DSB },
|
||||
{ "L3_DM", STREAMED_SOUND_CUTSCENE_LUIGI3_DM },
|
||||
{ "L4_PAP", STREAMED_SOUND_CUTSCENE_LUIGI4_PAP },
|
||||
{ "L5_TFB", STREAMED_SOUND_CUTSCENE_LUIGI5_TFB },
|
||||
{ "J0_DM2", STREAMED_SOUND_CUTSCENE_JOEY0_DM2 },
|
||||
{ "J1_LFL", STREAMED_SOUND_CUTSCENE_JOEY1_LFL },
|
||||
{ "J2_KCL", STREAMED_SOUND_CUTSCENE_JOEY2_KCL },
|
||||
{ "J3_VH", STREAMED_SOUND_CUTSCENE_JOEY3_VH },
|
||||
{ "J4_ETH", STREAMED_SOUND_CUTSCENE_JOEY4_ETH },
|
||||
{ "J5_DST", STREAMED_SOUND_CUTSCENE_JOEY5_DST },
|
||||
{ "J6_TBJ", STREAMED_SOUND_CUTSCENE_JOEY6_TBJ },
|
||||
{ "T1_TOL", STREAMED_SOUND_CUTSCENE_TONI1_TOL },
|
||||
{ "T2_TPU", STREAMED_SOUND_CUTSCENE_TONI2_TPU },
|
||||
{ "T3_MAS", STREAMED_SOUND_CUTSCENE_TONI3_MAS },
|
||||
{ "T4_TAT", STREAMED_SOUND_CUTSCENE_TONI4_TAT },
|
||||
{ "T5_BF", STREAMED_SOUND_CUTSCENE_TONI5_BF },
|
||||
{ "S0_MAS", STREAMED_SOUND_CUTSCENE_SAL0_MAS },
|
||||
{ "S1_PF", STREAMED_SOUND_CUTSCENE_SAL1_PF },
|
||||
{ "S2_CTG", STREAMED_SOUND_CUTSCENE_SAL2_CTG },
|
||||
{ "S3_RTC", STREAMED_SOUND_CUTSCENE_SAL3_RTC },
|
||||
{ "S5_LRQ", STREAMED_SOUND_CUTSCENE_SAL5_LRQ },
|
||||
{ "S4_BDBA", STREAMED_SOUND_CUTSCENE_SAL4_BDBA },
|
||||
{ "S4_BDBB", STREAMED_SOUND_CUTSCENE_SAL4_BDBB },
|
||||
{ "S2_CTG2", STREAMED_SOUND_CUTSCENE_SAL2_CTG2 },
|
||||
{ "S4_BDBD", STREAMED_SOUND_CUTSCENE_SAL4_BDBD },
|
||||
{ "S5_LRQB", STREAMED_SOUND_CUTSCENE_SAL5_LRQB },
|
||||
{ "S5_LRQC", STREAMED_SOUND_CUTSCENE_SAL5_LRQC },
|
||||
{ "A1_SS0", STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO },
|
||||
{ "A2_PP", STREAMED_SOUND_CUTSCENE_ASUKA_2_PP },
|
||||
{ "A3_SS", STREAMED_SOUND_CUTSCENE_ASUKA_3_SS },
|
||||
{ "A4_PDR", STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR },
|
||||
{ "A5_K2FT", STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT},
|
||||
{ "K1_KBO", STREAMED_SOUND_CUTSCENE_KENJI1_KBO },
|
||||
{ "K2_GIS", STREAMED_SOUND_CUTSCENE_KENJI2_GIS },
|
||||
{ "K3_DS", STREAMED_SOUND_CUTSCENE_KENJI3_DS },
|
||||
{ "K4_SHI", STREAMED_SOUND_CUTSCENE_KENJI4_SHI },
|
||||
{ "K5_SD", STREAMED_SOUND_CUTSCENE_KENJI5_SD },
|
||||
{ "R0_PDR2", STREAMED_SOUND_CUTSCENE_RAY0_PDR2 },
|
||||
{ "R1_SW", STREAMED_SOUND_CUTSCENE_RAY1_SW },
|
||||
{ "R2_AP", STREAMED_SOUND_CUTSCENE_RAY2_AP },
|
||||
{ "R3_ED", STREAMED_SOUND_CUTSCENE_RAY3_ED },
|
||||
{ "R4_GF", STREAMED_SOUND_CUTSCENE_RAY4_GF },
|
||||
{ "R5_PB", STREAMED_SOUND_CUTSCENE_RAY5_PB },
|
||||
{ "R6_MM", STREAMED_SOUND_CUTSCENE_RAY6_MM },
|
||||
{ "D1_STOG", STREAMED_SOUND_CUTSCENE_DONALD1_STOG },
|
||||
{ "D2_KK", STREAMED_SOUND_CUTSCENE_DONALD2_KK },
|
||||
{ "D3_ADO", STREAMED_SOUND_CUTSCENE_DONALD3_ADO },
|
||||
{ "D5_ES", STREAMED_SOUND_CUTSCENE_DONALD5_ES },
|
||||
{ "D7_MLD", STREAMED_SOUND_CUTSCENE_DONALD7_MLD },
|
||||
{ "D4_GTA", STREAMED_SOUND_CUTSCENE_DONALD4_GTA },
|
||||
{ "D4_GTA2", STREAMED_SOUND_CUTSCENE_DONALD4_GTA2 },
|
||||
{ "D6_STS", STREAMED_SOUND_CUTSCENE_DONALD6_STS },
|
||||
{ "A6_BAIT", STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT },
|
||||
{ "A7_ETG", STREAMED_SOUND_CUTSCENE_ASUKA7_ETG },
|
||||
{ "A8_PS", STREAMED_SOUND_CUTSCENE_ASUKA8_PS },
|
||||
{ "A9_ASD", STREAMED_SOUND_CUTSCENE_ASUKA9_ASD },
|
||||
{ "K4_SHI2", STREAMED_SOUND_CUTSCENE_KENJI4_SHI2 },
|
||||
{ "C1_TEX", STREAMED_SOUND_CUTSCENE_CATALINA1_TEX },
|
||||
{ "EL_PH1", STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1 },
|
||||
{ "EL_PH2", STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2 },
|
||||
{ "EL_PH3", STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3 },
|
||||
{ "EL_PH4", STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4 },
|
||||
{ "YD_PH1", STREAMED_SOUND_CUTSCENE_YARDIE_PH1 },
|
||||
{ "YD_PH2", STREAMED_SOUND_CUTSCENE_YARDIE_PH2 },
|
||||
{ "YD_PH3", STREAMED_SOUND_CUTSCENE_YARDIE_PH3 },
|
||||
{ "YD_PH4", STREAMED_SOUND_CUTSCENE_YARDIE_PH4 },
|
||||
{ "HD_PH1", STREAMED_SOUND_CUTSCENE_HOODS_PH1 },
|
||||
{ "HD_PH2", STREAMED_SOUND_CUTSCENE_HOODS_PH2 },
|
||||
{ "HD_PH3", STREAMED_SOUND_CUTSCENE_HOODS_PH3 },
|
||||
{ "HD_PH4", STREAMED_SOUND_CUTSCENE_HOODS_PH4 },
|
||||
{ "HD_PH5", STREAMED_SOUND_CUTSCENE_HOODS_PH5 },
|
||||
{ "MT_PH1", STREAMED_SOUND_CUTSCENE_MARTY_PH1 },
|
||||
{ "MT_PH2", STREAMED_SOUND_CUTSCENE_MARTY_PH2 },
|
||||
{ "MT_PH3", STREAMED_SOUND_CUTSCENE_MARTY_PH3 },
|
||||
{ "MT_PH4", STREAMED_SOUND_CUTSCENE_MARTY_PH4 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
static bool bModelsRemovedForCutscene;
|
||||
static int32 NumberOfSavedWeapons;
|
||||
static eWeaponType SavedWeaponIDs[TOTAL_WEAPON_SLOTS];
|
||||
static int32 SavedWeaponAmmo[TOTAL_WEAPON_SLOTS];
|
||||
|
||||
int
|
||||
FindCutsceneAudioTrackId(const char *szCutsceneName)
|
||||
{
|
||||
for (int i = 0; musicNameIdAssoc[i].szTrackName; i++) {
|
||||
if (!CGeneral::faststricmp(musicNameIdAssoc[i].szTrackName, szCutsceneName))
|
||||
return musicNameIdAssoc[i].iTrackId;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool CCutsceneMgr::ms_running;
|
||||
bool CCutsceneMgr::ms_cutsceneProcessing;
|
||||
char CCutsceneMgr::ms_cAppendAnimName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
char CCutsceneMgr::ms_cAppendObjectName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
int CCutsceneMgr::ms_numAppendObjectNames;
|
||||
CDirectory *CCutsceneMgr::ms_pCutsceneDir;
|
||||
CCutsceneObject *CCutsceneMgr::ms_pCutsceneObjects[NUMCUTSCENEOBJECTS];
|
||||
int32 CCutsceneMgr::ms_numCutsceneObjs;
|
||||
bool CCutsceneMgr::ms_loaded;
|
||||
bool CCutsceneMgr::ms_animLoaded;
|
||||
bool CCutsceneMgr::ms_hasFileInfo;
|
||||
bool CCutsceneMgr::ms_wasCutsceneSkipped;
|
||||
bool CCutsceneMgr::ms_useLodMultiplier;
|
||||
char CCutsceneMgr::ms_cutsceneName[CUTSCENENAMESIZE];
|
||||
CAnimBlendAssocGroup CCutsceneMgr::ms_cutsceneAssociations;
|
||||
CVector CCutsceneMgr::ms_cutsceneOffset;
|
||||
float CCutsceneMgr::ms_cutsceneTimer;
|
||||
bool CCutsceneMgr::ms_cutsceneProcessing;
|
||||
bool CCutsceneMgr::ms_running;
|
||||
bool CCutsceneMgr::ms_animLoaded;
|
||||
uint32 CCutsceneMgr::ms_cutsceneLoadStatus;
|
||||
|
||||
RpAtomic *
|
||||
CalculateBoundingSphereRadiusCB(RpAtomic *atomic, void *data)
|
||||
{
|
||||
float radius = RpAtomicGetBoundingSphere(atomic)->radius;
|
||||
RwV3d center = RpAtomicGetBoundingSphere(atomic)->center;
|
||||
|
||||
for (RwFrame *frame = RpAtomicGetFrame(atomic); RwFrameGetParent(frame); frame = RwFrameGetParent(frame))
|
||||
RwV3dTransformPoints(¢er, ¢er, 1, RwFrameGetMatrix(frame));
|
||||
|
||||
float size = RwV3dLength(¢er) + radius;
|
||||
if (size > *(float *)data)
|
||||
*(float *)data = size;
|
||||
return atomic;
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::Initialise(void)
|
||||
CCutsceneMgr::Initialise(void *dir)
|
||||
{
|
||||
ms_numCutsceneObjs = 0;
|
||||
ms_loaded = false;
|
||||
ms_cutsceneLoadStatus = CUTSCENE_NOT_LOADED;
|
||||
ms_running = false;
|
||||
ms_animLoaded = false;
|
||||
ms_cutsceneProcessing = false;
|
||||
ms_useLodMultiplier = false;
|
||||
ms_wasCutsceneSkipped = false;
|
||||
ms_hasFileInfo = false;
|
||||
//ms_numCutsceneObjs = 0;
|
||||
//ms_loaded = false;
|
||||
if (gMakeResources) {
|
||||
ms_pCutsceneDir = new CDirectory(CUTSCENEDIRSIZE);
|
||||
ms_pCutsceneDir->ReadDirFile("ANIM\\CUTS.DIR");
|
||||
}
|
||||
else
|
||||
ms_pCutsceneDir = (CDirectory*)dir;
|
||||
|
||||
ms_pCutsceneDir = new CDirectory(CUTSCENEDIRSIZE);
|
||||
ms_pCutsceneDir->ReadDirFile("ANIM\\CUTS.DIR");
|
||||
//numUncompressedAnims = 0;
|
||||
//uncompressedAnims[0][0] = '\0';
|
||||
}
|
||||
|
||||
void CCutsceneMgr::Write(base::cRelocatableChunkWriter& writer)
|
||||
{
|
||||
writer.AllocateRaw(ms_pCutsceneDir, sizeof(*ms_pCutsceneDir), 4, false, true);
|
||||
writer.AllocateRaw(ms_pCutsceneDir->entries, sizeof(CDirectory::DirectoryInfo) * ms_pCutsceneDir->numEntries, 4, false, true);
|
||||
writer.AddPatch(ms_pCutsceneDir);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -168,257 +81,157 @@ CCutsceneMgr::Shutdown(void)
|
||||
void
|
||||
CCutsceneMgr::LoadCutsceneData(const char *szCutsceneName)
|
||||
{
|
||||
int file;
|
||||
uint32 size;
|
||||
uint32 offset;
|
||||
CPlayerPed *pPlayerPed;
|
||||
|
||||
ms_cutsceneProcessing = true;
|
||||
if (!strcasecmp(szCutsceneName, "jb"))
|
||||
ms_useLodMultiplier = true;
|
||||
CTimer::Stop();
|
||||
|
||||
ms_pCutsceneDir->numEntries = 0;
|
||||
ms_pCutsceneDir->ReadDirFile("ANIM\\CUTS.DIR");
|
||||
|
||||
CStreaming::RemoveUnusedModelsInLoadedList();
|
||||
CGame::DrasticTidyUpMemory(true);
|
||||
|
||||
strcpy(ms_cutsceneName, szCutsceneName);
|
||||
file = CFileMgr::OpenFile("ANIM\\CUTS.IMG", "rb");
|
||||
|
||||
// Load animations
|
||||
sprintf(gString, "%s.IFP", szCutsceneName);
|
||||
if (ms_pCutsceneDir->FindItem(gString, offset, size)) {
|
||||
CStreaming::MakeSpaceFor(size << 11);
|
||||
CStreaming::ImGonnaUseStreamingMemory();
|
||||
CFileMgr::Seek(file, offset << 11, SEEK_SET);
|
||||
CAnimManager::LoadAnimFile(file, false);
|
||||
ms_cutsceneAssociations.CreateAssociations(szCutsceneName);
|
||||
CStreaming::IHaveUsedStreamingMemory();
|
||||
ms_animLoaded = true;
|
||||
} else {
|
||||
ms_animLoaded = false;
|
||||
}
|
||||
|
||||
// Load camera data
|
||||
sprintf(gString, "%s.DAT", szCutsceneName);
|
||||
if (ms_pCutsceneDir->FindItem(gString, offset, size)) {
|
||||
CFileMgr::Seek(file, offset << 11, SEEK_SET);
|
||||
TheCamera.LoadPathSplines(file);
|
||||
}
|
||||
|
||||
CFileMgr::CloseFile(file);
|
||||
|
||||
if (CGeneral::faststricmp(ms_cutsceneName, "end")) {
|
||||
DMAudio.ChangeMusicMode(MUSICMODE_CUTSCENE);
|
||||
int trackId = FindCutsceneAudioTrackId(szCutsceneName);
|
||||
if (trackId != -1) {
|
||||
printf("Start preload audio %s\n", szCutsceneName);
|
||||
DMAudio.PreloadCutSceneMusic(trackId);
|
||||
printf("End preload audio %s\n", szCutsceneName);
|
||||
}
|
||||
}
|
||||
|
||||
ms_cutsceneTimer = 0.0f;
|
||||
ms_loaded = true;
|
||||
ms_cutsceneOffset = CVector(0.0f, 0.0f, 0.0f);
|
||||
|
||||
pPlayerPed = FindPlayerPed();
|
||||
CTimer::Update();
|
||||
|
||||
pPlayerPed->m_pWanted->ClearQdCrimes();
|
||||
pPlayerPed->bIsVisible = false;
|
||||
pPlayerPed->m_fCurrentStamina = pPlayerPed->m_fMaxStamina;
|
||||
CPad::GetPad(0)->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE);
|
||||
CWorld::Players[CWorld::PlayerInFocus].MakePlayerSafe(true);
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::SetHeadAnim(const char *animName, CObject *pObject)
|
||||
{
|
||||
CCutsceneHead *pCutsceneHead = (CCutsceneHead*)pObject;
|
||||
char szAnim[CUTSCENENAMESIZE * 2];
|
||||
|
||||
sprintf(szAnim, "%s_%s", ms_cutsceneName, animName);
|
||||
pCutsceneHead->PlayAnimation(szAnim);
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::FinishCutscene()
|
||||
{
|
||||
CCutsceneMgr::ms_cutsceneTimer = TheCamera.GetCutSceneFinishTime() * 0.001f;
|
||||
TheCamera.FinishCutscene();
|
||||
|
||||
FindPlayerPed()->bIsVisible = true;
|
||||
CWorld::Players[CWorld::PlayerInFocus].MakePlayerSafe(false);
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::SetupCutsceneToStart(void)
|
||||
{
|
||||
TheCamera.SetCamCutSceneOffSet(ms_cutsceneOffset);
|
||||
TheCamera.TakeControlWithSpline(JUMP_CUT);
|
||||
TheCamera.SetWideScreenOn();
|
||||
|
||||
ms_cutsceneOffset.z++;
|
||||
|
||||
for (int i = ms_numCutsceneObjs - 1; i >= 0; i--) {
|
||||
assert(RwObjectGetType(ms_pCutsceneObjects[i]->m_rwObject) == rpCLUMP);
|
||||
if (CAnimBlendAssociation *pAnimBlendAssoc = RpAnimBlendClumpGetFirstAssociation((RpClump*)ms_pCutsceneObjects[i]->m_rwObject)) {
|
||||
assert(pAnimBlendAssoc->hierarchy->sequences[0].HasTranslation());
|
||||
ms_pCutsceneObjects[i]->SetPosition(ms_cutsceneOffset + ((KeyFrameTrans*)pAnimBlendAssoc->hierarchy->sequences[0].GetKeyFrame(0))->translation);
|
||||
CWorld::Add(ms_pCutsceneObjects[i]);
|
||||
pAnimBlendAssoc->SetRun();
|
||||
} else {
|
||||
ms_pCutsceneObjects[i]->SetPosition(ms_cutsceneOffset);
|
||||
}
|
||||
}
|
||||
|
||||
CTimer::Update();
|
||||
CTimer::Update();
|
||||
ms_running = true;
|
||||
ms_cutsceneTimer = 0.0f;
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::SetCutsceneAnim(const char *animName, CObject *pObject)
|
||||
{
|
||||
CAnimBlendAssociation *pNewAnim;
|
||||
CAnimBlendClumpData *pAnimBlendClumpData;
|
||||
|
||||
assert(RwObjectGetType(pObject->m_rwObject) == rpCLUMP);
|
||||
RpAnimBlendClumpRemoveAllAssociations((RpClump*)pObject->m_rwObject);
|
||||
|
||||
pNewAnim = ms_cutsceneAssociations.CopyAnimation(animName);
|
||||
pNewAnim->SetCurrentTime(0.0f);
|
||||
pNewAnim->flags |= ASSOC_HAS_TRANSLATION;
|
||||
pNewAnim->flags &= ~ASSOC_RUNNING;
|
||||
|
||||
pAnimBlendClumpData = *RPANIMBLENDCLUMPDATA(pObject->m_rwObject);
|
||||
pAnimBlendClumpData->link.Prepend(&pNewAnim->link);
|
||||
}
|
||||
|
||||
CCutsceneHead *
|
||||
CCutsceneMgr::AddCutsceneHead(CObject *pObject, int modelId)
|
||||
{
|
||||
CCutsceneHead *pHead = new CCutsceneHead(pObject);
|
||||
pHead->SetModelIndex(modelId);
|
||||
CWorld::Add(pHead);
|
||||
ms_pCutsceneObjects[ms_numCutsceneObjs++] = pHead;
|
||||
return pHead;
|
||||
}
|
||||
|
||||
CCutsceneObject *
|
||||
CCutsceneMgr::CreateCutsceneObject(int modelId)
|
||||
{
|
||||
CBaseModelInfo *pModelInfo;
|
||||
CColModel *pColModel;
|
||||
float radius;
|
||||
RpClump *clump;
|
||||
CCutsceneObject *pCutsceneObject;
|
||||
|
||||
if (modelId >= MI_CUTOBJ01 && modelId <= MI_CUTOBJ05) {
|
||||
pModelInfo = CModelInfo::GetModelInfo(modelId);
|
||||
pColModel = &CTempColModels::ms_colModelCutObj[modelId - MI_CUTOBJ01];
|
||||
radius = 0.0f;
|
||||
|
||||
pModelInfo->SetColModel(pColModel);
|
||||
clump = (RpClump*)pModelInfo->GetRwObject();
|
||||
assert(RwObjectGetType((RwObject*)clump) == rpCLUMP);
|
||||
RpClumpForAllAtomics(clump, CalculateBoundingSphereRadiusCB, &radius);
|
||||
|
||||
pColModel->boundingSphere.radius = radius;
|
||||
pColModel->boundingBox.min = CVector(-radius, -radius, -radius);
|
||||
pColModel->boundingBox.max = CVector(radius, radius, radius);
|
||||
}
|
||||
|
||||
pCutsceneObject = new CCutsceneObject();
|
||||
pCutsceneObject->SetModelIndex(modelId);
|
||||
ms_pCutsceneObjects[ms_numCutsceneObjs++] = pCutsceneObject;
|
||||
return pCutsceneObject;
|
||||
LoadCutsceneData_overlay(szCutsceneName);
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::DeleteCutsceneData(void)
|
||||
{
|
||||
if (!ms_loaded) return;
|
||||
DeleteCutsceneData_overlay();
|
||||
if (bModelsRemovedForCutscene)
|
||||
LoadEverythingBecauseCutsceneDeletedAllOfIt();
|
||||
}
|
||||
|
||||
ms_cutsceneProcessing = false;
|
||||
ms_useLodMultiplier = false;
|
||||
void
|
||||
CCutsceneMgr::RemoveEverythingBecauseCutsceneDoesntFitInMemory()
|
||||
{
|
||||
//CStreaming::ms_disableStreaming = true;
|
||||
CWorld::ClearExcitingStuffFromArea(FindPlayerCoors(), 120.0f, true);
|
||||
CColStore::RemoveAllCollision();
|
||||
CWorld::bProcessCutsceneOnly = true;
|
||||
/*ms_cutsceneProcessing = true;
|
||||
|
||||
for (--ms_numCutsceneObjs; ms_numCutsceneObjs >= 0; ms_numCutsceneObjs--) {
|
||||
CWorld::Remove(ms_pCutsceneObjects[ms_numCutsceneObjs]);
|
||||
ms_pCutsceneObjects[ms_numCutsceneObjs]->DeleteRwObject();
|
||||
delete ms_pCutsceneObjects[ms_numCutsceneObjs];
|
||||
ms_pCutsceneObjects[ms_numCutsceneObjs] = nil;
|
||||
for (int i = CPools::GetPedPool()->GetSize() - 1; i >= 0; i--) {
|
||||
CPed *pPed = CPools::GetPedPool()->GetSlot(i);
|
||||
if (pPed) {
|
||||
if (!pPed->IsPlayer() && pPed->CanBeDeleted()) {
|
||||
CWorld::Remove(pPed);
|
||||
delete pPed;
|
||||
}
|
||||
}
|
||||
}
|
||||
ms_numCutsceneObjs = 0;
|
||||
|
||||
if (ms_animLoaded)
|
||||
CAnimManager::RemoveLastAnimFile();
|
||||
|
||||
ms_animLoaded = false;
|
||||
TheCamera.RestoreWithJumpCut();
|
||||
TheCamera.SetWideScreenOff();
|
||||
ms_running = false;
|
||||
ms_loaded = false;
|
||||
|
||||
FindPlayerPed()->bIsVisible = true;
|
||||
CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_CUTSCENE);
|
||||
CWorld::Players[CWorld::PlayerInFocus].MakePlayerSafe(false);
|
||||
|
||||
if (CGeneral::faststricmp(ms_cutsceneName, "end")) {
|
||||
DMAudio.StopCutSceneMusic();
|
||||
if (CGeneral::faststricmp(ms_cutsceneName, "bet"))
|
||||
DMAudio.ChangeMusicMode(MUSICMODE_GAME);
|
||||
for (int i = CPools::GetVehiclePool()->GetSize() - 1; i >= 0; i--) {
|
||||
CVehicle *pVehicle = CPools::GetVehiclePool()->GetSlot(i);
|
||||
if (pVehicle) {
|
||||
if (pVehicle->CanBeDeleted()) {
|
||||
CWorld::Remove(pVehicle);
|
||||
delete pVehicle;
|
||||
}
|
||||
}
|
||||
}
|
||||
CTimer::Stop();
|
||||
CGame::DrasticTidyUpMemory(TheCamera.GetScreenFadeStatus() == FADE_2);
|
||||
CTimer::Update();
|
||||
CWorld::bProcessCutsceneOnly = true;
|
||||
//bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver = true;*/
|
||||
CStreaming::RemoveCurrentZonesModels();
|
||||
while (CStreaming::RemoveLoadedVehicle());
|
||||
CRadar::RemoveRadarSections();
|
||||
CStreaming::SetModelIsDeletable(MI_MALE01);
|
||||
CStreaming::SetModelTxdIsDeletable(MI_MALE01);
|
||||
CStreaming::SetModelIsDeletable(MI_COLT45);
|
||||
CStreaming::SetModelTxdIsDeletable(MI_COLT45);
|
||||
CStreaming::SetModelIsDeletable(MI_NIGHTSTICK);
|
||||
CStreaming::SetModelTxdIsDeletable(MI_NIGHTSTICK);
|
||||
CStreaming::SetModelIsDeletable(MI_MISSILE);
|
||||
CStreaming::SetModelTxdIsDeletable(MI_MISSILE);
|
||||
|
||||
/*for (int i = CPools::GetDummyPool()->GetSize() - 1; i >= 0; i--) {
|
||||
CDummy* pDummy = CPools::GetDummyPool()->GetSlot(i);
|
||||
if (pDummy)
|
||||
pDummy->DeleteRwObject();
|
||||
}
|
||||
|
||||
for (int i = CPools::GetObjectPool()->GetSize() - 1; i >= 0; i--) {
|
||||
CObject* pObject = CPools::GetObjectPool()->GetSlot(i);
|
||||
if (pObject)
|
||||
pObject->DeleteRwObject();
|
||||
}
|
||||
|
||||
for (int i = CPools::GetBuildingPool()->GetSize() - 1; i >= 0; i--) {
|
||||
CBuilding* pBuilding = CPools::GetBuildingPool()->GetSlot(i);
|
||||
if (pBuilding && pBuilding->m_rwObject != nil && pBuilding->bIsBIGBuilding && pBuilding->bStreamBIGBuilding) {
|
||||
if (pBuilding->bIsBIGBuilding)
|
||||
CStreaming::RequestModel(pBuilding->GetModelIndex(), 0);
|
||||
if (!pBuilding->bImBeingRendered)
|
||||
pBuilding->DeleteRwObject();
|
||||
}
|
||||
}*/
|
||||
|
||||
CPlayerPed *pPlayerPed = FindPlayerPed();
|
||||
pPlayerPed->RemoveWeaponAnims(0, -1000.0f);
|
||||
NumberOfSavedWeapons = 0;
|
||||
|
||||
for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) {
|
||||
if (pPlayerPed->m_weapons[i].m_eWeaponType != WEAPONTYPE_UNARMED) {
|
||||
SavedWeaponIDs[NumberOfSavedWeapons] = pPlayerPed->m_weapons[i].m_eWeaponType;
|
||||
SavedWeaponAmmo[NumberOfSavedWeapons] = pPlayerPed->m_weapons[i].m_nAmmoTotal;
|
||||
NumberOfSavedWeapons++;
|
||||
}
|
||||
}
|
||||
|
||||
pPlayerPed->ClearWeapons();
|
||||
bModelsRemovedForCutscene = true;
|
||||
//CGame::DrasticTidyUpMemory(true);
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::LoadEverythingBecauseCutsceneDeletedAllOfIt()
|
||||
{
|
||||
bModelsRemovedForCutscene = false;
|
||||
CStreaming::LoadInitialPeds();
|
||||
CStreaming::LoadInitialWeapons();
|
||||
//CStreaming::LoadInitialVehicles();
|
||||
|
||||
CPlayerPed *pPlayerPed = FindPlayerPed();
|
||||
for (int i = 0; i < NumberOfSavedWeapons; i++) {
|
||||
int32 weaponModelId = CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModelId;
|
||||
uint8 flags = CStreaming::ms_aInfoForModel[weaponModelId].m_flags;
|
||||
CStreaming::RequestModel(weaponModelId, STREAMFLAGS_DONT_REMOVE);
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
if (CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModel2Id != -1) {
|
||||
CStreaming::RequestModel(CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModel2Id, 0);
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
}
|
||||
if (!(flags & STREAMFLAGS_DONT_REMOVE))
|
||||
CStreaming::SetModelIsDeletable(weaponModelId);
|
||||
pPlayerPed->GiveWeapon(SavedWeaponIDs[i], SavedWeaponAmmo[i], true);
|
||||
}
|
||||
NumberOfSavedWeapons = 0;
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::Update(void)
|
||||
{
|
||||
enum {
|
||||
CUTSCENE_LOADING_0 = 0,
|
||||
CUTSCENE_LOADING_AUDIO,
|
||||
CUTSCENE_LOADING_2,
|
||||
CUTSCENE_LOADING_3,
|
||||
CUTSCENE_LOADING_4
|
||||
};
|
||||
|
||||
switch (ms_cutsceneLoadStatus) {
|
||||
case CUTSCENE_LOADING_AUDIO:
|
||||
SetupCutsceneToStart();
|
||||
if (CGeneral::faststricmp(ms_cutsceneName, "end"))
|
||||
DMAudio.PlayPreloadedCutSceneMusic();
|
||||
ms_cutsceneLoadStatus++;
|
||||
break;
|
||||
case CUTSCENE_LOADING_2:
|
||||
case CUTSCENE_LOADING_3:
|
||||
ms_cutsceneLoadStatus++;
|
||||
break;
|
||||
case CUTSCENE_LOADING_4:
|
||||
ms_cutsceneLoadStatus = CUTSCENE_LOADING_0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ms_running) return;
|
||||
|
||||
ms_cutsceneTimer += CTimer::GetTimeStepNonClippedInSeconds();
|
||||
if (CGeneral::faststricmp(ms_cutsceneName, "end") && TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FLYBY && ms_cutsceneLoadStatus == CUTSCENE_LOADING_0) {
|
||||
if (CPad::GetPad(0)->GetCrossJustDown()
|
||||
|| (CGame::playingIntro && CPad::GetPad(0)->GetStartJustDown())
|
||||
|| CPad::GetPad(0)->GetLeftMouseJustDown()
|
||||
|| CPad::GetPad(0)->GetEnterJustDown()
|
||||
|| CPad::GetPad(0)->GetCharJustDown(' '))
|
||||
FinishCutscene();
|
||||
}
|
||||
if (ms_cutsceneLoadStatus != CUTSCENE_NOT_LOADED)
|
||||
Update_overlay();
|
||||
}
|
||||
|
||||
bool CCutsceneMgr::HasCutsceneFinished(void) { return TheCamera.GetPositionAlongSpline() == 1.0f; }
|
||||
void
|
||||
CCutsceneMgr::LoadAnimationUncompressed(char const* name)
|
||||
{
|
||||
strcpy(ms_aUncompressedCutsceneAnims[ms_numUncompressedCutsceneAnims], name);
|
||||
|
||||
// Because that's how CAnimManager knows the end of array
|
||||
++ms_numUncompressedCutsceneAnims;
|
||||
assert(ms_numUncompressedCutsceneAnims < ARRAY_SIZE(ms_aUncompressedCutsceneAnims));
|
||||
ms_aUncompressedCutsceneAnims[ms_numUncompressedCutsceneAnims][0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
CCutsceneMgr::IsCutsceneSkipButtonBeingPressed()
|
||||
{
|
||||
return (CPad::GetPad(0)->GetCrossJustDown()
|
||||
|| CPad::GetPad(0)->GetLeftMouseJustDown()
|
||||
|| CPad::GetPad(0)->GetEnterJustDown()
|
||||
|| CPad::GetPad(0)->GetCharJustDown(' '));
|
||||
}
|
||||
|
||||
void
|
||||
CCutsceneMgr::AppendToNextCutscene(const char *object, const char *anim)
|
||||
{
|
||||
strcpy(ms_cAppendObjectName[ms_numAppendObjectNames], object);
|
||||
strlwr(ms_cAppendObjectName[ms_numAppendObjectNames]);
|
||||
strcpy(ms_cAppendAnimName[ms_numAppendObjectNames], anim);
|
||||
strlwr(ms_cAppendAnimName[ms_numAppendObjectNames]);
|
||||
ms_numAppendObjectNames++;
|
||||
}
|
||||
@@ -1,14 +1,69 @@
|
||||
#pragma once
|
||||
#include "CutsceneObject.h"
|
||||
|
||||
#define CUTSCENENAMESIZE 8
|
||||
|
||||
class CDirectory;
|
||||
class CAnimBlendAssocGroup;
|
||||
class CCutsceneHead;
|
||||
|
||||
enum {
|
||||
CUTSCENE_NOT_LOADED = 0,
|
||||
CUTSCENE_LOADING,
|
||||
CUTSCENE_LOADED,
|
||||
};
|
||||
|
||||
enum {
|
||||
CUTSCENE_PLAYING_0 = 0,
|
||||
CUTSCENE_STARTED,
|
||||
CUTSCENE_PLAYING_2,
|
||||
CUTSCENE_PLAYING_3,
|
||||
CUTSCENE_PLAYING_4,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
NAMELENGTH = 32,
|
||||
NUM_CUTS_PARTICLE_EFFECTS = 8,
|
||||
NUM_CUTS_MAX_TEXTS = 64,
|
||||
NUM_CUTS_UNCOMPRESSED_ANIMS = 8,
|
||||
TEXT_KEY_SIZE = 8,
|
||||
CUTSCENENAMESIZE = 8
|
||||
};
|
||||
|
||||
struct sToHideItem
|
||||
{
|
||||
float x, y, z;
|
||||
char name[NAMELENGTH];
|
||||
};
|
||||
|
||||
// TODO: figure out from SA
|
||||
// this is unused in LCS anyway
|
||||
struct sParticleEffect
|
||||
{
|
||||
char name[NAMELENGTH];
|
||||
bool bPlayed; // ??
|
||||
int iTime;
|
||||
int unk1;
|
||||
int unk2;
|
||||
char name2[NAMELENGTH];
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float unkX;
|
||||
float unkY;
|
||||
float unkZ;
|
||||
bool unk10;
|
||||
bool unk11;
|
||||
};
|
||||
|
||||
struct sAttachInfo
|
||||
{
|
||||
int attachToId, objectId, boneId;
|
||||
};
|
||||
|
||||
class CCutsceneMgr
|
||||
{
|
||||
|
||||
static bool ms_running;
|
||||
static CCutsceneObject *ms_pCutsceneObjects[NUMCUTSCENEOBJECTS];
|
||||
|
||||
@@ -21,31 +76,104 @@ class CCutsceneMgr
|
||||
static CAnimBlendAssocGroup ms_cutsceneAssociations;
|
||||
static CVector ms_cutsceneOffset;
|
||||
static float ms_cutsceneTimer;
|
||||
static bool ms_wasCutsceneSkipped;
|
||||
static bool ms_cutsceneProcessing;
|
||||
static bool ms_useCutsceneShadows;
|
||||
static bool ms_hasFileInfo;
|
||||
static int ms_numLoadObjectNames;
|
||||
|
||||
static char ms_cAppendAnimName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
static char ms_cAppendObjectName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
static int ms_numAppendObjectNames;
|
||||
public:
|
||||
static CDirectory *ms_pCutsceneDir;
|
||||
static uint32 ms_cutsceneLoadStatus;
|
||||
|
||||
static bool mCutsceneSkipFading;
|
||||
static int mCutsceneSkipFadeTime;
|
||||
|
||||
static float m_fPrevCarDensity;
|
||||
static float m_fPrevPedDensity;
|
||||
|
||||
static bool m_PrevExtraColourOn;
|
||||
static uint32 m_PrevExtraColour;
|
||||
|
||||
static uint32 ms_iNumParticleEffects;
|
||||
static sParticleEffect ms_pParticleEffects[NUM_CUTS_PARTICLE_EFFECTS];
|
||||
|
||||
static sToHideItem ms_crToHideItems[NUMCUTSCENEOBJECTS];
|
||||
static uint32 ms_iNumHiddenEntities;
|
||||
static CEntity *ms_pHiddenEntities[NUMCUTSCENEOBJECTS];
|
||||
|
||||
static int ms_numAttachObjectToBones;
|
||||
static bool ms_bRepeatObject[NUMCUTSCENEOBJECTS];
|
||||
|
||||
static sAttachInfo ms_iAttachObjectToBone[NUMCUTSCENEOBJECTS];
|
||||
|
||||
static uint32 ms_numUncompressedCutsceneAnims;
|
||||
|
||||
static char ms_aUncompressedCutsceneAnims[NUM_CUTS_UNCOMPRESSED_ANIMS][NAMELENGTH];
|
||||
|
||||
static uint32 ms_iTextDuration[NUM_CUTS_MAX_TEXTS];
|
||||
static uint32 ms_iTextStartTime[NUM_CUTS_MAX_TEXTS];
|
||||
static char ms_cTextOutput[NUM_CUTS_MAX_TEXTS][TEXT_KEY_SIZE];
|
||||
|
||||
static uint32 ms_currTextOutput;
|
||||
static uint32 ms_numTextOutput;
|
||||
static uint32 ms_iModelIndex[NUMCUTSCENEOBJECTS];
|
||||
|
||||
static char ms_cLoadAnimName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
static char ms_cLoadObjectName[NUMCUTSCENEOBJECTS][NAMELENGTH];
|
||||
|
||||
static uint32 ms_cutscenePlayStatus;
|
||||
|
||||
static void StartCutscene();
|
||||
static void StartCutsceneProcessing() { ms_cutsceneProcessing = true; }
|
||||
static bool IsRunning(void) { return ms_running; }
|
||||
static bool HasLoaded(void) { return ms_loaded; }
|
||||
static bool IsCutsceneProcessing(void) { return ms_cutsceneProcessing; }
|
||||
static bool WasCutsceneSkipped(void) { return ms_wasCutsceneSkipped; }
|
||||
static bool UseLodMultiplier(void) { return ms_useLodMultiplier; }
|
||||
static CCutsceneObject* GetCutsceneObject(int id) { return ms_pCutsceneObjects[id]; }
|
||||
static int GetCutsceneTimeInMilleseconds(void) { return 1000.0f * ms_cutsceneTimer; }
|
||||
static uint32 GetCutsceneTimeInMilleseconds(void);
|
||||
static char *GetCutsceneName(void) { return ms_cutsceneName; }
|
||||
static void SetCutsceneOffset(const CVector& vec) { ms_cutsceneOffset = vec; }
|
||||
static bool HasCutsceneFinished(void);
|
||||
|
||||
static void Initialise(void);
|
||||
static void Initialise(void *dir = nil);
|
||||
static void Shutdown(void);
|
||||
static void LoadCutsceneData(const char *szCutsceneName);
|
||||
static void FinishCutscene(void);
|
||||
static void SetHeadAnim(const char *animName, CObject *pObject);
|
||||
static void SetupCutsceneToStart(void);
|
||||
static void SetCutsceneAnim(const char *animName, CObject *pObject);
|
||||
static CCutsceneHead *AddCutsceneHead(CObject *pObject, int modelId);
|
||||
static void SetCutsceneAnimToLoop(const char *animName);
|
||||
static CCutsceneHead *SetHeadAnim(const char*, CObject *pObject);
|
||||
static CCutsceneObject *CreateCutsceneObject(int modelId);
|
||||
static void DeleteCutsceneData(void);
|
||||
static void LoadAnimationUncompressed(char const*);
|
||||
static void Update(void);
|
||||
|
||||
static void AttachObjectToParent(CObject *pObject, CEntity *pAttachTo);
|
||||
static void AttachObjectToFrame(CObject *pObject, CEntity *pAttachTo, const char *frame);
|
||||
static void AttachObjectToBone(CObject *pObject, CObject *pAttachTo, int frame);
|
||||
static void RemoveEverythingBecauseCutsceneDoesntFitInMemory();
|
||||
static void LoadEverythingBecauseCutsceneDeletedAllOfIt();
|
||||
static void DisableCutsceneShadows() { ms_useCutsceneShadows = false; }
|
||||
|
||||
|
||||
static void LoadCutsceneData_overlay(const char* szCutsceneName);
|
||||
static bool LoadCutsceneData_postload(bool b = false);
|
||||
static void Update_overlay(void);
|
||||
static void DeleteCutsceneData_overlay(void);
|
||||
|
||||
static bool IsCutsceneSkipButtonBeingPressed();
|
||||
static void AppendToNextCutscene(const char *object, const char *anim);
|
||||
|
||||
static void LoadCutsceneData_preload();
|
||||
static void LoadCutsceneData_loading();
|
||||
static void HideRequestedObjects();
|
||||
|
||||
static bool PresubBodge();
|
||||
|
||||
static void Write(base::cRelocatableChunkWriter& writer);
|
||||
};
|
||||
|
||||
1030
src/animation/CutsceneMgr_overlay.cpp
Normal file
1030
src/animation/CutsceneMgr_overlay.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@@ -17,6 +17,8 @@ void FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackWithVelocityExtractionSkinned(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackWith3dVelocityExtractionSkinned(AnimBlendFrameData *frame, void *arg);
|
||||
|
||||
void FrameUpdateCallBackNonSkinnedCompressed(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackSkinnedCompressed(AnimBlendFrameData *frame, void *arg);
|
||||
|
||||
void
|
||||
FrameUpdateCallBackNonSkinned(AnimBlendFrameData *frame, void *arg)
|
||||
@@ -228,12 +230,11 @@ FrameUpdateCallBackWith3dVelocityExtractionNonSkinned(AnimBlendFrameData *frame,
|
||||
RwMatrixUpdate(mat);
|
||||
}
|
||||
|
||||
#ifdef PED_SKIN
|
||||
|
||||
void
|
||||
FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
CVector vec, pos(0.0f, 0.0f, 0.0f);
|
||||
float transBlendAmount = 0.0f;
|
||||
CQuaternion q, rot(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
float totalBlendAmount = 0.0f;
|
||||
RpHAnimStdInterpFrame *xform = frame->hanimFrame;
|
||||
@@ -257,13 +258,13 @@ FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg)
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
(*node)->Update(vec, q, 1.0f-totalBlendAmount);
|
||||
if((*node)->sequence->HasTranslation())
|
||||
if((*node)->sequence->HasTranslation()){
|
||||
pos += vec;
|
||||
#ifdef FIX_BUGS
|
||||
transBlendAmount += (*node)->association->blendAmount;
|
||||
}
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
#endif
|
||||
rot += q;
|
||||
}
|
||||
++*node;
|
||||
@@ -278,12 +279,12 @@ FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg)
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||
xform->t.x = pos.x;
|
||||
xform->t.y = pos.y;
|
||||
xform->t.z = pos.z;
|
||||
xform->t.x += frame->resetPos.x;
|
||||
xform->t.y += frame->resetPos.y;
|
||||
xform->t.z += frame->resetPos.z;
|
||||
xform->t.x = transBlendAmount*pos.x;
|
||||
xform->t.y = transBlendAmount*pos.y;
|
||||
xform->t.z = transBlendAmount*pos.z;
|
||||
xform->t.x += (1.0f-transBlendAmount)*frame->resetPos.x;
|
||||
xform->t.y += (1.0f-transBlendAmount)*frame->resetPos.y;
|
||||
xform->t.z += (1.0f-transBlendAmount)*frame->resetPos.z;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,11 +320,9 @@ FrameUpdateCallBackWithVelocityExtractionSkinned(AnimBlendFrameData *frame, void
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
bool nodelooped = (*node)->Update(vec, q, 1.0f-totalBlendAmount);
|
||||
#ifdef FIX_BUGS
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
#endif
|
||||
rot += q;
|
||||
if((*node)->sequence->HasTranslation()){
|
||||
pos += vec;
|
||||
@@ -442,4 +441,228 @@ FrameUpdateCallBackWith3dVelocityExtractionSkinned(AnimBlendFrameData *frame, vo
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FrameUpdateCallBackOffscreen(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION && gpAnimBlendClump->velocity2d)
|
||||
FrameUpdateCallBackWithVelocityExtractionSkinned(frame, arg);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
FrameUpdateCallBackNonSkinnedCompressed(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
CVector vec, pos(0.0f, 0.0f, 0.0f);
|
||||
CQuaternion q, rot(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
float totalBlendAmount = 0.0f;
|
||||
CVector trans(0.0f, 0.0f, 0.0f);
|
||||
CVector cur(0.0f, 0.0f, 0.0f);
|
||||
CVector end(0.0f, 0.0f, 0.0f);
|
||||
bool looped = false;
|
||||
RwMatrix *mat = RwFrameGetMatrix(frame->frame);
|
||||
CAnimBlendNode **node;
|
||||
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
||||
|
||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
||||
gpAnimBlendClump->velocity2d){
|
||||
if(updateData->foobar)
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->association->IsPartial())
|
||||
totalBlendAmount += (*node)->association->blendAmount;
|
||||
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->sequence->HasTranslation()){
|
||||
if((*node)->association->HasTranslation()){
|
||||
(*node)->GetCurrentTranslationCompressed(vec, 1.0f-totalBlendAmount);
|
||||
cur += vec;
|
||||
}
|
||||
}
|
||||
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
bool nodelooped = (*node)->UpdateCompressed(vec, q, 1.0f-totalBlendAmount);
|
||||
#ifdef FIX_BUGS
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
#endif
|
||||
rot += q;
|
||||
if((*node)->sequence->HasTranslation()){
|
||||
pos += vec;
|
||||
if((*node)->association->HasTranslation()){
|
||||
trans += vec;
|
||||
looped |= nodelooped;
|
||||
if(nodelooped){
|
||||
(*node)->GetEndTranslationCompressed(vec, 1.0f-totalBlendAmount);
|
||||
end += vec;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
++*node;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_ROTATION) == 0){
|
||||
RwMatrixSetIdentity(mat);
|
||||
rot.Normalise();
|
||||
rot.Get(mat);
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||
*gpAnimBlendClump->velocity3d = trans - cur;
|
||||
if(looped)
|
||||
*gpAnimBlendClump->velocity3d += end;
|
||||
mat->pos.x = (pos - trans).x + frame->resetPos.x;
|
||||
mat->pos.y = (pos - trans).y + frame->resetPos.y;
|
||||
mat->pos.z = (pos - trans).z + frame->resetPos.z;
|
||||
}
|
||||
RwMatrixUpdate(mat);
|
||||
}else{
|
||||
if(updateData->foobar)
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->association->IsPartial())
|
||||
totalBlendAmount += (*node)->association->blendAmount;
|
||||
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
(*node)->UpdateCompressed(vec, q, 1.0f-totalBlendAmount);
|
||||
if((*node)->sequence->HasTranslation())
|
||||
pos += vec;
|
||||
#ifdef FIX_BUGS
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
#endif
|
||||
rot += q;
|
||||
}
|
||||
++*node;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_ROTATION) == 0){
|
||||
RwMatrixSetIdentity(mat);
|
||||
rot.Normalise();
|
||||
rot.Get(mat);
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||
mat->pos.x = pos.x;
|
||||
mat->pos.y = pos.y;
|
||||
mat->pos.z = pos.z;
|
||||
mat->pos.x += frame->resetPos.x;
|
||||
mat->pos.y += frame->resetPos.y;
|
||||
mat->pos.z += frame->resetPos.z;
|
||||
}
|
||||
RwMatrixUpdate(mat);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FrameUpdateCallBackSkinnedCompressed(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
CVector vec, pos(0.0f, 0.0f, 0.0f);
|
||||
CQuaternion q, rot(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
float totalBlendAmount = 0.0f;
|
||||
CVector trans(0.0f, 0.0f, 0.0f);
|
||||
CVector cur(0.0f, 0.0f, 0.0f);
|
||||
CVector end(0.0f, 0.0f, 0.0f);
|
||||
bool looped = false;
|
||||
RpHAnimStdInterpFrame *xform = frame->hanimFrame;
|
||||
CAnimBlendNode **node;
|
||||
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
||||
|
||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
||||
gpAnimBlendClump->velocity2d){
|
||||
if(updateData->foobar)
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->association->IsPartial())
|
||||
totalBlendAmount += (*node)->association->blendAmount;
|
||||
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->sequence->HasTranslation()){
|
||||
if((*node)->association->HasTranslation()){
|
||||
(*node)->GetCurrentTranslationCompressed(vec, 1.0f-totalBlendAmount);
|
||||
cur += vec;
|
||||
}
|
||||
}
|
||||
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
bool nodelooped = (*node)->UpdateCompressed(vec, q, 1.0f-totalBlendAmount);
|
||||
#ifdef FIX_BUGS
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
#endif
|
||||
rot += q;
|
||||
if((*node)->sequence->HasTranslation()){
|
||||
pos += vec;
|
||||
if((*node)->association->HasTranslation()){
|
||||
trans += vec;
|
||||
looped |= nodelooped;
|
||||
if(nodelooped){
|
||||
(*node)->GetEndTranslationCompressed(vec, 1.0f-totalBlendAmount);
|
||||
end += vec;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
++*node;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_ROTATION) == 0){
|
||||
rot.Normalise();
|
||||
xform->q.imag.x = rot.x;
|
||||
xform->q.imag.y = rot.y;
|
||||
xform->q.imag.z = rot.z;
|
||||
xform->q.real = rot.w;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||
*gpAnimBlendClump->velocity3d = trans - cur;
|
||||
if(looped)
|
||||
*gpAnimBlendClump->velocity3d += end;
|
||||
xform->t.x = (pos - trans).x + frame->resetPos.x;
|
||||
xform->t.y = (pos - trans).y + frame->resetPos.y;
|
||||
xform->t.z = (pos - trans).z + frame->resetPos.z;
|
||||
}
|
||||
}else{
|
||||
float transBlendAmount = 0.0f;
|
||||
|
||||
if(updateData->foobar)
|
||||
for(node = updateData->nodes; *node; node++)
|
||||
if((*node)->sequence && (*node)->association->IsPartial())
|
||||
totalBlendAmount += (*node)->association->blendAmount;
|
||||
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
if((*node)->sequence){
|
||||
(*node)->UpdateCompressed(vec, q, 1.0f-totalBlendAmount);
|
||||
if((*node)->sequence->HasTranslation()){
|
||||
pos += vec;
|
||||
transBlendAmount += (*node)->association->blendAmount;
|
||||
}
|
||||
if(DotProduct(rot, q) < 0.0f)
|
||||
rot -= q;
|
||||
else
|
||||
rot += q;
|
||||
}
|
||||
++*node;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_ROTATION) == 0){
|
||||
rot.Normalise();
|
||||
xform->q.imag.x = rot.x;
|
||||
xform->q.imag.y = rot.y;
|
||||
xform->q.imag.z = rot.z;
|
||||
xform->q.real = rot.w;
|
||||
}
|
||||
|
||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||
xform->t.x = transBlendAmount*pos.x;
|
||||
xform->t.y = transBlendAmount*pos.y;
|
||||
xform->t.z = transBlendAmount*pos.z;
|
||||
xform->t.x += (1.0f-transBlendAmount)*frame->resetPos.x;
|
||||
xform->t.y += (1.0f-transBlendAmount)*frame->resetPos.y;
|
||||
xform->t.z += (1.0f-transBlendAmount)*frame->resetPos.z;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,9 +10,7 @@
|
||||
#include "AnimBlendAssociation.h"
|
||||
#include "AnimManager.h"
|
||||
#include "RpAnimBlend.h"
|
||||
#ifdef PED_SKIN
|
||||
#include "PedModelInfo.h"
|
||||
#endif
|
||||
|
||||
RwInt32 ClumpOffset;
|
||||
|
||||
@@ -142,7 +140,6 @@ FrameInitCBskin(AnimBlendFrameData *frameData, void*)
|
||||
frameData->flag = 0;
|
||||
}
|
||||
|
||||
#ifdef PED_SKIN
|
||||
void
|
||||
RpAnimBlendClumpInitSkinned(RpClump *clump)
|
||||
{
|
||||
@@ -156,7 +153,7 @@ RpAnimBlendClumpInitSkinned(RpClump *clump)
|
||||
|
||||
RpAnimBlendAllocateData(clump);
|
||||
clumpData = *RPANIMBLENDCLUMPDATA(clump);
|
||||
atomic = IsClumpSkinned(clump);
|
||||
atomic = GetFirstAtomic(clump);
|
||||
assert(atomic);
|
||||
skin = RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic));
|
||||
assert(skin);
|
||||
@@ -171,12 +168,15 @@ RpAnimBlendClumpInitSkinned(RpClump *clump)
|
||||
for(i = 0; i < numBones; i++){
|
||||
frames[i].nodeID = HIERNODEID(hier, i);
|
||||
frames[i].resetPos = boneTab[i];
|
||||
#ifdef LIBRW
|
||||
frames[i].hanimFrame = (RpHAnimStdInterpFrame*)rpHANIMHIERARCHYGETINTERPFRAME(hier, i);
|
||||
#else
|
||||
frames[i].hanimFrame = (RpHAnimStdInterpFrame*)rtANIMGETINTERPFRAME(hier->currentAnim, i);
|
||||
#endif
|
||||
}
|
||||
clumpData->ForAllFrames(FrameInitCBskin, nil);
|
||||
clumpData->frames[0].flag |= AnimBlendFrameData::VELOCITY_EXTRACTION;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
RpAnimBlendClumpInitNotSkinned(RpClump *clump)
|
||||
@@ -200,11 +200,9 @@ RpAnimBlendClumpInitNotSkinned(RpClump *clump)
|
||||
void
|
||||
RpAnimBlendClumpInit(RpClump *clump)
|
||||
{
|
||||
#ifdef PED_SKIN
|
||||
if(IsClumpSkinned(clump))
|
||||
RpAnimBlendClumpInitSkinned(clump);
|
||||
else
|
||||
#endif
|
||||
RpAnimBlendClumpInitNotSkinned(clump);
|
||||
}
|
||||
|
||||
@@ -364,7 +362,6 @@ FillFrameArrayCBnonskin(AnimBlendFrameData *frame, void *arg)
|
||||
frames[CVisibilityPlugins::GetFrameHierarchyId(frame->frame)] = frame;
|
||||
}
|
||||
|
||||
#ifdef PED_SKIN
|
||||
void
|
||||
RpAnimBlendClumpFillFrameArraySkin(RpClump *clump, AnimBlendFrameData **frames)
|
||||
{
|
||||
@@ -374,22 +371,18 @@ RpAnimBlendClumpFillFrameArraySkin(RpClump *clump, AnimBlendFrameData **frames)
|
||||
for(i = PED_MID; i < PED_NODE_MAX; i++)
|
||||
frames[i] = &clumpData->frames[RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(i))];
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
RpAnimBlendClumpFillFrameArray(RpClump *clump, AnimBlendFrameData **frames)
|
||||
{
|
||||
#ifdef PED_SKIN
|
||||
if(IsClumpSkinned(clump))
|
||||
RpAnimBlendClumpFillFrameArraySkin(clump, frames);
|
||||
else
|
||||
#endif
|
||||
(*RPANIMBLENDCLUMPDATA(clump))->ForAllFrames(FillFrameArrayCBnonskin, frames);
|
||||
}
|
||||
|
||||
AnimBlendFrameData *pFrameDataFound;
|
||||
|
||||
// FrameFindCallBack on PS2
|
||||
void
|
||||
FrameFindByNameCBnonskin(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
@@ -398,7 +391,6 @@ FrameFindByNameCBnonskin(AnimBlendFrameData *frame, void *arg)
|
||||
pFrameDataFound = frame;
|
||||
}
|
||||
|
||||
#ifdef PED_SKIN
|
||||
void
|
||||
FrameFindByNameCBskin(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
@@ -406,25 +398,58 @@ FrameFindByNameCBskin(AnimBlendFrameData *frame, void *arg)
|
||||
if(name && CGeneral::faststricmp(name, (char*)arg) == 0)
|
||||
pFrameDataFound = frame;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
FrameFindByBoneCB(AnimBlendFrameData *frame, void *arg)
|
||||
{
|
||||
if(frame->nodeID == (int32)(uintptr)arg)
|
||||
pFrameDataFound = frame;
|
||||
}
|
||||
|
||||
AnimBlendFrameData*
|
||||
RpAnimBlendClumpFindFrame(RpClump *clump, const char *name)
|
||||
{
|
||||
pFrameDataFound = nil;
|
||||
#ifdef PED_SKIN
|
||||
if(IsClumpSkinned(clump))
|
||||
(*RPANIMBLENDCLUMPDATA(clump))->ForAllFrames(FrameFindByNameCBskin, (void*)name);
|
||||
else
|
||||
#endif
|
||||
(*RPANIMBLENDCLUMPDATA(clump))->ForAllFrames(FrameFindByNameCBnonskin, (void*)name);
|
||||
return pFrameDataFound;
|
||||
}
|
||||
|
||||
AnimBlendFrameData*
|
||||
RpAnimBlendClumpFindBone(RpClump *clump, uint32 boneTag)
|
||||
{
|
||||
pFrameDataFound = nil;
|
||||
(*RPANIMBLENDCLUMPDATA(clump))->ForAllFrames(FrameFindByBoneCB, (void*)boneTag);
|
||||
return pFrameDataFound;
|
||||
}
|
||||
|
||||
void
|
||||
RpAnimBlendClumpUpdateAnimations(RpClump *clump, float timeDelta)
|
||||
RpAnimBlendNodeUpdateKeyframes(AnimBlendFrameData *frames, AnimBlendFrameUpdateData *updateData, int32 numNodes)
|
||||
{
|
||||
CAnimBlendNode **node;
|
||||
int i;
|
||||
|
||||
for(node = updateData->nodes; *node; node++){
|
||||
CAnimBlendAssociation *a = (*node)->association;
|
||||
for(i = 0; i < numNodes; i++)
|
||||
if((frames[i].flag & AnimBlendFrameData::VELOCITY_EXTRACTION) == 0 ||
|
||||
gpAnimBlendClump->velocity2d == nil){
|
||||
if((*node)[i].sequence)
|
||||
(*node)[i].FindKeyFrame(a->currentTime - a->timeStep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO:
|
||||
// CAnimBlendClumpData::LoadFramesIntoSPR
|
||||
// CAnimBlendClumpData::ForAllFramesInSPR
|
||||
void
|
||||
RpAnimBlendClumpUpdateAnimations(RpClump *clump, float timeDelta, bool doRender)
|
||||
{
|
||||
int i;
|
||||
CAnimBlendAssociation *assoc;
|
||||
AnimBlendFrameUpdateData updateData;
|
||||
float totalLength = 0.0f;
|
||||
float totalBlend = 0.0f;
|
||||
@@ -440,30 +465,53 @@ RpAnimBlendClumpUpdateAnimations(RpClump *clump, float timeDelta)
|
||||
updateData.foobar = 0;
|
||||
for(link = clumpData->link.next; link; link = next){
|
||||
next = link->next;
|
||||
CAnimBlendAssociation *assoc = CAnimBlendAssociation::FromLink(link);
|
||||
assoc = CAnimBlendAssociation::FromLink(link);
|
||||
if(assoc->UpdateBlend(timeDelta)){
|
||||
CAnimManager::UncompressAnimation(assoc->hierarchy);
|
||||
updateData.nodes[i++] = assoc->GetNode(0);
|
||||
if(assoc->flags & ASSOC_MOVEMENT){
|
||||
totalLength += assoc->hierarchy->totalLength/assoc->speed * assoc->blendAmount;
|
||||
totalBlend += assoc->blendAmount;
|
||||
if(assoc->hierarchy->sequences){
|
||||
CAnimManager::UncompressAnimation(assoc->hierarchy);
|
||||
if(i < 11)
|
||||
updateData.nodes[i++] = assoc->GetNode(0);
|
||||
if(assoc->flags & ASSOC_MOVEMENT){
|
||||
totalLength += assoc->hierarchy->totalLength/assoc->speed * assoc->blendAmount;
|
||||
totalBlend += assoc->blendAmount;
|
||||
}else
|
||||
updateData.foobar = 1;
|
||||
}else
|
||||
updateData.foobar = 1;
|
||||
debug("anim %s is not loaded\n", assoc->hierarchy->name);
|
||||
}
|
||||
}
|
||||
updateData.nodes[i] = nil;
|
||||
|
||||
#ifdef PED_SKIN
|
||||
if(IsClumpSkinned(clump))
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackSkinned, &updateData);
|
||||
else
|
||||
#endif
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackNonSkinned, &updateData);
|
||||
|
||||
for(link = clumpData->link.next; link; link = link->next){
|
||||
CAnimBlendAssociation *assoc = CAnimBlendAssociation::FromLink(link);
|
||||
float relSpeed = totalLength == 0.0f ? 1.0f : totalBlend/totalLength;
|
||||
assoc->UpdateTime(timeDelta, relSpeed);
|
||||
assoc = CAnimBlendAssociation::FromLink(link);
|
||||
assoc->UpdateTimeStep(timeDelta, totalLength == 0.0f ? 1.0f : totalBlend/totalLength);
|
||||
}
|
||||
|
||||
updateData.nodes[i] = nil;
|
||||
|
||||
#ifdef ANIM_COMPRESSION
|
||||
if(clumpData->frames[0].flag & AnimBlendFrameData::COMPRESSED){
|
||||
if(IsClumpSkinned(clump))
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackSkinnedCompressed, &updateData);
|
||||
else
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackNonSkinnedCompressed, &updateData);
|
||||
}else
|
||||
#endif
|
||||
if(doRender){
|
||||
if(clumpData->frames[0].flag & AnimBlendFrameData::UPDATE_KEYFRAMES)
|
||||
RpAnimBlendNodeUpdateKeyframes(clumpData->frames, &updateData, clumpData->numFrames);
|
||||
if(IsClumpSkinned(clump))
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackSkinned, &updateData);
|
||||
else
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackNonSkinned, &updateData);
|
||||
clumpData->frames[0].flag &= ~AnimBlendFrameData::UPDATE_KEYFRAMES;
|
||||
}else{
|
||||
clumpData->ForAllFrames(FrameUpdateCallBackOffscreen, &updateData);
|
||||
clumpData->frames[0].flag |= AnimBlendFrameData::UPDATE_KEYFRAMES;
|
||||
}
|
||||
|
||||
for(link = clumpData->link.next; link; link = link->next){
|
||||
assoc = CAnimBlendAssociation::FromLink(link);
|
||||
assoc->UpdateTime(timeDelta, totalLength == 0.0f ? 1.0f : totalBlend/totalLength);
|
||||
}
|
||||
RwFrameUpdateObjects(RpClumpGetFrame(clump));
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ void RpAnimBlendClumpInit(RpClump *clump);
|
||||
bool RpAnimBlendClumpIsInitialized(RpClump *clump);
|
||||
void RpAnimBlendClumpFillFrameArray(RpClump* clump, AnimBlendFrameData** frames);
|
||||
AnimBlendFrameData *RpAnimBlendClumpFindFrame(RpClump *clump, const char *name);
|
||||
AnimBlendFrameData *RpAnimBlendClumpFindBone(RpClump *clump, uint32 boneTag);
|
||||
void FillFrameArrayCallBack(AnimBlendFrameData *frame, void *arg);
|
||||
CAnimBlendAssociation *RpAnimBlendClumpGetAssociation(RpClump *clump, uint32 id);
|
||||
CAnimBlendAssociation *RpAnimBlendClumpGetMainAssociation(RpClump *clump, CAnimBlendAssociation **assocRet, float *blendRet);
|
||||
@@ -34,9 +35,14 @@ CAnimBlendAssociation *RpAnimBlendClumpGetMainAssociation_N(RpClump *clump, int
|
||||
CAnimBlendAssociation *RpAnimBlendClumpGetMainPartialAssociation_N(RpClump *clump, int n);
|
||||
CAnimBlendAssociation *RpAnimBlendClumpGetFirstAssociation(RpClump *clump, uint32 mask);
|
||||
CAnimBlendAssociation *RpAnimBlendClumpGetFirstAssociation(RpClump *clump);
|
||||
void RpAnimBlendClumpUpdateAnimations(RpClump* clump, float timeDelta);
|
||||
void RpAnimBlendNodeUpdateKeyframes(AnimBlendFrameData *frames, AnimBlendFrameUpdateData *updateData, int32 numNodes);
|
||||
void RpAnimBlendClumpUpdateAnimations(RpClump* clump, float timeDelta, bool doRender = true);
|
||||
|
||||
|
||||
extern CAnimBlendClumpData *gpAnimBlendClump;
|
||||
void FrameUpdateCallBackNonSkinned(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackOffscreen(AnimBlendFrameData *frame, void *arg);
|
||||
|
||||
void FrameUpdateCallBackNonSkinnedCompressed(AnimBlendFrameData *frame, void *arg);
|
||||
void FrameUpdateCallBackSkinnedCompressed(AnimBlendFrameData *frame, void *arg);
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
#include "SurfaceTable.h"
|
||||
#include "sampman.h"
|
||||
|
||||
const int CollisionSoundIntensity = 60;
|
||||
|
||||
void
|
||||
cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower,
|
||||
float velocity)
|
||||
@@ -18,7 +16,7 @@ cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface
|
||||
CVector v1;
|
||||
CVector v2;
|
||||
|
||||
if(!m_bIsInitialised || m_nCollisionEntity < 0 || m_nUserPause ||
|
||||
if(!m_bIsInitialised || m_nCollisionEntity < 0 || m_bIsPaused ||
|
||||
(velocity < 0.0016f && collisionPower < 0.01f))
|
||||
return;
|
||||
|
||||
@@ -32,7 +30,7 @@ cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface
|
||||
}
|
||||
CVector pos = (v1 + v2) * 0.5f;
|
||||
distSquared = GetDistanceSquared(pos);
|
||||
if(distSquared < SQR(CollisionSoundIntensity)) {
|
||||
if(distSquared < SQR(COLLISION_MAX_DIST)) {
|
||||
m_sCollisionManager.m_sQueue.m_pEntity1 = entity1;
|
||||
m_sCollisionManager.m_sQueue.m_pEntity2 = entity2;
|
||||
m_sCollisionManager.m_sQueue.m_bSurface1 = surface1;
|
||||
@@ -48,8 +46,8 @@ cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface
|
||||
void
|
||||
cAudioCollisionManager::AddCollisionToRequestedQueue()
|
||||
{
|
||||
int32 collisionsIndex;
|
||||
int32 i;
|
||||
uint32 collisionsIndex;
|
||||
uint32 i;
|
||||
|
||||
|
||||
if (m_bCollisionsInQueue < NUMAUDIOCOLLISIONS)
|
||||
@@ -139,7 +137,7 @@ cAudioManager::ServiceCollisions()
|
||||
m_sCollisionManager.m_bCollisionsInQueue = 0;
|
||||
}
|
||||
|
||||
static const int32 gOneShotCol[] = {SFX_COL_TARMAC_1,
|
||||
static const uint32 gOneShotCol[] = {SFX_COL_TARMAC_1,
|
||||
SFX_COL_TARMAC_1,
|
||||
SFX_COL_GRASS_1,
|
||||
SFX_COL_GRAVEL_1,
|
||||
@@ -171,7 +169,9 @@ static const int32 gOneShotCol[] = {SFX_COL_TARMAC_1,
|
||||
SFX_TYRE_BUMP,
|
||||
SFX_COL_CARDBOARD_1,
|
||||
SFX_COL_TARMAC_1,
|
||||
SFX_COL_GATE};
|
||||
SFX_COL_GATE,
|
||||
SFX_COL_SAND_1,
|
||||
SFX_COL_TARMAC_1 };
|
||||
|
||||
void
|
||||
cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
@@ -179,7 +179,7 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
uint16 s1;
|
||||
uint16 s2;
|
||||
|
||||
int32 emittingVol;
|
||||
uint32 emittingVol;
|
||||
float ratio;
|
||||
|
||||
static uint16 counter = 28;
|
||||
@@ -198,11 +198,11 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
s1 = SURFACE_CAR_PANEL;
|
||||
ratio = Min(1.f, 2.f * ratio);
|
||||
}
|
||||
emittingVol = 40.f * ratio;
|
||||
emittingVol = 40 * ratio;
|
||||
if(emittingVol) {
|
||||
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
||||
m_sQueueSample.m_nVolume =
|
||||
ComputeVolume(emittingVol, CollisionSoundIntensity, m_sQueueSample.m_fDistance);
|
||||
ComputeVolume(emittingVol, COLLISION_MAX_DIST, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_nVolume > 0) {
|
||||
m_sQueueSample.m_nSampleIndex = gOneShotCol[s1];
|
||||
switch(m_sQueueSample.m_nSampleIndex) {
|
||||
@@ -219,7 +219,7 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
m_sQueueSample.m_nSampleIndex += m_anRandomTable[3] % 4;
|
||||
break;
|
||||
case SFX_COL_PED_1:
|
||||
m_sQueueSample.m_nSampleIndex += m_anRandomTable[4] % 5;
|
||||
m_sQueueSample.m_nSampleIndex += m_anRandomTable[4] % 2;
|
||||
break;
|
||||
case SFX_COL_WOOD_CRATES_1:
|
||||
m_sQueueSample.m_nSampleIndex += m_anRandomTable[4] % 4;
|
||||
@@ -266,9 +266,9 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
SET_EMITTING_VOLUME(emittingVol);
|
||||
RESET_LOOP_OFFSETS
|
||||
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
||||
m_sQueueSample.m_MaxDistance = CollisionSoundIntensity;
|
||||
m_sQueueSample.m_MaxDistance = COLLISION_MAX_DIST;
|
||||
m_sQueueSample.m_bStatic = TRUE;
|
||||
m_sQueueSample.m_bReverb = TRUE;
|
||||
SET_SOUND_REVERB(TRUE);
|
||||
SET_SOUND_REFLECTION(FALSE);
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
@@ -279,12 +279,12 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||
void
|
||||
cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter)
|
||||
{
|
||||
bool8 distCalculated = FALSE;
|
||||
if(col.m_fIntensity2 > 0.0016f) {
|
||||
uint8 emittingVol = SetLoopingCollisionRequestedSfxFreqAndGetVol(col);
|
||||
if(emittingVol) {
|
||||
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
||||
m_sQueueSample.m_nVolume =
|
||||
ComputeVolume(emittingVol, CollisionSoundIntensity, m_sQueueSample.m_fDistance);
|
||||
CalculateDistance(distCalculated, m_sQueueSample.m_fDistance);
|
||||
m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, COLLISION_MAX_DIST, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_nVolume > 0) {
|
||||
m_sQueueSample.m_nCounter = counter;
|
||||
m_sQueueSample.m_vecPos = col.m_vecPosition;
|
||||
@@ -293,12 +293,12 @@ cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 coun
|
||||
m_sQueueSample.m_nPriority = 7;
|
||||
m_sQueueSample.m_nLoopCount = 0;
|
||||
SET_EMITTING_VOLUME(emittingVol);
|
||||
SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex);
|
||||
SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex)
|
||||
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
||||
m_sQueueSample.m_MaxDistance = CollisionSoundIntensity;
|
||||
m_sQueueSample.m_MaxDistance = COLLISION_MAX_DIST;
|
||||
m_sQueueSample.m_bStatic = FALSE;
|
||||
m_sQueueSample.m_nFramesToPlay = 5;
|
||||
m_sQueueSample.m_bReverb = TRUE;
|
||||
SET_SOUND_REVERB(TRUE);
|
||||
SET_SOUND_REFLECTION(FALSE);
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
@@ -325,8 +325,8 @@ cAudioManager::SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollisio
|
||||
m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP;
|
||||
m_sQueueSample.m_nFrequency = 6050.f * ratio + 16000;
|
||||
vol = 30.f * ratio;
|
||||
} else if(surface1 == SURFACE_GRAVEL || surface2 == SURFACE_GRAVEL || surface1 == SURFACE_MUD_DRY ||
|
||||
surface2 == SURFACE_MUD_DRY || surface1 == SURFACE_SAND || surface2 == SURFACE_SAND) {
|
||||
} else if(surface1 == SURFACE_GRAVEL || surface2 == SURFACE_GRAVEL || surface1 == SURFACE_MUD_DRY || surface2 == SURFACE_MUD_DRY ||
|
||||
surface1 == SURFACE_SAND || surface2 == SURFACE_SAND || surface1 == SURFACE_SAND_BEACH || surface2 == SURFACE_SAND_BEACH) {
|
||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||
m_sQueueSample.m_nSampleIndex = SFX_GRAVEL_SKID;
|
||||
m_sQueueSample.m_nFrequency = 6000.f * ratio + 10000;
|
||||
@@ -351,11 +351,12 @@ cAudioManager::GetCollisionOneShotRatio(uint32 a, float b)
|
||||
case SURFACE_TARMAC:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
case SURFACE_TRANSPARENT_STONE: return GetCollisionRatio(b, 10.f, 60.f, 50.f);
|
||||
case SURFACE_TRANSPARENT_STONE:
|
||||
case SURFACE_CONCRETE_BEACH: return GetCollisionRatio(b, 10.f, 60.f, 50.f);
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_CARDBOARDBOX:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_MUD_DRY: return GetCollisionRatio(b, 0.f, 2.f, 2.f);
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_CARDBOARDBOX: return GetCollisionRatio(b, 0.f, 2.f, 2.f);
|
||||
case SURFACE_CAR: return GetCollisionRatio(b, 6.f, 50.f, 44.f);
|
||||
case SURFACE_GLASS:
|
||||
case SURFACE_METAL_CHAIN_FENCE: return GetCollisionRatio(b, 0.1f, 10.f, 9.9f);
|
||||
@@ -364,7 +365,7 @@ cAudioManager::GetCollisionOneShotRatio(uint32 a, float b)
|
||||
case SURFACE_GARAGE_DOOR: return GetCollisionRatio(b, 20.f, 100.f, 80.f);
|
||||
case SURFACE_CAR_PANEL: return GetCollisionRatio(b, 0.f, 4.f, 4.f);
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
case SURFACE_METAL_GATE:
|
||||
case SURFACE_METAL_GATE:
|
||||
case SURFACE_LAMP_POST: return GetCollisionRatio(b, 1.f, 10.f, 9.f);
|
||||
case SURFACE_FIRE_HYDRANT: return GetCollisionRatio(b, 1.f, 15.f, 14.f);
|
||||
case SURFACE_GIRDER: return GetCollisionRatio(b, 8.f, 50.f, 42.f);
|
||||
@@ -372,7 +373,8 @@ cAudioManager::GetCollisionOneShotRatio(uint32 a, float b)
|
||||
case SURFACE_SAND:
|
||||
case SURFACE_WATER:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_WHEELBASE: return GetCollisionRatio(b, 0.f, 10.f, 10.f);
|
||||
case SURFACE_WHEELBASE:
|
||||
case SURFACE_SAND_BEACH: return GetCollisionRatio(b, 0.f, 10.f, 10.f);
|
||||
case SURFACE_WOOD_CRATES: return GetCollisionRatio(b, 1.f, 4.f, 3.f);
|
||||
case SURFACE_WOOD_BENCH: return GetCollisionRatio(b, 0.1f, 5.f, 4.9f);
|
||||
case SURFACE_WOOD_SOLID: return GetCollisionRatio(b, 0.1f, 40.f, 39.9f);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#define NUMAUDIOCOLLISIONS 10
|
||||
#define NUMAUDIOCOLLISIONS 14
|
||||
|
||||
class CEntity;
|
||||
|
||||
@@ -54,4 +54,4 @@ public:
|
||||
void AddCollisionToRequestedQueue();
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cAudioCollisionManager, 852);
|
||||
VALIDATE_SIZE(cAudioCollisionManager, 0x354);
|
||||
|
||||
16322
src/audio/AudioLogic.cpp
16322
src/audio/AudioLogic.cpp
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,17 +3,15 @@
|
||||
#include "audio_enums.h"
|
||||
#include "AudioCollision.h"
|
||||
#include "PolRadio.h"
|
||||
#include "VehicleModelInfo.h"
|
||||
#include "Vehicle.h"
|
||||
|
||||
class tSound
|
||||
{
|
||||
public:
|
||||
int32 m_nEntityIndex; // audio entity index
|
||||
#if GTA_VERSION >= GTA3_PC_10
|
||||
uint32 m_nCounter; // I'm not sure what this is but it looks like a virtual counter to determine the same sound in queue
|
||||
// Values higher than 255 are used by reflections
|
||||
#else
|
||||
uint8 m_nCounter;
|
||||
#endif
|
||||
uint32 m_nSampleIndex; // An index of sample from AudioSamples.h
|
||||
uint8 m_nBankIndex; // A sound bank index. IDK what's the point of it here since samples are hardcoded anyway
|
||||
bool8 m_bIs2D; // If TRUE then sound is played in 2D space (such as frontend or police radio)
|
||||
@@ -31,14 +29,12 @@ public:
|
||||
uint8 m_nEmittingVolume; // The volume in 3D space, provided to 3D audio engine
|
||||
#endif
|
||||
float m_fSpeedMultiplier; // Used for doppler effect. 0.0f - unaffected by doppler
|
||||
#if GTA_VERSION >= GTA3_PC_10
|
||||
float m_MaxDistance; // The maximum distance at which sound could be heard. Minimum distance = MaxDistance / 5 or MaxDistance / 4 in case of emitting volume (useless if m_bIs2D == TRUE)
|
||||
#else
|
||||
uint32 m_MaxDistance;
|
||||
#endif
|
||||
bool8 m_bStatic; // If TRUE then sound parameters cannot be changed during playback (frequency, position, etc.)
|
||||
CVector m_vecPos; // Position of sound in 3D space. Unused if m_bIs2D == TRUE
|
||||
#if !defined(GTA_PS2) || defined(AUDIO_REVERB) // GTA_PS2 because this field exists on mobile but not on PS2
|
||||
bool8 m_bReverb; // Toggles reverb effect
|
||||
#endif
|
||||
#ifdef AUDIO_REFLECTIONS
|
||||
uint8 m_nReflectionDelay; // Number of frames before reflection could be played. This is calculated internally by AudioManager and shouldn't be set by queued sample
|
||||
bool8 m_bReflections; // Add sound reflections
|
||||
@@ -47,6 +43,7 @@ public:
|
||||
// 0 = L 100% R 0%
|
||||
// 63 = L 100% R 100%
|
||||
// 127 = L 0% R 100%
|
||||
uint8 m_nFrontRearPan; // Used on PS2 for surround panning
|
||||
#ifndef FIX_BUGS
|
||||
uint32 m_nFramesToPlay; // Number of frames the sound would be played (if it stops being queued).
|
||||
// This one is being set by queued sample for looping sounds, otherwise calculated inside AudioManager
|
||||
@@ -57,19 +54,15 @@ public:
|
||||
// all fields below are internal to AudioManager calculations and aren't set by queued sample
|
||||
bool8 m_bIsBeingPlayed; // Set to TRUE when the sound was added or changed on current frame to avoid it being overwritten
|
||||
bool8 m_bIsPlayingFinished; // Not sure about the name. Set to TRUE when sampman channel becomes free
|
||||
#if GTA_VERSION < GTA3_PC_10
|
||||
int32 unk; // Only on PS2, used by static non-looped sounds (AFAIK)
|
||||
// Looks like it's keeping a number of frames left to play with the purpose of setting m_bIsPlayingFinished=TRUE once value reaches 0
|
||||
// Default value is -3 for whatever reason
|
||||
#endif
|
||||
uint32 m_nFinalPriority; // Actual value used to compare priority, calculated using volume and m_nPriority. Lesser value means higher priority
|
||||
int8 m_nVolumeChange; // How much m_nVolume should reduce per each frame.
|
||||
#if defined(FIX_BUGS) && defined(EXTERNAL_3D_SOUND)
|
||||
int8 m_nEmittingVolumeChange; // same as above but for m_nEmittingVolume
|
||||
#endif
|
||||
uint8 field_51_lcs;
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(tSound, 92);
|
||||
VALIDATE_SIZE(tSound, 96);
|
||||
|
||||
class CPhysical;
|
||||
class CAutomobile;
|
||||
@@ -96,7 +89,7 @@ public:
|
||||
CVector m_vecPos;
|
||||
float m_fDistance;
|
||||
uint8 m_nVolume;
|
||||
int8 m_nProcess;
|
||||
int8 m_nLoadingTimeout; // how many iterations we gonna wait until dropping the sample if it's still not loaded (only useful on PS2)
|
||||
#if defined(EXTERNAL_3D_SOUND) && defined(FIX_BUGS)
|
||||
uint8 m_nEmittingVolume;
|
||||
#endif
|
||||
@@ -107,28 +100,38 @@ VALIDATE_SIZE(tPedComment, 28);
|
||||
class cPedComments
|
||||
{
|
||||
public:
|
||||
tPedComment m_asPedComments[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
|
||||
uint8 m_nIndexMap[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
|
||||
uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS];
|
||||
uint8 m_nActiveBank;
|
||||
tPedComment m_aPedCommentQueue[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
|
||||
uint8 m_aPedCommentOrderList[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
|
||||
uint8 m_nPedCommentCount[NUM_SOUND_QUEUES];
|
||||
uint8 m_nActiveQueue;
|
||||
#ifdef GTA_PC
|
||||
bool8 m_bDelay;
|
||||
uint32 m_nDelayTimer;
|
||||
#endif
|
||||
|
||||
cPedComments()
|
||||
{
|
||||
for (int i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
|
||||
for (int j = 0; j < NUM_PED_COMMENTS_BANKS; j++) {
|
||||
m_asPedComments[j][i].m_nProcess = -1;
|
||||
m_nIndexMap[j][i] = NUM_PED_COMMENTS_SLOTS;
|
||||
for (int j = 0; j < NUM_SOUND_QUEUES; j++) {
|
||||
m_aPedCommentQueue[j][i].m_nLoadingTimeout = -1;
|
||||
m_aPedCommentOrderList[j][i] = NUM_PED_COMMENTS_SLOTS;
|
||||
}
|
||||
|
||||
for (int i = 0; i < NUM_PED_COMMENTS_BANKS; i++)
|
||||
m_nCommentsInBank[i] = 0;
|
||||
m_nActiveBank = 0;
|
||||
for (int i = 0; i < NUM_SOUND_QUEUES; i++)
|
||||
m_nPedCommentCount[i] = 0;
|
||||
m_nActiveQueue = 0;
|
||||
}
|
||||
void Add(tPedComment *com);
|
||||
void Process();
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cPedComments, 1164);
|
||||
VALIDATE_SIZE(cPedComments, 0x490);
|
||||
|
||||
#ifdef FIX_BUGS // LCS extends the number of mission slots but not audio channels, the game would crash on ClearMissionAudio trying to stop channels that don't exist
|
||||
#define MISSION_AUDIO_SLOTS (2)
|
||||
#else
|
||||
#define MISSION_AUDIO_SLOTS (5)
|
||||
#endif
|
||||
|
||||
// name made up
|
||||
class cAudioScriptObjectManager
|
||||
@@ -166,6 +169,7 @@ public:
|
||||
class cVehicleParams
|
||||
{
|
||||
public:
|
||||
int32 m_VehicleType;
|
||||
bool8 m_bDistanceCalculated;
|
||||
float m_fDistance;
|
||||
CVehicle *m_pVehicle;
|
||||
@@ -175,6 +179,7 @@ public:
|
||||
|
||||
cVehicleParams()
|
||||
{
|
||||
m_VehicleType = -1;
|
||||
m_bDistanceCalculated = false;
|
||||
m_fDistance = 0.0f;
|
||||
m_pVehicle = nil;
|
||||
@@ -184,8 +189,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cVehicleParams, 0x18);
|
||||
VALIDATE_SIZE(cVehicleParams, 0x1C);
|
||||
|
||||
#if GTA_VERSION < GTAVC_PC_10
|
||||
enum {
|
||||
/*
|
||||
REFLECTION_YMAX = 0, top
|
||||
@@ -202,38 +208,59 @@ enum {
|
||||
REFLECTION_UP,
|
||||
MAX_REFLECTIONS,
|
||||
};
|
||||
#else
|
||||
enum {
|
||||
REFLECTION_NORTH = 0,
|
||||
REFLECTION_SOUTH,
|
||||
REFLECTION_WEST,
|
||||
REFLECTION_EAST,
|
||||
REFLECTION_CEIL_NORTH,
|
||||
REFLECTION_CEIL_SOUTH,
|
||||
REFLECTION_CEIL_WEST,
|
||||
REFLECTION_CEIL_EAST,
|
||||
MAX_REFLECTIONS,
|
||||
};
|
||||
#endif
|
||||
|
||||
enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED };
|
||||
enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED };
|
||||
enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_LOADING };
|
||||
|
||||
class cAudioManager
|
||||
{
|
||||
public:
|
||||
bool8 m_bIsInitialised;
|
||||
bool8 m_bIsSurround; // unused until VC
|
||||
bool8 m_bIsSurround; // used on PS2
|
||||
bool8 m_bReduceReleasingPriority;
|
||||
uint8 m_nActiveSamples;
|
||||
bool8 m_bDoubleVolume; // unused
|
||||
#if GTA_VERSION >= GTA3_PC_10
|
||||
bool8 m_bDynamicAcousticModelingStatus;
|
||||
#endif
|
||||
uint8 m_nChannelOffset;
|
||||
float m_fSpeedOfSound;
|
||||
bool8 m_bTimerJustReset;
|
||||
int32 m_nTimer;
|
||||
uint32 m_nTimer;
|
||||
tSound m_sQueueSample;
|
||||
uint8 m_nActiveSampleQueue;
|
||||
tSound m_asSamples[NUM_SOUNDS_SAMPLES_BANKS][NUM_CHANNELS_GENERIC];
|
||||
uint8 m_abSampleQueueIndexTable[NUM_SOUNDS_SAMPLES_BANKS][NUM_CHANNELS_GENERIC];
|
||||
uint8 m_SampleRequestQueuesStatus[NUM_SOUNDS_SAMPLES_BANKS];
|
||||
uint8 m_nActiveQueue;
|
||||
tSound m_aRequestedQueue[NUM_SOUND_QUEUES][NUM_CHANNELS_GENERIC];
|
||||
uint8 m_aRequestedOrderList[NUM_SOUND_QUEUES][NUM_CHANNELS_GENERIC];
|
||||
uint8 m_nRequestedCount[NUM_SOUND_QUEUES];
|
||||
tSound m_asActiveSamples[NUM_CHANNELS_GENERIC];
|
||||
tAudioEntity m_asAudioEntities[NUM_AUDIOENTITIES];
|
||||
int32 m_anAudioEntityIndices[NUM_AUDIOENTITIES];
|
||||
int32 m_nAudioEntitiesTotal;
|
||||
uint32 m_aAudioEntityOrderList[NUM_AUDIOENTITIES];
|
||||
uint32 m_nAudioEntitiesCount;
|
||||
#ifdef AUDIO_REFLECTIONS
|
||||
CVector m_avecReflectionsPos[MAX_REFLECTIONS];
|
||||
float m_afReflectionsDistances[MAX_REFLECTIONS];
|
||||
#endif
|
||||
cAudioScriptObjectManager m_sAudioScriptObjectManager;
|
||||
|
||||
bool8 field_4348_lcs;
|
||||
// miami
|
||||
bool8 m_bIsPlayerShutUp;
|
||||
uint8 m_nPlayerMood;
|
||||
uint32 m_nPlayerMoodTimer;
|
||||
uint32 field_4B38_vc;
|
||||
bool8 m_bGenericSfx;
|
||||
|
||||
cPedComments m_sPedComments;
|
||||
int32 m_nFireAudioEntity;
|
||||
int32 m_nWaterCannonEntity;
|
||||
@@ -244,24 +271,36 @@ public:
|
||||
int32 m_nCollisionEntity;
|
||||
cAudioCollisionManager m_sCollisionManager;
|
||||
int32 m_nProjectileEntity;
|
||||
int32 m_nEscalatorEntity;
|
||||
int32 m_nExtraSoundsEntity;
|
||||
#ifdef GTA_BRIDGE
|
||||
int32 m_nBridgeEntity;
|
||||
|
||||
#endif
|
||||
|
||||
// Mission audio stuff
|
||||
CVector m_vecMissionAudioPosition;
|
||||
bool8 m_bIsMissionAudio2D;
|
||||
uint32 m_nMissionAudioSampleIndex;
|
||||
uint8 m_nMissionAudioLoadingStatus;
|
||||
uint8 m_nMissionAudioPlayStatus;
|
||||
bool8 m_bIsMissionAudioPlaying;
|
||||
int32 m_nMissionAudioFramesToPlay;
|
||||
bool8 m_bIsMissionAudioAllowedToPlay;
|
||||
// So instead of making an array of struct they've added [MISSION_AUDIO_SLOTS] to every field...
|
||||
// Only someone with a VERY EXTRAORDINARY mind could have come up with that
|
||||
CVector m_vecMissionAudioPosition[MISSION_AUDIO_SLOTS];
|
||||
bool8 m_bIsMissionAudio2D[MISSION_AUDIO_SLOTS];
|
||||
uint32 m_nMissionAudioSampleIndex[MISSION_AUDIO_SLOTS];
|
||||
uint8 m_nMissionAudioLoadingStatus[MISSION_AUDIO_SLOTS];
|
||||
uint8 m_nMissionAudioPlayStatus[MISSION_AUDIO_SLOTS];
|
||||
bool8 m_bIsMissionAudioPlaying[MISSION_AUDIO_SLOTS];
|
||||
int32 m_nMissionAudioFramesToPlay[MISSION_AUDIO_SLOTS]; // possibly unsigned
|
||||
bool8 m_bIsMissionAudioAllowedToPlay[MISSION_AUDIO_SLOTS];
|
||||
bool8 m_bIsMissionAudioPhoneCall[MISSION_AUDIO_SLOTS];
|
||||
uint8 m_nGlobalSfxVolumeMultiplier; // used to lower sfx volume during phone calls
|
||||
|
||||
int32 m_anRandomTable[5];
|
||||
uint8 m_nTimeSpent;
|
||||
bool8 m_nUserPause;
|
||||
bool8 m_nPreviousUserPause;
|
||||
bool8 m_bIsPaused;
|
||||
bool8 m_bWasPaused;
|
||||
uint32 m_FrameCounter;
|
||||
|
||||
uint32 field_5644_lcs;
|
||||
uint32 field_5648_lcs;
|
||||
uint8 field_564C_lcs;
|
||||
|
||||
cAudioManager();
|
||||
~cAudioManager();
|
||||
|
||||
@@ -269,23 +308,25 @@ public:
|
||||
void Terminate();
|
||||
void Service();
|
||||
int32 CreateEntity(eAudioType type, void *entity);
|
||||
void DestroyEntity(int32 id);
|
||||
void DestroyEntity(int32 id); // inlined in vc
|
||||
bool8 GetEntityStatus(int32 id);
|
||||
void SetEntityStatus(int32 id, bool8 status);
|
||||
void *GetEntityPointer(int32 id);
|
||||
void PlayOneShot(int32 index, uint16 sound, float vol);
|
||||
void SetEffectsMasterVolume(uint8 volume);
|
||||
void SetMusicMasterVolume(uint8 volume);
|
||||
void SetMP3BoostVolume(uint8 volume);
|
||||
void SetEffectsFadeVol(uint8 volume);
|
||||
void SetMusicFadeVol(uint8 volume);
|
||||
void SetMonoMode(bool8 mono);
|
||||
void SetOutputMode(bool8 surround);
|
||||
void ResetTimers(uint32 time);
|
||||
void DestroyAllGameCreatedEntities();
|
||||
|
||||
|
||||
#ifdef GTA_PC
|
||||
uint8 GetNum3DProvidersAvailable();
|
||||
char *Get3DProviderName(uint8 id);
|
||||
int8 GetCurrent3DProviderIndex();
|
||||
int8 AutoDetect3DProviders();
|
||||
int8 SetCurrent3DProvider(uint8 which);
|
||||
void SetSpeakerConfig(int32 conf);
|
||||
bool8 IsMP3RadioChannelAvailable();
|
||||
@@ -300,29 +341,32 @@ public:
|
||||
#endif
|
||||
|
||||
void ServiceSoundEffects();
|
||||
uint32 FL(float f); // not used
|
||||
uint8 ComputeVolume(uint8 emittingVolume, float maxDistance, float distance);
|
||||
void TranslateEntity(Const CVector *v1, CVector *v2);
|
||||
int32 ComputeFrontRearMix(float, CVector *);
|
||||
int32 ComputePan(float, CVector *);
|
||||
uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier); // inlined on PS2
|
||||
uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier);
|
||||
int32 RandomDisplacement(uint32 seed);
|
||||
void InterrogateAudioEntities(); // inlined on PS2
|
||||
void AddSampleToRequestedQueue();
|
||||
void AddDetailsToRequestedOrderList(uint8 sample); // inlined on PS2
|
||||
void InterrogateAudioEntities(); // inlined
|
||||
void AddSampleToRequestedQueue(uint8 unk_lcs = 0);
|
||||
void AddDetailsToRequestedOrderList(uint8 sample); // inlined in vc
|
||||
#ifdef AUDIO_REFLECTIONS
|
||||
void AddReflectionsToRequestedQueue();
|
||||
void UpdateReflections();
|
||||
#endif
|
||||
void AddReleasingSounds();
|
||||
void ProcessActiveQueues();
|
||||
void ClearRequestedQueue(); // inlined on PS2
|
||||
void ClearRequestedQueue(); // inlined in vc
|
||||
void ClearActiveSamples();
|
||||
void GenerateIntegerRandomNumberTable(); // inlined on PS2
|
||||
void GenerateIntegerRandomNumberTable();
|
||||
#ifdef GTA_PS2
|
||||
void LoadBankIfNecessary(uint8 bank); // this is used only on PS2 but technically not a platform code
|
||||
#endif
|
||||
void DirectlyEnqueueSample(uint32 sample, uint8 bank, uint32 counter, uint32 priority, uint32 freq, uint8 volume, uint8 framesToPlay, uint32 notStereo = 0);
|
||||
|
||||
#ifdef EXTERNAL_3D_SOUND // actually must have been && AUDIO_MSS as well
|
||||
void AdjustSamplesVolume();
|
||||
uint8 ComputeEmittingVolume(uint8 emittingVolume, float maxDistance, float distance);
|
||||
void AdjustSamplesVolume(); // inlined
|
||||
uint8 ComputeEmittingVolume(uint8 emittingVolume, float maxDistance, float distance); // inlined
|
||||
#endif
|
||||
|
||||
// audio logic
|
||||
@@ -332,145 +376,186 @@ public:
|
||||
void PostTerminateGameSpecificShutdown();
|
||||
void ResetAudioLogicTimers(uint32 timer);
|
||||
void ProcessReverb();
|
||||
float GetDistanceSquared(const CVector &v);
|
||||
float GetDistanceSquared(const CVector &v); // inlined in vc
|
||||
void CalculateDistance(bool8 &condition, float dist);
|
||||
CVehicle *FindVehicleOfPlayer();
|
||||
void ProcessSpecial();
|
||||
void ProcessEntity(int32 sound);
|
||||
void ProcessPhysical(int32 id);
|
||||
|
||||
// vehicles
|
||||
void ProcessVehicle(CVehicle *vehicle);
|
||||
bool8 ProcessCarHeli(cVehicleParams ¶ms);
|
||||
void ProcessRainOnVehicle(cVehicleParams ¶ms);
|
||||
bool8 ProcessReverseGear(cVehicleParams ¶ms);
|
||||
void ProcessModelCarEngine(cVehicleParams ¶ms);
|
||||
void ProcessModelHeliVehicle(cVehicleParams ¶ms);
|
||||
void ProcessModelVehicle(cVehicleParams ¶ms);
|
||||
bool8 ProcessVehicleFlatTyre(cVehicleParams ¶ms);
|
||||
bool8 ProcessVehicleRoadNoise(cVehicleParams ¶ms);
|
||||
bool8 ProcessWetRoadNoise(cVehicleParams ¶ms);
|
||||
bool8 ProcessVehicleEngine(cVehicleParams ¶ms);
|
||||
void UpdateGasPedalAudio(CAutomobile *automobile); // inlined on PS2
|
||||
void UpdateGasPedalAudio(CVehicle *veh, int vehType);
|
||||
void PlayerJustGotInCar();
|
||||
void PlayerJustLeftCar();
|
||||
void AddPlayerCarSample(uint8 emittingVolume, uint32 freq, uint32 sample, uint8 bank, uint8 counter, bool8 notLooping);
|
||||
void ProcessCesna(cVehicleParams ¶ms);
|
||||
void ProcessPlayersVehicleEngine(cVehicleParams ¶ms, CAutomobile *automobile);
|
||||
void ProcessPlayersVehicleEngine(cVehicleParams ¶ms, CVehicle *veh);
|
||||
bool8 ProcessVehicleSkidding(cVehicleParams ¶ms);
|
||||
float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange);
|
||||
float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange); // inlined on PS2
|
||||
void ProcessVehicleHorn(cVehicleParams ¶ms);
|
||||
bool8 UsesSiren(uint32 model); // inlined on PS2
|
||||
bool8 UsesSirenSwitching(uint32 model); // inlined on PS2
|
||||
float GetVehicleDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, float gasPedalAudio, cTransmission *transmission, float velocityChange);
|
||||
float GetVehicleNonDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, cTransmission *transmission, float velocityChange);
|
||||
bool8 ProcessVehicleHorn(cVehicleParams ¶ms);
|
||||
bool8 UsesSiren(cVehicleParams ¶ms);
|
||||
bool8 UsesSirenSwitching(cVehicleParams ¶ms);
|
||||
bool8 ProcessVehicleSirenOrAlarm(cVehicleParams ¶ms);
|
||||
bool8 UsesReverseWarning(uint32 model); // inlined on PS2
|
||||
bool8 UsesReverseWarning(uint32 model);
|
||||
bool8 ProcessVehicleReverseWarning(cVehicleParams ¶ms);
|
||||
bool8 ProcessVehicleDoors(cVehicleParams ¶ms);
|
||||
bool8 ProcessAirBrakes(cVehicleParams ¶ms);
|
||||
bool8 HasAirBrakes(uint32 model); // inlined on PS2
|
||||
bool8 HasAirBrakes(uint32 model);
|
||||
bool8 ProcessEngineDamage(cVehicleParams ¶ms);
|
||||
bool8 ProcessCarBombTick(cVehicleParams ¶ms);
|
||||
void ProcessVehicleOneShots(cVehicleParams ¶ms);
|
||||
#ifdef GTA_TRAIN
|
||||
bool8 ProcessTrainNoise(cVehicleParams ¶ms);
|
||||
#endif
|
||||
bool8 ProcessFerryNoise(cVehicleParams ¶ms);
|
||||
bool8 ProcessBoatEngine(cVehicleParams ¶ms);
|
||||
bool8 ProcessBoatMovingOverWater(cVehicleParams ¶ms);
|
||||
bool8 ProcessHelicopter(cVehicleParams ¶ms);
|
||||
void ProcessPlane(cVehicleParams ¶ms); // inlined on PS2
|
||||
void ProcessPlane(cVehicleParams ¶ms);
|
||||
void ProcessJumbo(cVehicleParams ¶ms);
|
||||
void ProcessJumboTaxi(); // inlined on PS2
|
||||
void ProcessJumboTaxi();
|
||||
void ProcessJumboAccel(CPlane *plane);
|
||||
void ProcessJumboTakeOff(CPlane *plane); // inlined on PS2
|
||||
void ProcessJumboFlying(); // inlined on PS2
|
||||
void ProcessJumboLanding(CPlane *plane); // inlined on PS2
|
||||
void ProcessJumboDecel(CPlane *plane); // inlined on PS2
|
||||
void ProcessJumboTakeOff(CPlane *plane);
|
||||
void ProcessJumboFlying();
|
||||
void ProcessJumboLanding(CPlane *plane);
|
||||
void ProcessJumboDecel(CPlane *plane);
|
||||
bool8 SetupJumboTaxiSound(uint8 vol);
|
||||
bool8 SetupJumboWhineSound(uint8 emittingVol, uint32 freq);
|
||||
bool8 SetupJumboEngineSound(uint8 vol, uint32 freq);
|
||||
bool8 SetupJumboFlySound(uint8 emittingVol);
|
||||
bool8 SetupJumboRumbleSound(uint8 emittingVol);
|
||||
int32 GetJumboTaxiFreq(); // inlined on PS2
|
||||
int32 GetJumboTaxiFreq(); // inlined in vc
|
||||
|
||||
// peds
|
||||
void ProcessPed(CPhysical *ped); // inlined on PS2
|
||||
void ProcessPedHeadphones(cPedParams ¶ms);
|
||||
void ProcessPed(CPhysical *ped);
|
||||
void ProcessPedOneShots(cPedParams ¶ms);
|
||||
void SetPedTalkingStatus(CPed *ped, bool8 status);
|
||||
void SetPlayersMood(uint8 mood, uint32 time);
|
||||
void ProcessPlayerMood();
|
||||
|
||||
// ped comments
|
||||
void SetupPedComments(cPedParams ¶ms, uint16 sound);
|
||||
int32 GetPedCommentSfx(CPed *ped, uint16 sound);
|
||||
void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset); // inlined on PS2
|
||||
uint32 GetPlayerTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetCopTalkSfx(uint16 sound);
|
||||
uint32 GetSwatTalkSfx(uint16 sound);
|
||||
uint32 GetFBITalkSfx(uint16 sound);
|
||||
uint32 GetArmyTalkSfx(uint16 sound);
|
||||
uint32 GetMedicTalkSfx(uint16 sound);
|
||||
uint32 GetFiremanTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetBusinessMaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetBusinessMaleYoungTalkSfx(uint16 sound, uint32 model);
|
||||
uint32 GetMafiaTalkSfx(uint16 sound);
|
||||
uint32 GetTriadTalkSfx(uint16 sound);
|
||||
uint32 GetDiabloTalkSfx(uint16 sound);
|
||||
uint32 GetYakuzaTalkSfx(uint16 sound);
|
||||
uint32 GetYardieTalkSfx(uint16 sound);
|
||||
uint32 GetColumbianTalkSfx(uint16 sound);
|
||||
uint32 GetHoodTalkSfx(uint16 sound);
|
||||
uint32 GetBlackCriminalTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteCriminalTalkSfx(uint16 sound);
|
||||
uint32 GetCasualMaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetCasualMaleYoungTalkSfx(uint16 sound);
|
||||
uint32 GetBlackCasualFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteCasualFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetFemaleNo3TalkSfx(uint16 sound);
|
||||
uint32 GetWhiteBusinessFemaleTalkSfx(uint16 sound, uint32 model);
|
||||
uint32 GetBlackFatFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteFatMaleTalkSfx(uint16 sound);
|
||||
uint32 GetBlackFatMaleTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteFatFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetBlackFemaleProstituteTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteFemaleProstituteTalkSfx(uint16 sound);
|
||||
uint32 GetBlackProjectMaleTalkSfx(uint16 sound, uint32 model);
|
||||
uint32 GetBlackProjectFemaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetBlackProjectFemaleYoungTalkSfx(uint16 sound);
|
||||
uint32 GetChinatownMaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetChinatownMaleYoungTalkSfx(uint16 sound);
|
||||
uint32 GetChinatownFemaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetChinatownFemaleYoungTalkSfx(uint16 sound);
|
||||
uint32 GetLittleItalyMaleTalkSfx(uint16 sound);
|
||||
uint32 GetLittleItalyFemaleOldTalkSfx(uint16 sound);
|
||||
uint32 GetLittleItalyFemaleYoungTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteDockerMaleTalkSfx(uint16 sound);
|
||||
uint32 GetBlackDockerMaleTalkSfx(uint16 sound);
|
||||
uint32 GetScumMaleTalkSfx(uint16 sound);
|
||||
uint32 GetScumFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetWhiteWorkerMaleTalkSfx(uint16 sound);
|
||||
uint32 GetBlackWorkerMaleTalkSfx(uint16 sound);
|
||||
uint32 GetBlackBusinessFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetSupermodelMaleTalkSfx(uint16 sound);
|
||||
uint32 GetSupermodelFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetStewardMaleTalkSfx(uint16 sound);
|
||||
uint32 GetStewardFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetFanMaleTalkSfx(uint16 sound, uint32 model);
|
||||
uint32 GetFanFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetHospitalMaleTalkSfx(uint16 sound);
|
||||
uint32 GetHospitalFemaleTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetWhiteConstructionWorkerTalkSfx(uint16 sound);
|
||||
uint32 GetBlackConstructionWorkerTalkSfx(uint16 sound);
|
||||
uint32 GetShopperFemaleTalkSfx(uint16 sound, uint32 model);
|
||||
uint32 GetStudentMaleTalkSfx(uint16 sound);
|
||||
uint32 GetStudentFemaleTalkSfx(uint16 sound);
|
||||
uint32 GetPedCommentSfx(CPed *ped, uint16 sound);
|
||||
void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset);
|
||||
uint32 GetPlayerTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetMariaTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetDonaldLoveTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetJdOtooleTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetleonMcaffreyTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetSalvatoreTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetToshikoTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetMickeyHamfistsTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBiker1TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBiker2TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetGrdAng1TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetGrdAng2TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetGenericMaleTalkSfx(CPed *ped, uint16 sound); // inlined in vc
|
||||
uint32 GetGenericFemaleTalkSfx(CPed *ped, uint16 sound); // inlined in vc
|
||||
uint32 GetDefaultTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetCopTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetSwatTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetFBITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetArmyTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetMedicTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetFiremanTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYG1TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYG2TalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFORITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMORITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYBUTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYMDTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYCGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFYPRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHFOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMOCATalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYCRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFORITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYBUTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFYPRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBFOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYPITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMYBBTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYCRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYSKTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYSKTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOSTTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFORITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYRITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMORITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOBETalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYCWTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYGOTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFOGOTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOGOTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYLGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYLGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYBUTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYBUTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOBUTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYPRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOTRTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYPITalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMOCATalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYSHTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFOSHTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetJFOTOTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetJMOTOTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHNTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBKTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetCBTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetSGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetCLTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetGDTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetPGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetViceWhiteTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetViceBlackTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetBMODKTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetHMYAPTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWFYJGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetWMYJGTalkSfx(CPed *ped, uint16 sound);
|
||||
uint32 GetSpecialCharacterTalkSfx(CPed *ped, int32 model, uint16 sound);
|
||||
|
||||
uint32 GetSpecialCharacterTalkSfx(uint32 modelIndex, uint16 sound);
|
||||
uint32 GetEightBallTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetSalvatoreTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetMistyTalkSfx(uint16 sound);
|
||||
uint32 GetOldJapTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetCatalinaTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetBomberTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetSecurityGuardTalkSfx(uint16 sound);
|
||||
uint32 GetChunkyTalkSfx(uint16 sound); // inlined on PS2
|
||||
|
||||
uint32 GetAsianTaxiDriverTalkSfx(uint16 sound); // inlined on PS2
|
||||
uint32 GetPimpTalkSfx(uint16 sound);
|
||||
uint32 GetNormalMaleTalkSfx(uint16 sound);
|
||||
uint32 GetGenericMaleTalkSfx(uint16 sound);
|
||||
uint32 GetGenericFemaleTalkSfx(uint16 sound);
|
||||
void DebugPlayPedComment(int32 sound);
|
||||
|
||||
// particles
|
||||
void ProcessExplosions(int32 explosion);
|
||||
@@ -478,51 +563,43 @@ public:
|
||||
void ProcessWaterCannon(int32);
|
||||
|
||||
// script objects
|
||||
void ProcessScriptObject(int32 id); // inlined on PS2
|
||||
void ProcessScriptObject(int32 id);
|
||||
void ProcessOneShotScriptObject(uint8 sound);
|
||||
void ProcessLoopingScriptObject(uint8 sound);
|
||||
void ProcessPornCinema(uint8 sound);
|
||||
void ProcessWorkShopScriptObject(uint8 sound);
|
||||
void ProcessSawMillScriptObject(uint8 sound);
|
||||
void ProcessLaunderetteScriptObject(uint8 sound);
|
||||
void ProcessShopScriptObject(uint8 sound);
|
||||
void ProcessAirportScriptObject(uint8 sound);
|
||||
void ProcessCinemaScriptObject(uint8 sound);
|
||||
void ProcessDocksScriptObject(uint8 sound);
|
||||
void ProcessHomeScriptObject(uint8 sound);
|
||||
void ProcessPoliceCellBeatingScriptObject(uint8 sound);
|
||||
|
||||
// misc
|
||||
void ProcessWeather(int32 id);
|
||||
void ProcessFrontEnd();
|
||||
void ProcessCrane();
|
||||
//void ProcessCrane();
|
||||
void ProcessProjectiles();
|
||||
void ProcessEscalators();
|
||||
void ProcessExtraSounds();
|
||||
void ProcessGarages();
|
||||
void ProcessFireHydrant();
|
||||
|
||||
// bridge
|
||||
void ProcessBridge(); // inlined on PS2
|
||||
void ProcessBridgeWarning();
|
||||
void ProcessBridgeMotor();
|
||||
void ProcessBridgeOneShots();
|
||||
#ifdef GTA_BRIDGE
|
||||
void ProcessBridge();
|
||||
#endif
|
||||
|
||||
// mission audio
|
||||
const char *GetMissionAudioLoadedLabel(uint8 slot);
|
||||
bool8 MissionScriptAudioUsesPoliceChannel(uint32 soundMission);
|
||||
void PreloadMissionAudio(Const char *name);
|
||||
uint8 GetMissionAudioLoadingStatus();
|
||||
void SetMissionAudioLocation(float x, float y, float z);
|
||||
void PlayLoadedMissionAudio();
|
||||
bool8 IsMissionAudioSampleFinished();
|
||||
bool8 IsMissionAudioSamplePlaying() { return m_nMissionAudioPlayStatus == PLAY_STATUS_PLAYING; }
|
||||
bool8 ShouldDuckMissionAudio() { return IsMissionAudioSamplePlaying(); }
|
||||
void ClearMissionAudio();
|
||||
void PreloadMissionAudio(uint8 slot, Const char *name);
|
||||
uint8 GetMissionAudioLoadingStatus(uint8 slot);
|
||||
void SetMissionAudioLocation(uint8 slot, float x, float y, float z);
|
||||
void PlayLoadedMissionAudio(uint8 slot);
|
||||
bool8 ShouldDuckMissionAudio(uint8 slot);
|
||||
bool8 IsMissionAudioSamplePlaying(uint8 slot);
|
||||
bool8 IsMissionAudioSampleFinished(uint8 slot);
|
||||
void ClearMissionAudio(uint8 slot); // inlined in vc
|
||||
void ProcessMissionAudioSlot(uint8 slot);
|
||||
void ProcessMissionAudio();
|
||||
|
||||
// police radio
|
||||
void InitialisePoliceRadioZones();
|
||||
void InitialisePoliceRadio();
|
||||
void ResetPoliceRadio();
|
||||
void SetMissionScriptPoliceAudio(uint32 sfx);
|
||||
void SetMissionScriptPoliceAudio(uint32 sfx); // inlined and optimized
|
||||
int8 GetMissionScriptPoliceAudioPlayingStatus();
|
||||
void DoPoliceRadioCrackle();
|
||||
void ServicePoliceRadio();
|
||||
@@ -531,7 +608,7 @@ public:
|
||||
void SetupSuspectLastSeenReport();
|
||||
void ReportCrime(eCrimeType crime, const CVector &pos);
|
||||
void PlaySuspectLastSeen(float x, float y, float z);
|
||||
void AgeCrimes(); // inlined on PS2
|
||||
void AgeCrimes(); // inlined in vc
|
||||
|
||||
// collision stuff
|
||||
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2);
|
||||
@@ -541,7 +618,9 @@ public:
|
||||
uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision);
|
||||
float GetCollisionOneShotRatio(uint32 a, float b);
|
||||
float GetCollisionLoopingRatio(uint32 a, uint32 b, float c); // not used
|
||||
float GetCollisionRatio(float a, float b, float c, float d); // inlined on PS2
|
||||
float GetCollisionRatio(float a, float b, float c, float d); // inlined in vc
|
||||
|
||||
float Sqrt(float v) const { return v <= 0.0f ? 0.0f : ::Sqrt(v); }
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -570,9 +649,26 @@ public:
|
||||
#else
|
||||
#define SET_SOUND_REFLECTION(b)
|
||||
#endif
|
||||
|
||||
#if defined(AUDIO_MSS) && !defined(PS2_AUDIO_CHANNELS)
|
||||
static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error");
|
||||
#ifdef AUDIO_REVERB
|
||||
#define SET_SOUND_REVERB(b) m_sQueueSample.m_bReverb = b
|
||||
#else
|
||||
#define SET_SOUND_REVERB(b)
|
||||
#endif
|
||||
|
||||
#ifndef GTA_PS2
|
||||
#define CHANNEL_PLAYER_VEHICLE_ENGINE m_nActiveSamples
|
||||
#endif
|
||||
|
||||
//#if defined(AUDIO_MSS) && !defined(PS2_AUDIO_CHANNELS)
|
||||
//static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error");
|
||||
//#endif
|
||||
|
||||
|
||||
extern cAudioManager AudioManager;
|
||||
|
||||
enum
|
||||
{
|
||||
PED_COMMENT_VOLUME = 127,
|
||||
PED_COMMENT_VOLUME_BEHIND_WALL = 31,
|
||||
COLLISION_MAX_DIST = 60,
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -93,6 +93,8 @@ cAudioScriptObject::SaveAllAudioScriptObjects(uint8 *buf, uint32 *size)
|
||||
void
|
||||
PlayOneShotScriptObject(uint8 id, CVector const &pos)
|
||||
{
|
||||
if (!DMAudio.IsAudioInitialised()) return;
|
||||
|
||||
cAudioScriptObject *audioScriptObject = new cAudioScriptObject();
|
||||
audioScriptObject->Posn = pos;
|
||||
audioScriptObject->AudioId = id;
|
||||
|
||||
@@ -63,9 +63,18 @@ cDMAudio::DestroyAllGameCreatedEntities(void)
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetMonoMode(bool8 mono)
|
||||
cDMAudio::SetOutputMode(bool8 surround)
|
||||
{
|
||||
AudioManager.SetMonoMode(mono);
|
||||
AudioManager.SetOutputMode(surround);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetMP3BoostVolume(uint8 volume)
|
||||
{
|
||||
uint8 vol = volume;
|
||||
if (vol > MAX_VOLUME) vol = MAX_VOLUME;
|
||||
|
||||
AudioManager.SetMP3BoostVolume(vol);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -116,6 +125,11 @@ cDMAudio::Get3DProviderName(uint8 id)
|
||||
return AudioManager.Get3DProviderName(id);
|
||||
}
|
||||
|
||||
int8 cDMAudio::AutoDetect3DProviders(void)
|
||||
{
|
||||
return AudioManager.AutoDetect3DProviders();
|
||||
}
|
||||
|
||||
int8
|
||||
cDMAudio::GetCurrent3DProviderIndex(void)
|
||||
{
|
||||
@@ -238,13 +252,13 @@ cDMAudio::PlayFrontEndSound(uint16 frontend, uint32 volume)
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::PlayRadioAnnouncement(uint8 announcement)
|
||||
cDMAudio::PlayRadioAnnouncement(uint32 announcement)
|
||||
{
|
||||
MusicManager.PlayAnnouncement(announcement);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::PlayFrontEndTrack(uint8 track, bool8 frontendFlag)
|
||||
cDMAudio::PlayFrontEndTrack(uint32 track, bool8 frontendFlag)
|
||||
{
|
||||
MusicManager.PlayFrontEndTrack(track, frontendFlag);
|
||||
}
|
||||
@@ -268,7 +282,7 @@ cDMAudio::ChangeMusicMode(uint8 mode)
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::PreloadCutSceneMusic(uint8 track)
|
||||
cDMAudio::PreloadCutSceneMusic(uint32 track)
|
||||
{
|
||||
MusicManager.PreloadCutSceneMusic(track);
|
||||
}
|
||||
@@ -286,39 +300,51 @@ cDMAudio::StopCutSceneMusic(void)
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::PreloadMissionAudio(Const char *missionAudio)
|
||||
cDMAudio::PreloadMissionAudio(uint8 slot, Const char *missionAudio)
|
||||
{
|
||||
AudioManager.PreloadMissionAudio(missionAudio);
|
||||
AudioManager.PreloadMissionAudio(slot, missionAudio);
|
||||
}
|
||||
|
||||
uint8
|
||||
cDMAudio::GetMissionAudioLoadingStatus(void)
|
||||
cDMAudio::GetMissionAudioLoadingStatus(uint8 slot)
|
||||
{
|
||||
return AudioManager.GetMissionAudioLoadingStatus();
|
||||
return AudioManager.GetMissionAudioLoadingStatus(slot);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetMissionAudioLocation(float x, float y, float z)
|
||||
cDMAudio::SetMissionAudioLocation(uint8 slot, float x, float y, float z)
|
||||
{
|
||||
AudioManager.SetMissionAudioLocation(x, y, z);
|
||||
AudioManager.SetMissionAudioLocation(slot, x, y, z);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::PlayLoadedMissionAudio(void)
|
||||
cDMAudio::PlayLoadedMissionAudio(uint8 slot)
|
||||
{
|
||||
AudioManager.PlayLoadedMissionAudio();
|
||||
AudioManager.PlayLoadedMissionAudio(slot);
|
||||
}
|
||||
|
||||
bool8
|
||||
cDMAudio::IsMissionAudioSampleFinished(void)
|
||||
cDMAudio::IsMissionAudioSamplePlaying(uint8 slot)
|
||||
{
|
||||
return AudioManager.IsMissionAudioSampleFinished();
|
||||
return AudioManager.IsMissionAudioSamplePlaying(slot);
|
||||
}
|
||||
|
||||
bool8
|
||||
cDMAudio::IsMissionAudioSampleFinished(uint8 slot)
|
||||
{
|
||||
return AudioManager.IsMissionAudioSampleFinished(slot);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::ClearMissionAudio(void)
|
||||
cDMAudio::ClearMissionAudio(uint8 slot)
|
||||
{
|
||||
AudioManager.ClearMissionAudio();
|
||||
AudioManager.ClearMissionAudio(slot);
|
||||
}
|
||||
|
||||
const char *
|
||||
cDMAudio::GetMissionAudioLoadedLabel(uint8 slot)
|
||||
{
|
||||
return AudioManager.GetMissionAudioLoadedLabel(slot);
|
||||
}
|
||||
|
||||
uint8
|
||||
@@ -334,7 +360,49 @@ cDMAudio::SetRadioInCar(uint32 radio)
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetRadioChannel(uint8 radio, int32 pos)
|
||||
cDMAudio::SetRadioChannel(uint32 radio, int32 pos)
|
||||
{
|
||||
MusicManager.SetRadioChannelByScript(radio, pos);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetStartingTrackPositions(bool8 isStartGame)
|
||||
{
|
||||
MusicManager.SetStartingTrackPositions(isStartGame);
|
||||
}
|
||||
|
||||
float *
|
||||
cDMAudio::GetListenTimeArray()
|
||||
{
|
||||
return MusicManager.GetListenTimeArray();
|
||||
}
|
||||
|
||||
uint32
|
||||
cDMAudio::GetFavouriteRadioStation()
|
||||
{
|
||||
return MusicManager.GetFavouriteRadioStation();
|
||||
}
|
||||
|
||||
int32
|
||||
cDMAudio::GetRadioPosition(uint32 station)
|
||||
{
|
||||
return MusicManager.GetRadioPosition(station);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetPedTalkingStatus(CPed *ped, bool8 status)
|
||||
{
|
||||
return AudioManager.SetPedTalkingStatus(ped, status);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::SetPlayersMood(uint8 mood, uint32 time)
|
||||
{
|
||||
return AudioManager.SetPlayersMood(mood, time);
|
||||
}
|
||||
|
||||
void
|
||||
cDMAudio::ShutUpPlayerTalking(bool8 state)
|
||||
{
|
||||
AudioManager.m_bIsPlayerShutUp = state;
|
||||
}
|
||||
@@ -7,6 +7,9 @@
|
||||
#define AEHANDLE_IS_FAILED(h) ((h)<0)
|
||||
#define AEHANDLE_IS_OK(h) ((h)>=0)
|
||||
|
||||
#define NO_AUDIO_PROVIDER -3
|
||||
#define AUDIO_PROVIDER_NOT_DETERMINED -99
|
||||
|
||||
class cAudioScriptObject;
|
||||
class CEntity;
|
||||
|
||||
@@ -27,7 +30,8 @@ public:
|
||||
void PlayOneShot(int32 audioEntity, uint16 oneShot, float volume);
|
||||
void DestroyAllGameCreatedEntities(void);
|
||||
|
||||
void SetMonoMode(bool8 mono);
|
||||
void SetOutputMode(bool8 surround);
|
||||
void SetMP3BoostVolume(uint8 volume);
|
||||
void SetEffectsMasterVolume(uint8 volume);
|
||||
void SetMusicMasterVolume(uint8 volume);
|
||||
void SetEffectsFadeVol(uint8 volume);
|
||||
@@ -36,6 +40,8 @@ public:
|
||||
uint8 GetNum3DProvidersAvailable(void);
|
||||
char *Get3DProviderName(uint8 id);
|
||||
|
||||
int8 AutoDetect3DProviders(void);
|
||||
|
||||
int8 GetCurrent3DProviderIndex(void);
|
||||
int8 SetCurrent3DProvider(uint8 which);
|
||||
|
||||
@@ -65,27 +71,37 @@ public:
|
||||
void ReportCollision(CEntity *entityA, CEntity *entityB, uint8 surfaceTypeA, uint8 surfaceTypeB, float collisionPower, float velocity);
|
||||
|
||||
void PlayFrontEndSound(uint16 frontend, uint32 volume);
|
||||
void PlayRadioAnnouncement(uint8 announcement);
|
||||
void PlayFrontEndTrack(uint8 track, bool8 frontendFlag);
|
||||
void PlayRadioAnnouncement(uint32 announcement);
|
||||
void PlayFrontEndTrack(uint32 track, bool8 frontendFlag);
|
||||
void StopFrontEndTrack(void);
|
||||
|
||||
void ResetTimers(uint32 time);
|
||||
|
||||
void ChangeMusicMode(uint8 mode);
|
||||
|
||||
void PreloadCutSceneMusic(uint8 track);
|
||||
void PreloadCutSceneMusic(uint32 track);
|
||||
void PlayPreloadedCutSceneMusic(void);
|
||||
void StopCutSceneMusic(void);
|
||||
|
||||
void PreloadMissionAudio(Const char *missionAudio);
|
||||
uint8 GetMissionAudioLoadingStatus(void);
|
||||
void SetMissionAudioLocation(float x, float y, float z);
|
||||
void PlayLoadedMissionAudio(void);
|
||||
bool8 IsMissionAudioSampleFinished(void);
|
||||
void ClearMissionAudio(void);
|
||||
void PreloadMissionAudio(uint8 slot, Const char *missionAudio);
|
||||
uint8 GetMissionAudioLoadingStatus(uint8 slot);
|
||||
void SetMissionAudioLocation(uint8 slot, float x, float y, float z);
|
||||
void PlayLoadedMissionAudio(uint8 slot);
|
||||
bool8 IsMissionAudioSamplePlaying(uint8 slot);
|
||||
bool8 IsMissionAudioSampleFinished(uint8 slot);
|
||||
void ClearMissionAudio(uint8 slot);
|
||||
const char *GetMissionAudioLoadedLabel(uint8 slot);
|
||||
|
||||
uint8 GetRadioInCar(void);
|
||||
void SetRadioInCar(uint32 radio);
|
||||
void SetRadioChannel(uint8 radio, int32 pos);
|
||||
void SetRadioChannel(uint32 radio, int32 pos);
|
||||
|
||||
void SetStartingTrackPositions(bool8 isStartGame);
|
||||
float *GetListenTimeArray();
|
||||
uint32 GetFavouriteRadioStation();
|
||||
int32 GetRadioPosition(uint32 station);
|
||||
void SetPedTalkingStatus(class CPed *ped, bool8 status);
|
||||
void SetPlayersMood(uint8 mood, uint32 time);
|
||||
void ShutUpPlayerTalking(bool8 state);
|
||||
};
|
||||
extern cDMAudio DMAudio;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,41 +11,53 @@ public:
|
||||
};
|
||||
|
||||
class CVehicle;
|
||||
class CPed;
|
||||
|
||||
class cMusicManager
|
||||
{
|
||||
public:
|
||||
bool8 m_bIsInitialised;
|
||||
bool8 m_bDisabled;
|
||||
uint8 m_nMusicMode;
|
||||
uint8 m_nNextTrack;
|
||||
uint8 m_nPlayingTrack;
|
||||
bool8 m_bFrontendTrackFinished;
|
||||
bool8 m_bPlayInFrontend;
|
||||
bool8 m_bSetNextStation;
|
||||
uint8 m_nAnnouncement;
|
||||
bool8 m_bPreviousPlayerInCar;
|
||||
bool8 m_bPlayerInCar;
|
||||
uint8 m_nVolumeLatency;
|
||||
uint8 m_nCurrentVolume;
|
||||
uint8 m_nMaxVolume;
|
||||
uint32 m_nAnnouncement;
|
||||
bool8 m_bAnnouncementInProgress;
|
||||
tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS];
|
||||
bool8 m_bResetTimers;
|
||||
uint32 m_nResetTime;
|
||||
uint32 m_nLastTrackServiceTime;
|
||||
uint32 m_nTimer;
|
||||
bool8 m_bDoTrackService;
|
||||
bool8 m_bIgnoreTimeDelay;
|
||||
bool8 m_bVerifyAmbienceTrackStartedToPlay;
|
||||
bool8 m_bRadioSetByScript;
|
||||
uint8 m_nRadioStationScript;
|
||||
int32 m_nRadioPosition;
|
||||
uint8 m_nRadioInCar;
|
||||
uint32 m_nRadioInCar;
|
||||
uint32 m_nFrontendTrack;
|
||||
uint32 m_nPlayingTrack;
|
||||
uint8 m_nUpcomingMusicMode;
|
||||
uint8 m_nMusicMode;
|
||||
bool8 m_FrontendLoopFlag;
|
||||
bool8 m_bTrackChangeStarted;
|
||||
uint32 m_nNextTrack;
|
||||
bool8 m_nNextLoopFlag;
|
||||
bool8 m_bVerifyNextTrackStartedToPlay;
|
||||
bool8 m_bGameplayAllowsRadio;
|
||||
bool8 m_bRadioStreamReady;
|
||||
int8 nFramesSinceCutsceneEnded;
|
||||
bool8 m_bUserResumedGame;
|
||||
bool8 m_bMusicModeChangeStarted;
|
||||
uint8 m_nMusicModeToBeSet;
|
||||
bool8 m_bEarlyFrontendTrack;
|
||||
float aListenTimeArray[NUM_RADIOS];
|
||||
float m_nLastTrackServiceTime;
|
||||
|
||||
public:
|
||||
cMusicManager();
|
||||
bool8 IsInitialised() { return m_bIsInitialised; }
|
||||
uint32 GetMusicMode() { return m_nMusicMode; }
|
||||
uint8 GetNextTrack() { return m_nNextTrack; }
|
||||
uint8 GetMusicMode() { return m_nMusicMode; }
|
||||
uint32 GetCurrentTrack() { return m_nPlayingTrack; }
|
||||
|
||||
void ResetMusicAfterReload();
|
||||
void SetStartingTrackPositions(bool8 isNewGameTimer);
|
||||
bool8 Initialise();
|
||||
void Terminate();
|
||||
|
||||
@@ -55,35 +67,47 @@ public:
|
||||
bool8 PlayerInCar();
|
||||
void DisplayRadioStationName();
|
||||
|
||||
void PlayAnnouncement(uint8);
|
||||
void PlayFrontEndTrack(uint8, bool8);
|
||||
void PreloadCutSceneMusic(uint8);
|
||||
void PlayAnnouncement(uint32);
|
||||
void PlayFrontEndTrack(uint32, bool8);
|
||||
void PreloadCutSceneMusic(uint32);
|
||||
void PlayPreloadedCutSceneMusic(void);
|
||||
void StopCutSceneMusic(void);
|
||||
uint8 GetRadioInCar(void);
|
||||
uint32 GetRadioInCar(void);
|
||||
void SetRadioInCar(uint32);
|
||||
void SetRadioChannelByScript(uint8, int32);
|
||||
void SetRadioChannelByScript(uint32, int32);
|
||||
|
||||
void ResetMusicAfterReload();
|
||||
|
||||
void ResetTimers(int32);
|
||||
void ResetTimers(uint32);
|
||||
void Service();
|
||||
void ServiceFrontEndMode();
|
||||
void ServiceGameMode();
|
||||
void ServiceAmbience();
|
||||
void ServiceTrack();
|
||||
void ServiceTrack(CVehicle *veh, CPed *ped);
|
||||
|
||||
bool8 UsesPoliceRadio(CVehicle *veh);
|
||||
uint32 GetTrackStartPos(uint8);
|
||||
bool8 UsesTaxiRadio(CVehicle *veh);
|
||||
uint32 GetTrackStartPos(uint32 track);
|
||||
|
||||
void ComputeAmbienceVol(bool8 reset, uint8& outVolume);
|
||||
bool8 ServiceAnnouncement();
|
||||
|
||||
uint8 GetCarTuning();
|
||||
uint8 GetNextCarTuning();
|
||||
uint32 GetCarTuning();
|
||||
uint32 GetNextCarTuning();
|
||||
bool8 ChangeRadioChannel();
|
||||
void RecordRadioStats();
|
||||
void SetUpCorrectAmbienceTrack();
|
||||
float *GetListenTimeArray();
|
||||
uint32 GetRadioPosition(uint32 station);
|
||||
uint32 GetFavouriteRadioStation();
|
||||
void SetMalibuClubTrackPos(uint8 pos);
|
||||
void SetStripClubTrackPos(uint8 pos);
|
||||
bool8 CheckForMusicInterruptions();
|
||||
|
||||
void Enable();
|
||||
void Disable();
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cMusicManager, 0x95C);
|
||||
|
||||
extern cMusicManager MusicManager;
|
||||
extern bool8 g_bAnnouncementReadPosAlready; // we have a symbol of this so it was declared in .h
|
||||
float GetHeightScale();
|
||||
|
||||
@@ -22,8 +22,6 @@ struct tPoliceRadioZone {
|
||||
};
|
||||
|
||||
tPoliceRadioZone ZoneSfx[NUMAUDIOZONES];
|
||||
char SubZo2Label[8];
|
||||
char SubZo3Label[8];
|
||||
|
||||
uint32 g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
||||
int8 g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
|
||||
@@ -40,46 +38,22 @@ cAudioManager::InitialisePoliceRadioZones()
|
||||
strcpy(ZoneSfx[i].m_aName, name); \
|
||||
ZoneSfx[i].m_nSampleIndex = sample;
|
||||
|
||||
SETZONESFX(0, "HOSPI_2", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(1, "CONSTRU", SFX_POLICE_RADIO_FORT_STAUNTON);
|
||||
SETZONESFX(2, "STADIUM", SFX_POLICE_RADIO_ASPATRIA);
|
||||
SETZONESFX(3, "YAKUSA", SFX_POLICE_RADIO_TORRINGTON);
|
||||
SETZONESFX(4, "SHOPING", SFX_POLICE_RADIO_BEDFORD_POINT);
|
||||
SETZONESFX(5, "COM_EAS", SFX_POLICE_RADIO_NEWPORT);
|
||||
SETZONESFX(6, "PARK", SFX_POLICE_RADIO_BELLEVILLE_PARK);
|
||||
SETZONESFX(7, "UNIVERS", SFX_POLICE_RADIO_LIBERTY_CAMPUS);
|
||||
SETZONESFX(8, "BIG_DAM", SFX_POLICE_RADIO_COCHRANE_DAM);
|
||||
SETZONESFX(9, "SUB_IND", SFX_POLICE_RADIO_PIKE_CREEK);
|
||||
SETZONESFX(10, "SWANKS", SFX_POLICE_RADIO_CEDAR_GROVE);
|
||||
SETZONESFX(11, "PROJECT", SFX_POLICE_RADIO_WICHITA_GARDENS);
|
||||
SETZONESFX(12, "AIRPORT", SFX_POLICE_RADIO_FRANCIS_INTERNATIONAL_AIRPORT);
|
||||
SETZONESFX(13, "PORT_W", SFX_POLICE_RADIO_CALLAHAN_POINT);
|
||||
SETZONESFX(14, "PORT_S", SFX_POLICE_RADIO_ATLANTIC_QUAYS);
|
||||
SETZONESFX(15, "PORT_E", SFX_POLICE_RADIO_PORTLAND_HARBOUR);
|
||||
SETZONESFX(16, "PORT_I", SFX_POLICE_RADIO_TRENTON);
|
||||
SETZONESFX(17, "CHINA", SFX_POLICE_RADIO_CHINATOWN);
|
||||
SETZONESFX(18, "REDLIGH", SFX_POLICE_RADIO_RED_LIGHT_DISTRICT);
|
||||
SETZONESFX(19, "TOWERS", SFX_POLICE_RADIO_HEPBURN_HEIGHTS);
|
||||
SETZONESFX(20, "LITTLEI", SFX_POLICE_RADIO_SAINT_MARKS);
|
||||
SETZONESFX(21, "HARWOOD", SFX_POLICE_RADIO_HARWOOD);
|
||||
SETZONESFX(22, "EASTBAY", SFX_POLICE_RADIO_PORTLAND_BEACH);
|
||||
SETZONESFX(23, "S_VIEW", SFX_POLICE_RADIO_PORTLAND_STRAIGHTS);
|
||||
SETZONESFX(24, "CITYZON", SFX_POLICE_RADIO_LIBERTY_CITY);
|
||||
SETZONESFX(25, "IND_ZON", SFX_POLICE_RADIO_PORTLAND);
|
||||
SETZONESFX(26, "COM_ZON", SFX_POLICE_RADIO_STAUNTON_ISLAND);
|
||||
SETZONESFX(27, "SUB_ZON", SFX_POLICE_RADIO_SHORESIDE_VALE);
|
||||
SETZONESFX(28, "SUB_ZO2", SFX_POLICE_RADIO_SHORESIDE_VALE);
|
||||
SETZONESFX(29, "SUB_ZO3", SFX_POLICE_RADIO_SHORESIDE_VALE);
|
||||
SETZONESFX(30, "A", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(31, "A", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(32, "A", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(33, "A", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(34, "A", SFX_POLICE_RADIO_ROCKFORD);
|
||||
SETZONESFX(0, "VICE_C", SFX_SFX_POLICE_RADIO_VICE_CITY);
|
||||
SETZONESFX(1, "IND_ZON", SFX_SFX_POLICE_RADIO_VICE_CITY_BEACH);
|
||||
SETZONESFX(2, "COM_ZON", SFX_SFX_POLICE_RADIO_VICE_CITY_MAINLAND);
|
||||
SETZONESFX(3, "BEACH1", SFX_SFX_POLICE_RADIO_OCEAN_BEACH);
|
||||
SETZONESFX(4, "BEACH2", SFX_SFX_POLICE_RADIO_WASHINGTON_BEACH);
|
||||
SETZONESFX(5, "BEACH3", SFX_SFX_POLICE_RADIO_VICE_POINT);
|
||||
SETZONESFX(6, "GOLFC", SFX_SFX_POLICE_RADIO_LEAF_LINKS);
|
||||
SETZONESFX(7, "STARI", SFX_SFX_POLICE_RADIO_STARFISH_ISLAND);
|
||||
SETZONESFX(8, "DOCKS", SFX_SFX_POLICE_RADIO_VICEPORT);
|
||||
SETZONESFX(9, "HAVANA", SFX_SFX_POLICE_RADIO_LITTLE_HAVANA);
|
||||
SETZONESFX(10, "HAITI", SFX_SFX_POLICE_RADIO_LITTLE_HAITI);
|
||||
SETZONESFX(11, "PORNI", SFX_SFX_POLICE_RADIO_PRAWN_ISLAND);
|
||||
SETZONESFX(12, "DTOWN", SFX_SFX_POLICE_RADIO_DOWNTOWN);
|
||||
SETZONESFX(13, "A_PORT", SFX_SFX_POLICE_RADIO_ESCOBAR_INTERNATIONAL);
|
||||
|
||||
#undef SETZONESFX
|
||||
|
||||
strcpy(SubZo2Label, "SUB_ZO2");
|
||||
strcpy(SubZo3Label, "SUB_ZO3");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -88,8 +62,9 @@ cAudioManager::InitialisePoliceRadio()
|
||||
m_sPoliceRadioQueue.Reset();
|
||||
for (int32 i = 0; i < ARRAY_SIZE(m_aCrimes); i++)
|
||||
m_aCrimes[i].type = CRIME_NONE;
|
||||
|
||||
#if !defined(GTA_PS2) || defined(AUDIO_REVERB)
|
||||
SampleManager.SetChannelReverbFlag(CHANNEL_POLICE_RADIO, FALSE);
|
||||
#endif
|
||||
gSpecialSuspectLastSeenReport = FALSE;
|
||||
for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
|
||||
gMinTimeToNextReport[i] = m_FrameCounter;
|
||||
@@ -134,7 +109,7 @@ cAudioManager::DoPoliceRadioCrackle()
|
||||
SET_EMITTING_VOLUME(m_sQueueSample.m_nVolume);
|
||||
SET_LOOP_OFFSETS(SFX_POLICE_RADIO_CRACKLE)
|
||||
m_sQueueSample.m_bStatic = FALSE;
|
||||
m_sQueueSample.m_bReverb = FALSE;
|
||||
SET_SOUND_REVERB(FALSE);
|
||||
m_sQueueSample.m_nPan = 63;
|
||||
m_sQueueSample.m_nFramesToPlay = 3;
|
||||
SET_SOUND_REFLECTION(FALSE);
|
||||
@@ -144,34 +119,39 @@ cAudioManager::DoPoliceRadioCrackle()
|
||||
void
|
||||
cAudioManager::ServicePoliceRadio()
|
||||
{
|
||||
/*
|
||||
int32 wantedLevel = 0; // uninitialized variable
|
||||
static uint32 nLastSeen = 300;
|
||||
|
||||
if(!m_bIsInitialised) return;
|
||||
|
||||
if(!m_nUserPause) {
|
||||
if(!m_bIsPaused) {
|
||||
bool8 crimeReport = SetupCrimeReport();
|
||||
#ifdef FIX_BUGS // Crash at 0x5fe6ef
|
||||
if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
|
||||
return;
|
||||
#endif
|
||||
wantedLevel = FindPlayerPed()->m_pWanted->GetWantedLevel();
|
||||
if(!crimeReport) {
|
||||
if(wantedLevel != 0) {
|
||||
if(nLastSeen != 0) {
|
||||
CPlayerPed *playerPed = FindPlayerPed();
|
||||
if (playerPed) {
|
||||
wantedLevel = playerPed->m_pWanted->GetWantedLevel();
|
||||
if (!crimeReport) {
|
||||
if (wantedLevel != 0) {
|
||||
if (nLastSeen != 0)
|
||||
#ifdef FIX_BUGS
|
||||
nLastSeen -= CTimer::GetLogicalFramesPassed();
|
||||
nLastSeen -= CTimer::GetLogicalFramesPassed();
|
||||
#else
|
||||
--nLastSeen;
|
||||
nLastSeen--;
|
||||
#endif
|
||||
} else {
|
||||
nLastSeen = m_anRandomTable[1] % 1000 + 2000;
|
||||
SetupSuspectLastSeenReport();
|
||||
else {
|
||||
nLastSeen = m_anRandomTable[1] % 1000 + 2000;
|
||||
SetupSuspectLastSeenReport();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ServicePoliceRadioChannel(wantedLevel);
|
||||
*/
|
||||
}
|
||||
|
||||
void
|
||||
@@ -179,23 +159,23 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||
{
|
||||
bool8 processed = FALSE;
|
||||
uint32 sample;
|
||||
int32 freq;
|
||||
uint32 freq;
|
||||
|
||||
static int cWait = 0;
|
||||
static bool8 bChannelOpen = FALSE;
|
||||
static uint8 bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_STOPPED;
|
||||
static int32 PoliceChannelFreq = 5500;
|
||||
static uint32 PoliceChannelFreq = 22050;
|
||||
|
||||
if (!m_bIsInitialised) return;
|
||||
|
||||
if (m_nUserPause) {
|
||||
if (m_bIsPaused) {
|
||||
if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO);
|
||||
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING &&
|
||||
if (g_nMissionAudioSfx != NO_SAMPLE && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING &&
|
||||
SampleManager.IsStreamPlaying(1)) {
|
||||
SampleManager.PauseStream(TRUE, 1);
|
||||
}
|
||||
} else {
|
||||
if (m_nPreviousUserPause && g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES &&
|
||||
if (m_bWasPaused && g_nMissionAudioSfx != NO_SAMPLE &&
|
||||
bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING) {
|
||||
SampleManager.PauseStream(FALSE, 1);
|
||||
}
|
||||
@@ -208,7 +188,7 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && !bChannelOpen) {
|
||||
if (g_nMissionAudioSfx != NO_SAMPLE && !bChannelOpen) {
|
||||
if (g_nMissionAudioPlayingStatus != PLAY_STATUS_STOPPED) {
|
||||
if (g_nMissionAudioPlayingStatus == PLAY_STATUS_PLAYING && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_STOPPED &&
|
||||
SampleManager.IsStreamPlaying(1)) {
|
||||
@@ -220,7 +200,7 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||
} else {
|
||||
bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_FINISHED;
|
||||
g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
|
||||
g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
||||
g_nMissionAudioSfx = NO_SAMPLE;
|
||||
cWait = 30;
|
||||
}
|
||||
return;
|
||||
@@ -235,25 +215,23 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||
}
|
||||
}
|
||||
if (bChannelOpen) DoPoliceRadioCrackle();
|
||||
if ((g_nMissionAudioSfx == TOTAL_AUDIO_SAMPLES || g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) &&
|
||||
if ((g_nMissionAudioSfx == NO_SAMPLE || g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) &&
|
||||
!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO) && m_sPoliceRadioQueue.m_nSamplesInQueue != 0) {
|
||||
sample = m_sPoliceRadioQueue.Remove();
|
||||
if (wantedLevel == 0) {
|
||||
if (gSpecialSuspectLastSeenReport) {
|
||||
gSpecialSuspectLastSeenReport = FALSE;
|
||||
} else if (((sample >= SFX_POLICE_RADIO_MESSAGE_NOISE_1) && (sample <= SFX_POLICE_RADIO_MESSAGE_NOISE_3)) || sample == TOTAL_AUDIO_SAMPLES) {
|
||||
} else if (sample == SFX_POLICE_RADIO_MESSAGE_NOISE_1) {
|
||||
bChannelOpen = FALSE;
|
||||
processed = TRUE;
|
||||
}
|
||||
}
|
||||
if (sample == TOTAL_AUDIO_SAMPLES) {
|
||||
if (sample == NO_SAMPLE) {
|
||||
if (!processed) cWait = 30;
|
||||
} else {
|
||||
SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, sample, SFX_BANK_0);
|
||||
switch (sample) {
|
||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_1:
|
||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_2:
|
||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_3:
|
||||
freq = m_anRandomTable[4] % 2000 + 10025;
|
||||
bChannelOpen = bChannelOpen == FALSE;
|
||||
break;
|
||||
@@ -267,8 +245,8 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||
#endif
|
||||
SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, 100);
|
||||
SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63);
|
||||
#ifndef GTA_PS2
|
||||
SampleManager.SetChannelLoopCount(CHANNEL_POLICE_RADIO, 1);
|
||||
#ifndef GTA_PS2
|
||||
SampleManager.SetChannelLoopPoints(CHANNEL_POLICE_RADIO, 0, -1);
|
||||
#endif
|
||||
SampleManager.StartChannel(CHANNEL_POLICE_RADIO);
|
||||
@@ -312,49 +290,54 @@ cAudioManager::SetupCrimeReport()
|
||||
for (int j = 0; j < NUMAUDIOZONES; j++) {
|
||||
if (strcmp(zone->name, ZoneSfx[j].m_aName) == 0) {
|
||||
sampleIndex = ZoneSfx[j].m_nSampleIndex;
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_WEVE_GOT);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[1] % 2 + SFX_A_10_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_A_10);
|
||||
switch (m_aCrimes[i].type) {
|
||||
case CRIME_PED_BURNED: m_aCrimes[i].type = CRIME_HIT_PED; break;
|
||||
case CRIME_COP_BURNED: m_aCrimes[i].type = CRIME_HIT_COP; break;
|
||||
case CRIME_PED_BURNED:
|
||||
case CRIME_HIT_PED_NASTYWEAPON:
|
||||
m_aCrimes[i].type = CRIME_HIT_PED;
|
||||
break;
|
||||
case CRIME_COP_BURNED:
|
||||
case CRIME_HIT_COP_NASTYWEAPON:
|
||||
m_aCrimes[i].type = CRIME_HIT_COP;
|
||||
break;
|
||||
case CRIME_VEHICLE_BURNED: m_aCrimes[i].type = CRIME_STEAL_CAR; break;
|
||||
case CRIME_DESTROYED_CESSNA: m_aCrimes[i].type = CRIME_SHOOT_HELI; break;
|
||||
case CRIME_EXPLOSION: m_aCrimes[i].type = CRIME_STEAL_CAR; break; // huh?
|
||||
default: break;
|
||||
}
|
||||
m_sPoliceRadioQueue.Add(m_aCrimes[i].type + SFX_CRIME_1 - 1);
|
||||
#ifdef FIX_BUGS
|
||||
m_sPoliceRadioQueue.Add(m_aCrimes[i].type + SFX_SFX_CRIME_1 - 1);
|
||||
#else
|
||||
m_sPoliceRadioQueue.Add(m_aCrimes[i].type + SFX_SFX_CRIME_1);
|
||||
#endif
|
||||
m_sPoliceRadioQueue.Add(SFX_IN);
|
||||
if (sampleIndex == SFX_POLICE_RADIO_SHORESIDE_VALE &&
|
||||
(strcmp(zone->name, SubZo2Label) == 0 || strcmp(zone->name, SubZo3Label) == 0)) {
|
||||
rangeX = zone->maxx - zone->minx;
|
||||
rangeY = zone->maxy - zone->miny;
|
||||
halfX = 0.5f * rangeX + zone->minx;
|
||||
halfY = 0.5f * rangeY + zone->miny;
|
||||
quarterX = 0.25f * rangeX;
|
||||
quarterY = 0.25f * rangeY;
|
||||
|
||||
if (m_aCrimes[i].position.y > halfY + quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
} else {
|
||||
rangeX = zone->maxx - zone->minx;
|
||||
rangeY = zone->maxy - zone->miny;
|
||||
halfX = 0.5f * rangeX + zone->minx;
|
||||
halfY = 0.5f * rangeY + zone->miny;
|
||||
quarterX = 0.25f * rangeX;
|
||||
quarterY = 0.25f * rangeY;
|
||||
|
||||
if (m_aCrimes[i].position.y > halfY + quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||
processed = TRUE;
|
||||
} else if (m_aCrimes[i].position.y < halfY - quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||
processed = TRUE;
|
||||
}
|
||||
|
||||
if (m_aCrimes[i].position.x > halfX + quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
else if (m_aCrimes[i].position.x < halfX - quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_WEST);
|
||||
else if (!processed)
|
||||
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
||||
|
||||
m_sPoliceRadioQueue.Add(sampleIndex);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||
processed = TRUE;
|
||||
} else if (m_aCrimes[i].position.y < halfY - quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||
processed = TRUE;
|
||||
}
|
||||
|
||||
if (m_aCrimes[i].position.x > halfX + quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
else if (m_aCrimes[i].position.x < halfX - quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_WEST);
|
||||
else if (!processed)
|
||||
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
||||
|
||||
m_sPoliceRadioQueue.Add(sampleIndex);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(NO_SAMPLE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -364,173 +347,117 @@ cAudioManager::SetupCrimeReport()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Const uint32 gCarColourTable[][3] = {
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLACK, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_WHITE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_BRIGHT, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_SFX_POLICE_RADIO_BLUE, SFX_SFX_POLICE_RADIO_GREY},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_RED, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{NO_SAMPLE, SFX_SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
|
||||
{SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE}
|
||||
};
|
||||
|
||||
void
|
||||
cAudioManager::SetupSuspectLastSeenReport()
|
||||
{
|
||||
CVehicle *veh;
|
||||
uint8 color1;
|
||||
int32 main_color;
|
||||
int32 sample;
|
||||
uint32 main_color;
|
||||
uint32 sample;
|
||||
|
||||
int32 color_pre_modifier;
|
||||
int32 color_post_modifier;
|
||||
|
||||
const int32 gCarColourTable[][3] = {
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLACK, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_WHITE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_BRIGHT, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_BLUE, SFX_POLICE_RADIO_GREY},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, SFX_POLICE_RADIO_BLUE},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, SFX_POLICE_RADIO_GREY},
|
||||
#else
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
#ifdef FIX_BUGS
|
||||
{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
#else
|
||||
{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
|
||||
#endif
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
|
||||
{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES}
|
||||
};
|
||||
uint32 color_pre_modifier;
|
||||
uint32 color_post_modifier;
|
||||
|
||||
if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) {
|
||||
veh = FindPlayerVehicle();
|
||||
veh = FindVehicleOfPlayer();
|
||||
if (veh != nil) {
|
||||
if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 9) {
|
||||
color1 = veh->m_currentColour1;
|
||||
@@ -541,136 +468,188 @@ cAudioManager::SetupSuspectLastSeenReport()
|
||||
color_pre_modifier = gCarColourTable[color1][0];
|
||||
color_post_modifier = gCarColourTable[color1][2];
|
||||
switch (veh->GetModelIndex()) {
|
||||
#ifdef FIX_BUGS
|
||||
case MI_COLUMB:
|
||||
main_color = SFX_POLICE_RADIO_BLUE;
|
||||
color_pre_modifier = color_post_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
#endif
|
||||
case MI_LANDSTAL:
|
||||
case MI_BLISTA: sample = SFX_POLICE_RADIO_CRUISER; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_YARDIE:
|
||||
color_pre_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
main_color = SFX_POLICE_RADIO_RED;
|
||||
color_post_modifier = SFX_POLICE_RADIO_YELLOW;
|
||||
sample = SFX_POLICE_RADIO_CONVERTIBLE; break;
|
||||
case MI_DIABLOS:
|
||||
main_color = SFX_POLICE_RADIO_BLACK;
|
||||
#endif
|
||||
case MI_PATRIOT:
|
||||
case MI_RANCHER:
|
||||
case MI_FBIRANCH:
|
||||
case MI_SANDKING:
|
||||
sample = SFX_SFX_POLICE_RADIO_OFFROAD;
|
||||
break;
|
||||
case MI_IDAHO:
|
||||
case MI_STALLION: sample = SFX_POLICE_RADIO_CONVERTIBLE; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_YAKUZA:
|
||||
color_pre_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
main_color = SFX_POLICE_RADIO_SILVER;
|
||||
color_post_modifier = SFX_POLICE_RADIO_RED;
|
||||
#endif
|
||||
case MI_MANANA:
|
||||
case MI_ESPERANT:
|
||||
case MI_CUBAN:
|
||||
case MI_STALLION:
|
||||
case MI_SABRE:
|
||||
case MI_SABRETUR:
|
||||
case MI_VIRGO:
|
||||
case MI_BLISTAC:
|
||||
sample = SFX_SFX_POLICE_RADIO_TUDOOR;
|
||||
break;
|
||||
case MI_STINGER:
|
||||
case MI_INFERNUS:
|
||||
case MI_CHEETAH:
|
||||
case MI_BANSHEE: sample = SFX_POLICE_RADIO_SPORTS_CAR; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_MAFIA:
|
||||
color_pre_modifier = color_post_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
main_color = SFX_POLICE_RADIO_GREY;
|
||||
case MI_KURUMA:
|
||||
#endif
|
||||
case MI_PEREN:
|
||||
case MI_SENTINEL:
|
||||
case MI_FBICAR: sample = SFX_POLICE_RADIO_SALOON; break;
|
||||
case MI_PATRIOT:
|
||||
case MI_BOBCAT: sample = SFX_POLICE_RADIO_PICKUP; break;
|
||||
case MI_FIRETRUCK: sample = SFX_POLICE_RADIO_FIRE_TRUCK; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_BANSHEE:
|
||||
case MI_PHEONIX:
|
||||
case MI_COMET:
|
||||
case MI_DELUXO:
|
||||
case MI_HOTRING:
|
||||
sample = SFX_SFX_POLICE_RADIO_SPORTS_CAR;
|
||||
break;
|
||||
case MI_LINERUN:
|
||||
case MI_FLATBED:
|
||||
#endif
|
||||
sample = SFX_SFX_POLICE_RADIO_RIG;
|
||||
break;
|
||||
case MI_PEREN:
|
||||
case MI_REGINA:
|
||||
sample = SFX_SFX_POLICE_RADIO_STATION_WAGON;
|
||||
break;
|
||||
case MI_SENTINEL:
|
||||
case MI_FBICAR:
|
||||
case MI_WASHING:
|
||||
case MI_SENTXS:
|
||||
case MI_ADMIRAL:
|
||||
case MI_GLENDALE:
|
||||
case MI_OCEANIC:
|
||||
case MI_HERMES:
|
||||
case MI_GREENWOO:
|
||||
sample = SFX_SFX_POLICE_RADIO_SEDAN;
|
||||
break;
|
||||
case MI_RIO:
|
||||
sample = SFX_SFX_POLICE_RADIO_CRUISER;
|
||||
break;
|
||||
case MI_FIRETRUCK:
|
||||
sample = SFX_SFX_POLICE_RADIO_FIRE_TRUCK;
|
||||
break;
|
||||
case MI_TRASH:
|
||||
case MI_BARRACKS: sample = SFX_POLICE_RADIO_TRUCK; break;
|
||||
case MI_STRETCH: sample = SFX_POLICE_RADIO_LIMO; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_CORPSE:
|
||||
#endif
|
||||
case MI_MANANA:
|
||||
case MI_ESPERANT: sample = SFX_POLICE_RADIO_2_DOOR; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_HOODS:
|
||||
color_pre_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
main_color = SFX_POLICE_RADIO_BLUE;
|
||||
color_post_modifier = SFX_POLICE_RADIO_GREEN;
|
||||
case MI_BELLYUP:
|
||||
case MI_YANKEE:
|
||||
case MI_TOYZ:
|
||||
case MI_MRWONGS:
|
||||
case MI_PANLANT:
|
||||
#endif
|
||||
sample = SFX_SFX_POLICE_RADIO_GARBAGE_TRUCK;
|
||||
break;
|
||||
case MI_STRETCH:
|
||||
case MI_LOVEFIST:
|
||||
sample = SFX_SFX_POLICE_RADIO_STRETCH;
|
||||
break;
|
||||
case MI_VOODOO:
|
||||
sample = SFX_SFX_POLICE_RADIO_LOWRIDER;
|
||||
break;
|
||||
case MI_PONY:
|
||||
case MI_MULE:
|
||||
case MI_MOONBEAM:
|
||||
case MI_ENFORCER:
|
||||
case MI_SECURICA:
|
||||
case MI_RUMPO: sample = SFX_POLICE_RADIO_VAN; break;
|
||||
case MI_AMBULAN: sample = SFX_POLICE_RADIO_AMBULANCE; break;
|
||||
case MI_RUMPO:
|
||||
case MI_GANGBUR:
|
||||
case MI_YANKEE:
|
||||
case MI_TOPFUN:
|
||||
case MI_BURRITO:
|
||||
case MI_SPAND:
|
||||
sample = SFX_SFX_POLICE_RADIO_VAN;
|
||||
break;
|
||||
case MI_MULE:
|
||||
case MI_BARRACKS:
|
||||
case MI_PACKER:
|
||||
case MI_FLATBED:
|
||||
sample = SFX_SFX_POLICE_RADIO_TRUCK;
|
||||
break;
|
||||
case MI_AMBULAN:
|
||||
sample = SFX_SFX_POLICE_RADIO_AMBULANCE;
|
||||
break;
|
||||
case MI_TAXI:
|
||||
case MI_CABBIE:
|
||||
case MI_BORGNINE: sample = SFX_POLICE_RADIO_TAXI; break;
|
||||
case MI_BORGNINE:
|
||||
sample = SFX_SFX_POLICE_RADIO_TAXI;
|
||||
break;
|
||||
case MI_BOBCAT:
|
||||
case MI_WALTON:
|
||||
sample = SFX_SFX_POLICE_RADIO_PICKUP;
|
||||
break;
|
||||
case MI_MRWHOOP:
|
||||
sample = SFX_POLICE_RADIO_ICE_CREAM_VAN;
|
||||
sample = SFX_SFX_POLICE_RADIO_ICE_CREAM_VAN;
|
||||
break;
|
||||
case MI_BFINJECT: sample = SFX_POLICE_RADIO_BUGGY; break;
|
||||
case MI_POLICE: sample = SFX_POLICE_RADIO_POLICE_CAR; break;
|
||||
#ifdef FIX_BUGS
|
||||
case MI_BFINJECT:
|
||||
sample = SFX_SFX_POLICE_RADIO_BUGGY;
|
||||
break;
|
||||
case MI_HUNTER:
|
||||
case MI_CHOPPER:
|
||||
case MI_SEASPAR:
|
||||
case MI_SPARROW:
|
||||
case MI_MAVERICK:
|
||||
case MI_VCNMAV:
|
||||
case MI_POLMAV:
|
||||
sample = SFX_SFX_POLICE_RADIO_HELICOPTER;
|
||||
break;
|
||||
case MI_POLICE:
|
||||
sample = SFX_SFX_POLICE_RADIO_POLICE_CAR;
|
||||
break;
|
||||
case MI_ENFORCER:
|
||||
sample = SFX_SFX_POLICE_RADIO_SWAT_VAN;
|
||||
break;
|
||||
case MI_PREDATOR:
|
||||
case MI_SQUALO:
|
||||
case MI_SPEEDER:
|
||||
case MI_REEFER:
|
||||
case MI_GHOST:
|
||||
#endif
|
||||
case MI_PREDATOR: sample = SFX_POLICE_RADIO_BOAT; break;
|
||||
case MI_BUS:
|
||||
case MI_COACH: sample = SFX_POLICE_RADIO_BUS; break;
|
||||
case MI_RHINO:
|
||||
sample = SFX_POLICE_RADIO_TANK;
|
||||
main_color = TOTAL_AUDIO_SAMPLES;
|
||||
color_post_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
sample = SFX_SFX_POLICE_RADIO_SPEEDBOAT;
|
||||
break;
|
||||
case MI_TRAIN:
|
||||
sample = SFX_POLICE_RADIO_SUBWAY_CAR;
|
||||
main_color = TOTAL_AUDIO_SAMPLES;
|
||||
color_post_modifier = TOTAL_AUDIO_SAMPLES;
|
||||
|
||||
case MI_BUS:
|
||||
sample = SFX_SFX_POLICE_RADIO_BUS;
|
||||
break;
|
||||
case MI_RHINO:
|
||||
sample = SFX_SFX_POLICE_RADIO_TANK;
|
||||
break;
|
||||
case MI_ANGEL:
|
||||
case MI_PCJ600:
|
||||
case MI_FREEWAY:
|
||||
case MI_SANCHEZ:
|
||||
sample = SFX_SFX_POLICE_RADIO_MOTOBIKE;
|
||||
break;
|
||||
case MI_COACH:
|
||||
sample = SFX_SFX_POLICE_RADIO_COACH;
|
||||
break;
|
||||
case MI_HEARSE:
|
||||
sample = SFX_SFX_POLICE_RADIO_HEARSE;
|
||||
break;
|
||||
case MI_PIZZABOY:
|
||||
case MI_FAGGIO:
|
||||
sample = SFX_SFX_POLICE_RADIO_MOPED;
|
||||
break;
|
||||
case MI_DEADDODO:
|
||||
case MI_SKIMMER:
|
||||
sample = SFX_SFX_POLICE_RADIO_PLANE;
|
||||
break;
|
||||
case MI_REEFER:
|
||||
case MI_TROPIC:
|
||||
case MI_COASTG:
|
||||
case MI_MARQUIS:
|
||||
case MI_JETMAX:
|
||||
sample = SFX_SFX_POLICE_RADIO_BOAT;
|
||||
break;
|
||||
case MI_CADDY:
|
||||
sample = SFX_SFX_POLICE_RADIO_GOLF_CART;
|
||||
break;
|
||||
case MI_DINGHY:
|
||||
sample = SFX_SFX_POLICE_RADIO_DINGHY;
|
||||
break;
|
||||
default:
|
||||
debug("\n *** UNKNOWN CAR MODEL INDEX %d *** ", veh->GetModelIndex());
|
||||
//debug("\n *** UNKNOWN CAR MODEL INDEX %d *** ", veh->GetModelIndex());
|
||||
return;
|
||||
}
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
|
||||
if (m_anRandomTable[3] % 2)
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_LAST_SEEN);
|
||||
#ifdef FIX_BUGS
|
||||
if (main_color == SFX_POLICE_RADIO_ORANGE && color_pre_modifier == TOTAL_AUDIO_SAMPLES)
|
||||
#else
|
||||
if (main_color == SFX_POLICE_RADIO_ORANGE)
|
||||
#endif
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_AN);
|
||||
else
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_A);
|
||||
if (color_pre_modifier != TOTAL_AUDIO_SAMPLES)
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_A);
|
||||
if (color_pre_modifier != NO_SAMPLE)
|
||||
m_sPoliceRadioQueue.Add(color_pre_modifier);
|
||||
if (main_color != TOTAL_AUDIO_SAMPLES)
|
||||
if (main_color != NO_SAMPLE)
|
||||
m_sPoliceRadioQueue.Add(main_color);
|
||||
if (color_post_modifier != TOTAL_AUDIO_SAMPLES)
|
||||
if (color_post_modifier != NO_SAMPLE)
|
||||
m_sPoliceRadioQueue.Add(color_post_modifier);
|
||||
m_sPoliceRadioQueue.Add(sample);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(NO_SAMPLE);
|
||||
}
|
||||
}
|
||||
} else if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 4) {
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_ON_FOOT);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(NO_SAMPLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -688,9 +667,8 @@ cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
|
||||
m_aCrimes[i].timer = 0;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
lastCrime = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastCrime < ARRAY_SIZE(m_aCrimes)) {
|
||||
@@ -713,8 +691,8 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
||||
float halfY;
|
||||
float quarterX;
|
||||
float quarterY;
|
||||
int32 sample;
|
||||
bool8 processed = false;
|
||||
uint32 sample;
|
||||
bool8 processed = FALSE;
|
||||
CVector vec = CVector(x, y, z);
|
||||
|
||||
if (!m_bIsInitialised) return;
|
||||
@@ -726,41 +704,34 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
||||
for (int i = 0; i < NUMAUDIOZONES; i++) {
|
||||
if (strcmp(zone->name, ZoneSfx[i].m_aName) == 0) {
|
||||
sample = ZoneSfx[i].m_nSampleIndex;
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_LAST_SEEN);
|
||||
m_sPoliceRadioQueue.Add(SFX_IN);
|
||||
if (sample == SFX_POLICE_RADIO_SHORESIDE_VALE &&
|
||||
(strcmp(zone->name, SubZo2Label) == 0 ||
|
||||
strcmp(zone->name, SubZo3Label) == 0)) {
|
||||
rangeX = zone->maxx - zone->minx;
|
||||
rangeY = zone->maxy - zone->miny;
|
||||
halfX = 0.5f * rangeX + zone->minx;
|
||||
halfY = 0.5f * rangeY + zone->miny;
|
||||
quarterX = 0.25f * rangeX;
|
||||
quarterY = 0.25f * rangeY;
|
||||
|
||||
if (vec.y > halfY + quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
} else {
|
||||
rangeX = zone->maxx - zone->minx;
|
||||
rangeY = zone->maxy - zone->miny;
|
||||
halfX = 0.5f * rangeX + zone->minx;
|
||||
halfY = 0.5f * rangeY + zone->miny;
|
||||
quarterX = 0.25f * rangeX;
|
||||
quarterY = 0.25f * rangeY;
|
||||
|
||||
if (vec.y > halfY + quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||
processed = TRUE;
|
||||
} else if (vec.y < halfY - quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||
processed = TRUE;
|
||||
}
|
||||
|
||||
if (vec.x > halfX + quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
else if (vec.x < halfX - quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_WEST);
|
||||
else if (!processed)
|
||||
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
||||
processed = TRUE;
|
||||
} else if (vec.y < halfY - quarterY) {
|
||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||
processed = TRUE;
|
||||
}
|
||||
|
||||
if (vec.x > halfX + quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||
else if (vec.x < halfX - quarterX)
|
||||
m_sPoliceRadioQueue.Add(SFX_WEST);
|
||||
else if (!processed)
|
||||
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
||||
m_sPoliceRadioQueue.Add(sample);
|
||||
m_sPoliceRadioQueue.Add(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||
m_sPoliceRadioQueue.Add(NO_SAMPLE);
|
||||
gSpecialSuspectLastSeenReport = TRUE;
|
||||
break;
|
||||
}
|
||||
@@ -774,7 +745,7 @@ cAudioManager::AgeCrimes()
|
||||
{
|
||||
for (uint8 i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
|
||||
if (m_aCrimes[i].type != CRIME_NONE) {
|
||||
if (++m_aCrimes[i].timer > 1500) m_aCrimes[i].type = CRIME_NONE;
|
||||
if (++m_aCrimes[i].timer > 1200) m_aCrimes[i].type = CRIME_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
uint32 Remove()
|
||||
{
|
||||
if (m_nSamplesInQueue != 0) {
|
||||
@@ -59,8 +59,9 @@ public:
|
||||
m_nRemoveOffset = (m_nRemoveOffset + 1) % POLICE_RADIO_QUEUE_MAX_SAMPLES;
|
||||
return sample;
|
||||
}
|
||||
return TOTAL_AUDIO_SAMPLES;
|
||||
return NO_SAMPLE;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cPoliceRadioQueue, 244);
|
||||
|
||||
@@ -2,19 +2,20 @@
|
||||
|
||||
enum eRadioStation
|
||||
{
|
||||
HEAD_RADIO,
|
||||
DOUBLE_CLEF,
|
||||
JAH_RADIO,
|
||||
RISE_FM,
|
||||
LIPS_106,
|
||||
GAME_FM,
|
||||
MSX_FM,
|
||||
FLASHBACK,
|
||||
CHATTERBOX,
|
||||
WILDSTYLE,
|
||||
FLASH_FM,
|
||||
KCHAT,
|
||||
FEVER,
|
||||
V_ROCK,
|
||||
VCPR,
|
||||
RADIO_ESPANTOSO,
|
||||
EMOTION,
|
||||
WAVE,
|
||||
USERTRACK,
|
||||
POLICE_RADIO = 10,
|
||||
NUM_RADIOS = 10,
|
||||
RADIO_OFF = 11,
|
||||
NUM_RADIOS = 11,
|
||||
POLICE_RADIO = 11,
|
||||
RADIO_OFF = 10,
|
||||
//TAXI_RADIO,
|
||||
};
|
||||
|
||||
enum eMusicMode
|
||||
@@ -26,204 +27,83 @@ enum eMusicMode
|
||||
MUSICMODE_DISABLED,
|
||||
};
|
||||
|
||||
enum ePlayerMood
|
||||
{
|
||||
PLAYER_MOOD_CALM = 0,
|
||||
PLAYER_MOOD_PISSED_OFF,
|
||||
PLAYER_MOOD_ANGRY,
|
||||
PLAYER_MOOD_WISECRACKING,
|
||||
MAX_PLAYER_MOODS,
|
||||
};
|
||||
|
||||
enum eStreamedSounds
|
||||
{
|
||||
STREAMED_SOUND_RADIO_HEAD,
|
||||
STREAMED_SOUND_RADIO_CLASSIC,
|
||||
STREAMED_SOUND_RADIO_DOUBLE,
|
||||
STREAMED_SOUND_RADIO_KJAH,
|
||||
STREAMED_SOUND_RADIO_RISE,
|
||||
STREAMED_SOUND_RADIO_LIPS,
|
||||
STREAMED_SOUND_RADIO_GAME,
|
||||
STREAMED_SOUND_RADIO_MUNDO,
|
||||
STREAMED_SOUND_RADIO_MSX,
|
||||
STREAMED_SOUND_RADIO_FLASH,
|
||||
STREAMED_SOUND_RADIO_CHAT,
|
||||
STREAMED_SOUND_RADIO_LCJ,
|
||||
STREAMED_SOUND_RADIO_LCFR,
|
||||
STREAMED_SOUND_RADIO_MP3_PLAYER,
|
||||
STREAMED_SOUND_RADIO_POLICE,
|
||||
STREAMED_SOUND_CITY_AMBIENT,
|
||||
STREAMED_SOUND_WATER_AMBIENT,
|
||||
STREAMED_SOUND_ANNOUNCE_COMMERCIAL_OPEN,
|
||||
STREAMED_SOUND_ANNOUNCE_SUBURBAN_OPEN,
|
||||
STREAMED_SOUND_NEWS_INTRO,
|
||||
STREAMED_SOUND_BANK_INTRO,
|
||||
STREAMED_SOUND_CUTSCENE_LUIGI1_LG,
|
||||
STREAMED_SOUND_CUTSCENE_LUIGI2_DSB,
|
||||
STREAMED_SOUND_CUTSCENE_LUIGI3_DM,
|
||||
STREAMED_SOUND_CUTSCENE_LUIGI4_PAP,
|
||||
STREAMED_SOUND_CUTSCENE_LUIGI5_TFB,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY0_DM2,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY1_LFL,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY2_KCL,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY3_VH,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY4_ETH,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY5_DST,
|
||||
STREAMED_SOUND_CUTSCENE_JOEY6_TBJ,
|
||||
STREAMED_SOUND_CUTSCENE_TONI1_TOL,
|
||||
STREAMED_SOUND_CUTSCENE_TONI2_TPU,
|
||||
STREAMED_SOUND_CUTSCENE_TONI3_MAS,
|
||||
STREAMED_SOUND_CUTSCENE_TONI4_TAT,
|
||||
STREAMED_SOUND_CUTSCENE_TONI5_BF,
|
||||
STREAMED_SOUND_CUTSCENE_SAL0_MAS,
|
||||
STREAMED_SOUND_CUTSCENE_SAL1_PF,
|
||||
STREAMED_SOUND_CUTSCENE_SAL2_CTG,
|
||||
STREAMED_SOUND_CUTSCENE_SAL3_RTC,
|
||||
STREAMED_SOUND_CUTSCENE_SAL5_LRQ,
|
||||
STREAMED_SOUND_CUTSCENE_SAL4_BDBA,
|
||||
STREAMED_SOUND_CUTSCENE_SAL4_BDBB,
|
||||
STREAMED_SOUND_CUTSCENE_SAL2_CTG2,
|
||||
STREAMED_SOUND_CUTSCENE_SAL4_BDBD,
|
||||
STREAMED_SOUND_CUTSCENE_SAL5_LRQB,
|
||||
STREAMED_SOUND_CUTSCENE_SAL5_LRQC,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA_2_PP,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA_3_SS,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI1_KBO,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI2_GIS,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI3_DS,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI4_SHI,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI5_SD,
|
||||
STREAMED_SOUND_CUTSCENE_RAY0_PDR2,
|
||||
STREAMED_SOUND_CUTSCENE_RAY1_SW,
|
||||
STREAMED_SOUND_CUTSCENE_RAY2_AP,
|
||||
STREAMED_SOUND_CUTSCENE_RAY3_ED,
|
||||
STREAMED_SOUND_CUTSCENE_RAY4_GF,
|
||||
STREAMED_SOUND_CUTSCENE_RAY5_PB,
|
||||
STREAMED_SOUND_CUTSCENE_RAY6_MM,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD1_STOG,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD2_KK,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD3_ADO,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD5_ES,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD7_MLD,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD4_GTA,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD4_GTA2,
|
||||
STREAMED_SOUND_CUTSCENE_DONALD6_STS,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA7_ETG,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA8_PS,
|
||||
STREAMED_SOUND_CUTSCENE_ASUKA9_ASD,
|
||||
STREAMED_SOUND_CUTSCENE_KENJI4_SHI2,
|
||||
STREAMED_SOUND_CUTSCENE_CATALINA1_TEX,
|
||||
STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1,
|
||||
STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2,
|
||||
STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3,
|
||||
STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4,
|
||||
STREAMED_SOUND_CUTSCENE_YARDIE_PH1,
|
||||
STREAMED_SOUND_CUTSCENE_YARDIE_PH2,
|
||||
STREAMED_SOUND_CUTSCENE_YARDIE_PH3,
|
||||
STREAMED_SOUND_CUTSCENE_YARDIE_PH4,
|
||||
STREAMED_SOUND_CUTSCENE_HOODS_PH1,
|
||||
STREAMED_SOUND_CUTSCENE_HOODS_PH2,
|
||||
STREAMED_SOUND_CUTSCENE_HOODS_PH3,
|
||||
STREAMED_SOUND_CUTSCENE_HOODS_PH4,
|
||||
STREAMED_SOUND_CUTSCENE_HOODS_PH5,
|
||||
STREAMED_SOUND_CUTSCENE_MARTY_PH1,
|
||||
STREAMED_SOUND_CUTSCENE_MARTY_PH2,
|
||||
STREAMED_SOUND_CUTSCENE_MARTY_PH3,
|
||||
STREAMED_SOUND_CUTSCENE_MARTY_PH4,
|
||||
STREAMED_SOUND_SAWMILL,
|
||||
STREAMED_SOUND_HAVANA_CITY_AMBIENT, // CITY
|
||||
STREAMED_SOUND_HAVANA_WATER_AMBIENT, // WATER
|
||||
STREAMED_SOUND_HAVANA_BEACH_AMBIENT, // WATER
|
||||
STREAMED_SOUND_MALL_AMBIENT, // CITY
|
||||
STREAMED_SOUND_STRIPCLUB_AMBIENT, // CITY
|
||||
STREAMED_SOUND_MALIBU_AMBIENT, // CITY
|
||||
STREAMED_SOUND_HOTEL_AMBIENT, // CITY
|
||||
STREAMED_SOUND_DIRTRING_AMBIENT, // CITY
|
||||
STREAMED_SOUND_LAW4RIOT_AMBIENT, // CITY
|
||||
STREAMED_SOUND_AMBSIL_AMBIENT, // CITY
|
||||
STREAMED_SOUND_RADIO_POLICE,
|
||||
STREAMED_SOUND_RADIO_TAXI,
|
||||
STREAMED_SOUND_NEWS_A,
|
||||
STREAMED_SOUND_NEWS_B,
|
||||
STREAMED_SOUND_NEWS_C,
|
||||
STREAMED_SOUND_NEWS_D,
|
||||
STREAMED_SOUND_NEWS_E,
|
||||
STREAMED_SOUND_NEWS_F,
|
||||
STREAMED_SOUND_NEWS_G,
|
||||
STREAMED_SOUND_NEWS_H,
|
||||
STREAMED_SOUND_NEWS_I,
|
||||
STREAMED_SOUND_NEWS_J,
|
||||
STREAMED_SOUND_NEWS_K,
|
||||
STREAMED_SOUND_NEWS_L,
|
||||
STREAMED_SOUND_NEWS_M,
|
||||
STREAMED_SOUND_NEWS_N,
|
||||
STREAMED_SOUND_CUTSCENE_BIKER,
|
||||
STREAMED_SOUND_CUTSCENE_BONEVOY,
|
||||
STREAMED_SOUND_CUTSCENE_CAMPAIN,
|
||||
STREAMED_SOUND_CUTSCENE_CASHCHP,
|
||||
STREAMED_SOUND_CUTSCENE_CONTBAN,
|
||||
STREAMED_SOUND_CUTSCENE_CRAZY69,
|
||||
STREAMED_SOUND_CUTSCENE_CUTTEST,
|
||||
STREAMED_SOUND_CUTSCENE_DEADLY,
|
||||
STREAMED_SOUND_CUTSCENE_DONPROB,
|
||||
STREAMED_SOUND_CUTSCENE_DRIVNMR,
|
||||
STREAMED_SOUND_CUTSCENE_ELECTON,
|
||||
STREAMED_SOUND_CUTSCENE_FINAL,
|
||||
STREAMED_SOUND_CUTSCENE_FINAL_2,
|
||||
STREAMED_SOUND_CUTSCENE_HOMSWET,
|
||||
STREAMED_SOUND_CUTSCENE_HOTWHEL,
|
||||
STREAMED_SOUND_CUTSCENE_KIDNAPP,
|
||||
STREAMED_SOUND_CUTSCENE_LANDGRB,
|
||||
STREAMED_SOUND_CUTSCENE_MORGUE,
|
||||
STREAMED_SOUND_CUTSCENE_OVERDOS,
|
||||
STREAMED_SOUND_CUTSCENE_RUFJUST,
|
||||
STREAMED_SOUND_CUTSCENE_SAYONAR,
|
||||
STREAMED_SOUND_CUTSCENE_SICILAN,
|
||||
STREAMED_SOUND_CUTSCENE_THEOFER,
|
||||
STREAMED_SOUND_CUTSCENE_INTRO,
|
||||
STREAMED_SOUND_CUTSCENE_FINALE,
|
||||
STREAMED_SOUND_MISSION_COMPLETED,
|
||||
STREAMED_SOUND_GAME_COMPLETED,
|
||||
STREAMED_SOUND_MISSION_LIB_A1,
|
||||
STREAMED_SOUND_MISSION_LIB_A2,
|
||||
STREAMED_SOUND_MISSION_LIB_A,
|
||||
STREAMED_SOUND_MISSION_LIB_B,
|
||||
STREAMED_SOUND_MISSION_LIB_C,
|
||||
STREAMED_SOUND_MISSION_LIB_D,
|
||||
STREAMED_SOUND_MISSION_L2_A,
|
||||
STREAMED_SOUND_MISSION_J4T_1,
|
||||
STREAMED_SOUND_MISSION_J4T_2,
|
||||
STREAMED_SOUND_MISSION_J4T_3,
|
||||
STREAMED_SOUND_MISSION_J4T_4,
|
||||
STREAMED_SOUND_MISSION_J4_A,
|
||||
STREAMED_SOUND_MISSION_J4_B,
|
||||
STREAMED_SOUND_MISSION_J4_C,
|
||||
STREAMED_SOUND_MISSION_J4_D,
|
||||
STREAMED_SOUND_MISSION_J4_E,
|
||||
STREAMED_SOUND_MISSION_J4_F,
|
||||
STREAMED_SOUND_MISSION_J6_1,
|
||||
STREAMED_SOUND_MISSION_J6_A,
|
||||
STREAMED_SOUND_MISSION_J6_B,
|
||||
STREAMED_SOUND_MISSION_J6_C,
|
||||
STREAMED_SOUND_MISSION_J6_D,
|
||||
STREAMED_SOUND_MISSION_T4_A,
|
||||
STREAMED_SOUND_MISSION_S1_A,
|
||||
STREAMED_SOUND_MISSION_S1_A1,
|
||||
STREAMED_SOUND_MISSION_S1_B,
|
||||
STREAMED_SOUND_MISSION_S1_C,
|
||||
STREAMED_SOUND_MISSION_S1_C1,
|
||||
STREAMED_SOUND_MISSION_S1_D,
|
||||
STREAMED_SOUND_MISSION_S1_E,
|
||||
STREAMED_SOUND_MISSION_S1_F,
|
||||
STREAMED_SOUND_MISSION_S1_G,
|
||||
STREAMED_SOUND_MISSION_S1_H,
|
||||
STREAMED_SOUND_MISSION_S1_I,
|
||||
STREAMED_SOUND_MISSION_S1_J,
|
||||
STREAMED_SOUND_MISSION_S1_K,
|
||||
STREAMED_SOUND_MISSION_S1_L,
|
||||
STREAMED_SOUND_MISSION_S3_A,
|
||||
STREAMED_SOUND_MISSION_S3_B,
|
||||
STREAMED_SOUND_MISSION_EL3_A,
|
||||
STREAMED_SOUND_MISSION_MF1_A,
|
||||
STREAMED_SOUND_MISSION_MF2_A,
|
||||
STREAMED_SOUND_MISSION_MF3_A,
|
||||
STREAMED_SOUND_MISSION_MF3_B,
|
||||
STREAMED_SOUND_MISSION_MF3_B1,
|
||||
STREAMED_SOUND_MISSION_MF3_C,
|
||||
STREAMED_SOUND_MISSION_MF4_A,
|
||||
STREAMED_SOUND_MISSION_MF4_B,
|
||||
STREAMED_SOUND_MISSION_MF4_C,
|
||||
STREAMED_SOUND_MISSION_A1_A,
|
||||
STREAMED_SOUND_MISSION_A3_A,
|
||||
STREAMED_SOUND_MISSION_A5_A,
|
||||
STREAMED_SOUND_MISSION_A4_A,
|
||||
STREAMED_SOUND_MISSION_A4_B,
|
||||
STREAMED_SOUND_MISSION_A4_C,
|
||||
STREAMED_SOUND_MISSION_A4_D,
|
||||
STREAMED_SOUND_MISSION_K1_A,
|
||||
STREAMED_SOUND_MISSION_K3_A,
|
||||
STREAMED_SOUND_MISSION_R1_A,
|
||||
STREAMED_SOUND_MISSION_R2_A,
|
||||
STREAMED_SOUND_MISSION_R2_B,
|
||||
STREAMED_SOUND_MISSION_R2_C,
|
||||
STREAMED_SOUND_MISSION_R2_D,
|
||||
STREAMED_SOUND_MISSION_R2_E,
|
||||
STREAMED_SOUND_MISSION_R2_F,
|
||||
STREAMED_SOUND_MISSION_R2_G,
|
||||
STREAMED_SOUND_MISSION_R2_H,
|
||||
STREAMED_SOUND_MISSION_R5_A,
|
||||
STREAMED_SOUND_MISSION_R6_A,
|
||||
STREAMED_SOUND_MISSION_R6_A1,
|
||||
STREAMED_SOUND_MISSION_R6_B,
|
||||
STREAMED_SOUND_MISSION_LO2_A,
|
||||
STREAMED_SOUND_MISSION_LO6_A,
|
||||
STREAMED_SOUND_MISSION_YD2_A,
|
||||
STREAMED_SOUND_MISSION_YD2_B,
|
||||
STREAMED_SOUND_MISSION_YD2_C,
|
||||
STREAMED_SOUND_MISSION_YD2_C1,
|
||||
STREAMED_SOUND_MISSION_YD2_D,
|
||||
STREAMED_SOUND_MISSION_YD2_E,
|
||||
STREAMED_SOUND_MISSION_YD2_F,
|
||||
STREAMED_SOUND_MISSION_YD2_G,
|
||||
STREAMED_SOUND_MISSION_YD2_H,
|
||||
STREAMED_SOUND_MISSION_YD2_ASS,
|
||||
STREAMED_SOUND_MISSION_YD2_OK,
|
||||
STREAMED_SOUND_MISSION_H5_A,
|
||||
STREAMED_SOUND_MISSION_H5_B,
|
||||
STREAMED_SOUND_MISSION_H5_C,
|
||||
STREAMED_SOUND_MISSION_AMMU_A,
|
||||
STREAMED_SOUND_MISSION_AMMU_B,
|
||||
STREAMED_SOUND_MISSION_AMMU_C,
|
||||
STREAMED_SOUND_MISSION_DOOR_1,
|
||||
STREAMED_SOUND_MISSION_DOOR_2,
|
||||
STREAMED_SOUND_MISSION_DOOR_3,
|
||||
STREAMED_SOUND_MISSION_DOOR_4,
|
||||
STREAMED_SOUND_MISSION_DOOR_5,
|
||||
STREAMED_SOUND_MISSION_DOOR_6,
|
||||
STREAMED_SOUND_MISSION_T3_A,
|
||||
STREAMED_SOUND_MISSION_T3_B,
|
||||
STREAMED_SOUND_MISSION_T3_C,
|
||||
STREAMED_SOUND_MISSION_K1_B,
|
||||
STREAMED_SOUND_MISSION_CAT1,
|
||||
TOTAL_STREAMED_SOUNDS,
|
||||
NO_TRACK,
|
||||
};
|
||||
@@ -242,15 +122,18 @@ enum eAudioType
|
||||
AUDIOTYPE_EXPLOSION,
|
||||
AUDIOTYPE_FIRE,
|
||||
AUDIOTYPE_WEATHER,
|
||||
AUDIOTYPE_CRANE,
|
||||
AUDIOTYPE_SCRIPTOBJECT,
|
||||
#ifdef GTA_BRIDGE
|
||||
AUDIOTYPE_BRIDGE,
|
||||
#endif
|
||||
AUDIOTYPE_COLLISION,
|
||||
AUDIOTYPE_FRONTEND,
|
||||
AUDIOTYPE_PROJECTILE,
|
||||
AUDIOTYPE_GARAGE,
|
||||
AUDIOTYPE_FIREHYDRANT,
|
||||
AUDIOTYPE_WATERCANNON,
|
||||
AUDIOTYPE_ESCALATOR,
|
||||
AUDIOTYPE_EXTRA_SOUNDS,
|
||||
AUDIOTYPE_POLICERADIO,
|
||||
TOTAL_AUDIO_TYPES,
|
||||
};
|
||||
@@ -258,21 +141,40 @@ enum eAudioType
|
||||
#ifdef GTA_PS2
|
||||
enum
|
||||
{
|
||||
NUM_CHANNELS_GENERIC = 43,
|
||||
NUM_CHANNELS_GENERIC = 40,
|
||||
CHANNEL_POLICE_RADIO = NUM_CHANNELS_GENERIC,
|
||||
CHANNEL_MISSION_AUDIO,
|
||||
CHANNEL_MISSION_AUDIO_1,
|
||||
CHANNEL_MISSION_AUDIO_2,
|
||||
CHANNEL_PLAYER_VEHICLE_ENGINE,
|
||||
NUM_CHANNELS
|
||||
NUM_CHANNELS,
|
||||
|
||||
NUM_CHANNELS_DTS_GENERIC = 18,
|
||||
CHANNEL_DTS_POLICE_RADIO = NUM_CHANNELS_DTS_GENERIC,
|
||||
CHANNEL_DTS_MISSION_AUDIO_1,
|
||||
CHANNEL_DTS_MISSION_AUDIO_2,
|
||||
CHANNEL_DTS_PLAYER_VEHICLE_ENGINE,
|
||||
};
|
||||
#else
|
||||
enum
|
||||
{
|
||||
#ifdef PS2_AUDIO_CHANNELS
|
||||
NUM_CHANNELS_GENERIC = 43,
|
||||
NUM_CHANNELS_GENERIC = 40,
|
||||
#else
|
||||
NUM_CHANNELS_GENERIC = 27,
|
||||
NUM_CHANNELS_GENERIC = 20,
|
||||
#endif
|
||||
CHANNEL_POLICE_RADIO,
|
||||
CHANNEL_MISSION_AUDIO_1,
|
||||
CHANNEL_MISSION_AUDIO_2,
|
||||
NUM_CHANNELS
|
||||
};
|
||||
#endif
|
||||
|
||||
enum
|
||||
{
|
||||
MISSION_AUDIO_SLOT_1,
|
||||
MISSION_AUDIO_SLOT_2,
|
||||
MISSION_AUDIO_POLRADIO_CRIME_OR_COLOR,
|
||||
MISSION_AUDIO_POLRADIO_AREA_OR_CAR,
|
||||
MISSION_AUDIO_PLAYER_COMMENT,
|
||||
MISSION_AUDIO_COUNT
|
||||
};
|
||||
|
||||
@@ -511,6 +511,13 @@ protected:
|
||||
uint32 m_nChannels;
|
||||
const char* m_pPath;
|
||||
bool m_bFileNotOpenedYet;
|
||||
|
||||
CMP3File() :
|
||||
m_pMH(nil),
|
||||
m_bOpened(false),
|
||||
m_nRate(0),
|
||||
m_bFileNotOpenedYet(false),
|
||||
m_nChannels(0) {}
|
||||
public:
|
||||
CMP3File(const char *path) :
|
||||
m_pMH(nil),
|
||||
@@ -618,6 +625,69 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class CADFFile : public CMP3File
|
||||
{
|
||||
static ssize_t r_read(void* fh, void* buf, size_t size)
|
||||
{
|
||||
size_t bytesRead = fread(buf, 1, size, (FILE*)fh);
|
||||
uint8* _buf = (uint8*)buf;
|
||||
for (size_t i = 0; i < size; i++)
|
||||
_buf[i] ^= 0x22;
|
||||
return bytesRead;
|
||||
}
|
||||
static off_t r_seek(void* fh, off_t pos, int seekType)
|
||||
{
|
||||
fseek((FILE*)fh, pos, seekType);
|
||||
return ftell((FILE*)fh);
|
||||
}
|
||||
static void r_close(void* fh)
|
||||
{
|
||||
fclose((FILE*)fh);
|
||||
}
|
||||
public:
|
||||
CADFFile(const char* path)
|
||||
{
|
||||
m_pMH = mpg123_new(nil, nil);
|
||||
if (m_pMH)
|
||||
{
|
||||
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_SEEKBUFFER | MPG123_GAPLESS, 0.0);
|
||||
|
||||
m_bOpened = true;
|
||||
m_bFileNotOpenedYet = true;
|
||||
m_pPath = path;
|
||||
// It's possible to move this to audioFileOpsThread(), but effect isn't noticable + probably not compatible with our current cutscene audio handling
|
||||
#if 1
|
||||
FileOpen();
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void FileOpen()
|
||||
{
|
||||
if(!m_bFileNotOpenedYet) return;
|
||||
|
||||
long rate = 0;
|
||||
int channels = 0;
|
||||
int encoding = 0;
|
||||
|
||||
FILE *f = fopen(m_pPath, "rb");
|
||||
|
||||
m_bOpened = f && mpg123_replace_reader_handle(m_pMH, r_read, r_seek, r_close) == MPG123_OK
|
||||
&& mpg123_open_handle(m_pMH, f) == MPG123_OK && mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK;
|
||||
|
||||
m_nRate = rate;
|
||||
m_nChannels = channels;
|
||||
|
||||
if(IsOpened()) {
|
||||
mpg123_format_none(m_pMH);
|
||||
mpg123_format(m_pMH, rate, channels, encoding);
|
||||
}
|
||||
|
||||
m_bFileNotOpenedYet = false;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
#define VAG_LINE_SIZE (0x10)
|
||||
#define VAG_SAMPLES_IN_LINE (28)
|
||||
@@ -1208,6 +1278,8 @@ bool CStream::Open(const char* filename, uint32 overrideSampleRate)
|
||||
#ifdef AUDIO_OAL_USE_MPG123
|
||||
else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".mp3")], ".mp3"))
|
||||
m_pSoundFile = new CMP3File(m_aFilename);
|
||||
else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".adf")], ".adf"))
|
||||
m_pSoundFile = new CADFFile(m_aFilename);
|
||||
#endif
|
||||
else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".vb")], ".VB"))
|
||||
m_pSoundFile = new CVbFile(m_aFilename, overrideSampleRate);
|
||||
@@ -1500,7 +1572,7 @@ int32 CStream::FillBuffers()
|
||||
void CStream::ClearBuffers()
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
|
||||
|
||||
ALint buffersQueued[2];
|
||||
alGetSourcei(m_pAlSources[0], AL_BUFFERS_QUEUED, &buffersQueued[0]);
|
||||
alGetSourcei(m_pAlSources[1], AL_BUFFERS_QUEUED, &buffersQueued[1]);
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
#define MAX_FREQ DIGITALRATE
|
||||
|
||||
struct tSample {
|
||||
int32 nOffset;
|
||||
uint32 nOffset;
|
||||
uint32 nSize;
|
||||
int32 nFrequency;
|
||||
int32 nLoopStart;
|
||||
uint32 nFrequency;
|
||||
uint32 nLoopStart;
|
||||
int32 nLoopEnd;
|
||||
};
|
||||
|
||||
@@ -23,94 +23,111 @@ struct tSample {
|
||||
enum
|
||||
{
|
||||
SFX_BANK_0,
|
||||
#ifdef GTA_PS2
|
||||
SFX_BANK_GENERIC_EXTRA,
|
||||
SFX_BANK_PED_COMMENTS,
|
||||
SFX_BANK_FRONT_END_MENU,
|
||||
#else
|
||||
SFX_BANK_GENERIC_EXTRA = SFX_BANK_0,
|
||||
SFX_BANK_FRONT_END_MENU = SFX_BANK_0,
|
||||
|
||||
SFX_BANK_PED_COMMENTS,
|
||||
MAX_SFX_BANKS,
|
||||
INVALID_SFX_BANK,
|
||||
#endif
|
||||
|
||||
CAR_SFX_BANKS_OFFSET,
|
||||
SFX_BANK_PACARD = CAR_SFX_BANKS_OFFSET,
|
||||
SFX_BANK_PATHFINDER,
|
||||
SFX_BANK_PONTIAC = CAR_SFX_BANKS_OFFSET,
|
||||
SFX_BANK_PORSCHE,
|
||||
SFX_BANK_SPIDER,
|
||||
SFX_BANK_MERC,
|
||||
SFX_BANK_TRUCK,
|
||||
SFX_BANK_HOTROD,
|
||||
SFX_BANK_COBRA,
|
||||
SFX_BANK_NONE,
|
||||
SFX_BANK_PONTIAC_SLOW,
|
||||
SFX_BANK_CADILLAC,
|
||||
SFX_BANK_PATHFINDER,
|
||||
SFX_BANK_PACARD,
|
||||
SFX_BANK_GOLF_CART,
|
||||
SFX_BANK_CAR_CHAINSAW,
|
||||
SFX_BANK_RC,
|
||||
SFX_BANK_RC_HELI,
|
||||
SFX_BANK_CAR_UNUSED_4,
|
||||
|
||||
PS2BANK(SFX_BANK_FRONT_END_MENU),
|
||||
// bikes
|
||||
SFX_BANK_VTWIN,
|
||||
SFX_BANK_MOPED,
|
||||
SFX_BANK_HONDA250,
|
||||
SFX_BANK_SPORTS_BIKE,
|
||||
SFX_BANK_BIKE_UNUSED_1,
|
||||
SFX_BANK_BIKE_UNUSED_2,
|
||||
SFX_BANK_BIKE_UNUSED_3,
|
||||
SFX_BANK_BIKE_UNUSED_4,
|
||||
SFX_BANK_BIKE_UNUSED_5,
|
||||
SFX_BANK_BIKE_UNUSED_6,
|
||||
|
||||
PS2BANK(SFX_BANK_TRAIN),
|
||||
// heli
|
||||
SFX_BANK_HELI_APACHE,
|
||||
SFX_BANK_HELI_UNUSED_1,
|
||||
SFX_BANK_HELI_UNUSED_2,
|
||||
SFX_BANK_HELI_UNUSED_3,
|
||||
SFX_BANK_HELI_UNUSED_4,
|
||||
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_3),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_4),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_5),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_6),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_7),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_8),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_9),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_10),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_11),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_12),
|
||||
PS2BANK(SFX_BANK_BUILDING_CLUB_RAGGA),
|
||||
PS2BANK(SFX_BANK_BUILDING_STRIP_CLUB_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_STRIP_CLUB_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_WORKSHOP),
|
||||
PS2BANK(SFX_BANK_BUILDING_PIANO_BAR),
|
||||
PS2BANK(SFX_BANK_BUILDING_SAWMILL),
|
||||
PS2BANK(SFX_BANK_BUILDING_DOG_FOOD_FACTORY),
|
||||
PS2BANK(SFX_BANK_BUILDING_LAUNDERETTE),
|
||||
PS2BANK(SFX_BANK_BUILDING_RESTAURANT_CHINATOWN),
|
||||
PS2BANK(SFX_BANK_BUILDING_RESTAURANT_ITALY),
|
||||
PS2BANK(SFX_BANK_BUILDING_RESTAURANT_GENERIC_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_RESTAURANT_GENERIC_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_AIRPORT),
|
||||
PS2BANK(SFX_BANK_BUILDING_SHOP),
|
||||
PS2BANK(SFX_BANK_BUILDING_CINEMA),
|
||||
PS2BANK(SFX_BANK_BUILDING_DOCKS),
|
||||
PS2BANK(SFX_BANK_BUILDING_HOME),
|
||||
PS2BANK(SFX_BANK_BUILDING_PORN_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_PORN_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_PORN_3),
|
||||
PS2BANK(SFX_BANK_BUILDING_POLICE_BALL),
|
||||
// plane
|
||||
SFX_BANK_PLANE_SEAPLANE,
|
||||
SFX_BANK_PLANE_UNUSED_1,
|
||||
SFX_BANK_PLANE_UNUSED_2,
|
||||
SFX_BANK_PLANE_UNUSED_3,
|
||||
SFX_BANK_PLANE_UNUSED_4,
|
||||
PS2BANK(SFX_BANK_BUILDING_BANK_ALARM),
|
||||
PS2BANK(SFX_BANK_BUILDING_RAVE_INDUSTRIAL),
|
||||
PS2BANK(SFX_BANK_BUILDING_RAVE_COMMERCIAL),
|
||||
PS2BANK(SFX_BANK_BUILDING_RAVE_SUBURBAN),
|
||||
PS2BANK(SFX_BANK_BUILDING_RAVE_COMMERCIAL_2),
|
||||
|
||||
PS2BANK(SFX_BANK_BUILDING_39),
|
||||
PS2BANK(SFX_BANK_BUILDING_40),
|
||||
PS2BANK(SFX_BANK_BUILDING_41),
|
||||
PS2BANK(SFX_BANK_BUILDING_42),
|
||||
PS2BANK(SFX_BANK_BUILDING_43),
|
||||
PS2BANK(SFX_BANK_BUILDING_44),
|
||||
PS2BANK(SFX_BANK_BUILDING_45),
|
||||
PS2BANK(SFX_BANK_BUILDING_46),
|
||||
PS2BANK(SFX_BANK_BUILDING_47),
|
||||
|
||||
PS2BANK(SFX_BANK_GENERIC_EXTRA),
|
||||
|
||||
SFX_BANK_PED_COMMENTS,
|
||||
PS2BANK(SFX_BANK_BUILDING_SNORING),
|
||||
PS2BANK(SFX_BANK_BUILDING_BAR_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_BAR_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_BAR_3),
|
||||
PS2BANK(SFX_BANK_BUILDING_BAR_4),
|
||||
PS2BANK(SFX_BANK_BUILDING_MALIBU_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_MALIBU_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_MALIBU_3),
|
||||
PS2BANK(SFX_BANK_BUILDING_STRIP_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_STRIP_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_STRIP_3),
|
||||
PS2BANK(SFX_BANK_BUILDING_CHURCH),
|
||||
PS2BANK(SFX_BANK_BUILDING_FAN_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_FAN_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_INSECT_1),
|
||||
PS2BANK(SFX_BANK_BUILDING_INSECT_2),
|
||||
PS2BANK(SFX_BANK_BUILDING_18),
|
||||
PS2BANK(SFX_BANK_BUILDING_19),
|
||||
PS2BANK(SFX_BANK_BUILDING_20),
|
||||
PS2BANK(SFX_BANK_BUILDING_21),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_GRASS),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_GRAVEL),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_WOOD),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_METAL),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_WATER),
|
||||
PS2BANK(SFX_BANK_FOOTSTEPS_SAND),
|
||||
#ifdef GTA_PS2
|
||||
MAX_SFX_BANKS,
|
||||
INVALID_SFX_BANK
|
||||
#endif
|
||||
};
|
||||
|
||||
#define MAX_PEDSFX 7
|
||||
#define PED_BLOCKSIZE 79000
|
||||
#define MISSION_AUDIO_BLOCKSIZE 160000
|
||||
|
||||
#define MAXPROVIDERS 64
|
||||
|
||||
#ifdef EXTERNAL_3D_SOUND
|
||||
#define MAXCHANNELS (NUM_CHANNELS_GENERIC+1)
|
||||
#define MAXCHANNELS_SURROUND (MAXCHANNELS-4)
|
||||
#define MAX2DCHANNELS 1
|
||||
#define MAX2DCHANNELS 3
|
||||
#else
|
||||
#define MAXCHANNELS 0
|
||||
#define MAXCHANNELS_SURROUND 0
|
||||
#define MAX2DCHANNELS NUM_CHANNELS
|
||||
#endif
|
||||
|
||||
#define MAX_STREAMS 2
|
||||
#define MAX_STREAMS 1
|
||||
|
||||
#define DIGITALRATE 32000
|
||||
#define DIGITALBITS 16
|
||||
@@ -120,23 +137,29 @@ enum
|
||||
#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2+MAX2DCHANNELS)
|
||||
#else
|
||||
#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static_assert( NUM_CHANNELS == MAXCHANNELS + MAX2DCHANNELS, "The number of channels doesn't match with an enum" );
|
||||
|
||||
extern int gBankStartOffset[67];
|
||||
|
||||
class cSampleManager
|
||||
{
|
||||
uint8 m_nEffectsVolume;
|
||||
uint8 m_nMusicVolume;
|
||||
uint8 m_nMP3BoostVolume;
|
||||
uint8 m_nEffectsFadeVolume;
|
||||
uint8 m_nMusicFadeVolume;
|
||||
bool8 m_nMonoMode;
|
||||
char unk;
|
||||
char m_szCDRomRootPath[80];
|
||||
bool8 m_bInitialised;
|
||||
uint8 m_nNumberOfProviders;
|
||||
char *m_aAudioProviders[MAXPROVIDERS];
|
||||
tSample m_aSamples[TOTAL_AUDIO_SAMPLES];
|
||||
char m_MiscomPath[260];
|
||||
char m_WavFilesPath[260];
|
||||
char m_MP3FilesPath[188];
|
||||
void *m_aChannels[18];
|
||||
|
||||
public:
|
||||
|
||||
@@ -157,8 +180,10 @@ public:
|
||||
|
||||
int8 GetCurrent3DProviderIndex(void);
|
||||
int8 SetCurrent3DProvider(uint8 which);
|
||||
|
||||
int8 AutoDetect3DProviders();
|
||||
#endif
|
||||
|
||||
|
||||
bool8 IsMP3RadioChannelAvailable(void);
|
||||
|
||||
void ReleaseDigitalHandle (void);
|
||||
@@ -174,26 +199,30 @@ public:
|
||||
|
||||
void SetEffectsMasterVolume(uint8 nVolume);
|
||||
void SetMusicMasterVolume (uint8 nVolume);
|
||||
void SetMP3BoostVolume (uint8 nVolume);
|
||||
void SetEffectsFadeVolume (uint8 nVolume);
|
||||
void SetMusicFadeVolume (uint8 nVolume);
|
||||
void SetMonoMode (bool8 nMode);
|
||||
|
||||
bool8 LoadSampleBank (uint8 nBank);
|
||||
void UnloadSampleBank (uint8 nBank);
|
||||
bool8 IsSampleBankLoaded(uint8 nBank);
|
||||
int8 IsSampleBankLoaded(uint8 nBank);
|
||||
|
||||
uint8 IsMissionAudioLoaded(uint8 nSlot, uint32 nSample);
|
||||
bool8 LoadMissionAudio (uint8 nSlot, uint32 nSample);
|
||||
|
||||
bool8 IsPedCommentLoaded(uint32 nComment);
|
||||
uint8 IsPedCommentLoaded(uint32 nComment);
|
||||
bool8 LoadPedComment (uint32 nComment);
|
||||
int32 GetBankContainingSound(uint32 offset);
|
||||
|
||||
int32 _GetPedCommentSlot(uint32 nComment);
|
||||
|
||||
int32 GetSampleBaseFrequency (uint32 nSample);
|
||||
int32 GetSampleLoopStartOffset(uint32 nSample);
|
||||
uint32 GetSampleBaseFrequency (uint32 nSample);
|
||||
uint32 GetSampleLoopStartOffset(uint32 nSample);
|
||||
int32 GetSampleLoopEndOffset (uint32 nSample);
|
||||
uint32 GetSampleLength (uint32 nSample);
|
||||
|
||||
bool8 UpdateReverb(void);
|
||||
bool8 UpdateReverb(void);
|
||||
|
||||
void SetChannelReverbFlag (uint32 nChannel, bool8 nReverbFlag);
|
||||
bool8 InitialiseChannel (uint32 nChannel, uint32 nSfx, uint8 nBank);
|
||||
@@ -211,463 +240,93 @@ public:
|
||||
void StartChannel (uint32 nChannel);
|
||||
void StopChannel (uint32 nChannel);
|
||||
|
||||
void PreloadStreamedFile (uint8 nFile, uint8 nStream = 0);
|
||||
void PreloadStreamedFile (uint32 nFile, uint8 nStream = 0);
|
||||
void PauseStream (bool8 nPauseFlag, uint8 nStream = 0);
|
||||
void StartPreloadedStreamedFile (uint8 nStream = 0);
|
||||
bool8 StartStreamedFile (uint8 nFile, uint32 nPos, uint8 nStream = 0);
|
||||
bool8 StartStreamedFile (uint32 nFile, uint32 nPos, uint8 nStream = 0);
|
||||
void StopStreamedFile (uint8 nStream = 0);
|
||||
int32 GetStreamedFilePosition (uint8 nStream = 0);
|
||||
void SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream = 0);
|
||||
int32 GetStreamedFileLength (uint8 nStream = 0);
|
||||
bool8 IsStreamPlaying (uint8 nStream = 0);
|
||||
void SetStreamedFileLoopFlag (bool8 nLoopFlag, uint8 nStream = 0);
|
||||
#ifdef AUDIO_OAL
|
||||
void Service(void);
|
||||
#endif
|
||||
bool8 InitialiseSampleBanks(void);
|
||||
|
||||
uint8 GetMusicVolume() const { return m_nMusicVolume; }
|
||||
uint8 GetMusicFadeVolume() const { return m_nMusicFadeVolume; }
|
||||
};
|
||||
|
||||
extern cSampleManager SampleManager;
|
||||
extern uint32 BankStartOffset[MAX_SFX_BANKS];
|
||||
|
||||
#ifdef AUDIO_OAL
|
||||
extern int defaultProvider;
|
||||
#endif
|
||||
|
||||
#if defined(OPUS_AUDIO_PATHS)
|
||||
static char StreamedNameTable[][25] = {
|
||||
"AUDIO\\HEAD.OPUS", "AUDIO\\CLASS.OPUS", "AUDIO\\KJAH.OPUS", "AUDIO\\RISE.OPUS", "AUDIO\\LIPS.OPUS", "AUDIO\\GAME.OPUS",
|
||||
"AUDIO\\MSX.OPUS", "AUDIO\\FLASH.OPUS", "AUDIO\\CHAT.OPUS", "AUDIO\\HEAD.OPUS", "AUDIO\\POLICE.OPUS", "AUDIO\\CITY.OPUS",
|
||||
"AUDIO\\WATER.OPUS", "AUDIO\\COMOPEN.OPUS", "AUDIO\\SUBOPEN.OPUS", "AUDIO\\JB.OPUS", "AUDIO\\BET.OPUS", "AUDIO\\L1_LG.OPUS",
|
||||
"AUDIO\\L2_DSB.OPUS", "AUDIO\\L3_DM.OPUS", "AUDIO\\L4_PAP.OPUS", "AUDIO\\L5_TFB.OPUS", "AUDIO\\J0_DM2.OPUS", "AUDIO\\J1_LFL.OPUS",
|
||||
"AUDIO\\J2_KCL.OPUS", "AUDIO\\J3_VH.OPUS", "AUDIO\\J4_ETH.OPUS", "AUDIO\\J5_DST.OPUS", "AUDIO\\J6_TBJ.OPUS", "AUDIO\\T1_TOL.OPUS",
|
||||
"AUDIO\\T2_TPU.OPUS", "AUDIO\\T3_MAS.OPUS", "AUDIO\\T4_TAT.OPUS", "AUDIO\\T5_BF.OPUS", "AUDIO\\S0_MAS.OPUS", "AUDIO\\S1_PF.OPUS",
|
||||
"AUDIO\\S2_CTG.OPUS", "AUDIO\\S3_RTC.OPUS", "AUDIO\\S5_LRQ.OPUS", "AUDIO\\S4_BDBA.OPUS", "AUDIO\\S4_BDBB.OPUS", "AUDIO\\S2_CTG2.OPUS",
|
||||
"AUDIO\\S4_BDBD.OPUS", "AUDIO\\S5_LRQB.OPUS", "AUDIO\\S5_LRQC.OPUS", "AUDIO\\A1_SSO.OPUS", "AUDIO\\A2_PP.OPUS", "AUDIO\\A3_SS.OPUS",
|
||||
"AUDIO\\A4_PDR.OPUS", "AUDIO\\A5_K2FT.OPUS", "AUDIO\\K1_KBO.OPUS", "AUDIO\\K2_GIS.OPUS", "AUDIO\\K3_DS.OPUS", "AUDIO\\K4_SHI.OPUS",
|
||||
"AUDIO\\K5_SD.OPUS", "AUDIO\\R0_PDR2.OPUS", "AUDIO\\R1_SW.OPUS", "AUDIO\\R2_AP.OPUS", "AUDIO\\R3_ED.OPUS", "AUDIO\\R4_GF.OPUS",
|
||||
"AUDIO\\R5_PB.OPUS", "AUDIO\\R6_MM.OPUS", "AUDIO\\D1_STOG.OPUS", "AUDIO\\D2_KK.OPUS", "AUDIO\\D3_ADO.OPUS", "AUDIO\\D5_ES.OPUS",
|
||||
"AUDIO\\D7_MLD.OPUS", "AUDIO\\D4_GTA.OPUS", "AUDIO\\D4_GTA2.OPUS", "AUDIO\\D6_STS.OPUS", "AUDIO\\A6_BAIT.OPUS", "AUDIO\\A7_ETG.OPUS",
|
||||
"AUDIO\\A8_PS.OPUS", "AUDIO\\A9_ASD.OPUS", "AUDIO\\K4_SHI2.OPUS", "AUDIO\\C1_TEX.OPUS", "AUDIO\\EL_PH1.OPUS", "AUDIO\\EL_PH2.OPUS",
|
||||
"AUDIO\\EL_PH3.OPUS", "AUDIO\\EL_PH4.OPUS", "AUDIO\\YD_PH1.OPUS", "AUDIO\\YD_PH2.OPUS", "AUDIO\\YD_PH3.OPUS", "AUDIO\\YD_PH4.OPUS",
|
||||
"AUDIO\\HD_PH1.OPUS", "AUDIO\\HD_PH2.OPUS", "AUDIO\\HD_PH3.OPUS", "AUDIO\\HD_PH4.OPUS", "AUDIO\\HD_PH5.OPUS", "AUDIO\\MT_PH1.OPUS",
|
||||
"AUDIO\\MT_PH2.OPUS", "AUDIO\\MT_PH3.OPUS", "AUDIO\\MT_PH4.OPUS", "AUDIO\\MISCOM.OPUS", "AUDIO\\END.OPUS", "AUDIO\\lib_a1.OPUS",
|
||||
"AUDIO\\lib_a2.OPUS", "AUDIO\\lib_a.OPUS", "AUDIO\\lib_b.OPUS", "AUDIO\\lib_c.OPUS", "AUDIO\\lib_d.OPUS", "AUDIO\\l2_a.OPUS",
|
||||
"AUDIO\\j4t_1.OPUS", "AUDIO\\j4t_2.OPUS", "AUDIO\\j4t_3.OPUS", "AUDIO\\j4t_4.OPUS", "AUDIO\\j4_a.OPUS", "AUDIO\\j4_b.OPUS",
|
||||
"AUDIO\\j4_c.OPUS", "AUDIO\\j4_d.OPUS", "AUDIO\\j4_e.OPUS", "AUDIO\\j4_f.OPUS", "AUDIO\\j6_1.OPUS", "AUDIO\\j6_a.OPUS",
|
||||
"AUDIO\\j6_b.OPUS", "AUDIO\\j6_c.OPUS", "AUDIO\\j6_d.OPUS", "AUDIO\\t4_a.OPUS", "AUDIO\\s1_a.OPUS", "AUDIO\\s1_a1.OPUS",
|
||||
"AUDIO\\s1_b.OPUS", "AUDIO\\s1_c.OPUS", "AUDIO\\s1_c1.OPUS", "AUDIO\\s1_d.OPUS", "AUDIO\\s1_e.OPUS", "AUDIO\\s1_f.OPUS",
|
||||
"AUDIO\\s1_g.OPUS", "AUDIO\\s1_h.OPUS", "AUDIO\\s1_i.OPUS", "AUDIO\\s1_j.OPUS", "AUDIO\\s1_k.OPUS", "AUDIO\\s1_l.OPUS",
|
||||
"AUDIO\\s3_a.OPUS", "AUDIO\\s3_b.OPUS", "AUDIO\\el3_a.OPUS", "AUDIO\\mf1_a.OPUS", "AUDIO\\mf2_a.OPUS", "AUDIO\\mf3_a.OPUS",
|
||||
"AUDIO\\mf3_b.OPUS", "AUDIO\\mf3_b1.OPUS", "AUDIO\\mf3_c.OPUS", "AUDIO\\mf4_a.OPUS", "AUDIO\\mf4_b.OPUS", "AUDIO\\mf4_c.OPUS",
|
||||
"AUDIO\\a1_a.OPUS", "AUDIO\\a3_a.OPUS", "AUDIO\\a5_a.OPUS", "AUDIO\\a4_a.OPUS", "AUDIO\\a4_b.OPUS", "AUDIO\\a4_c.OPUS",
|
||||
"AUDIO\\a4_d.OPUS", "AUDIO\\k1_a.OPUS", "AUDIO\\k3_a.OPUS", "AUDIO\\r1_a.OPUS", "AUDIO\\r2_a.OPUS", "AUDIO\\r2_b.OPUS",
|
||||
"AUDIO\\r2_c.OPUS", "AUDIO\\r2_d.OPUS", "AUDIO\\r2_e.OPUS", "AUDIO\\r2_f.OPUS", "AUDIO\\r2_g.OPUS", "AUDIO\\r2_h.OPUS",
|
||||
"AUDIO\\r5_a.OPUS", "AUDIO\\r6_a.OPUS", "AUDIO\\r6_a1.OPUS", "AUDIO\\r6_b.OPUS", "AUDIO\\lo2_a.OPUS", "AUDIO\\lo6_a.OPUS",
|
||||
"AUDIO\\yd2_a.OPUS", "AUDIO\\yd2_b.OPUS", "AUDIO\\yd2_c.OPUS", "AUDIO\\yd2_c1.OPUS", "AUDIO\\yd2_d.OPUS", "AUDIO\\yd2_e.OPUS",
|
||||
"AUDIO\\yd2_f.OPUS", "AUDIO\\yd2_g.OPUS", "AUDIO\\yd2_h.OPUS", "AUDIO\\yd2_ass.OPUS", "AUDIO\\yd2_ok.OPUS", "AUDIO\\h5_a.OPUS",
|
||||
"AUDIO\\h5_b.OPUS", "AUDIO\\h5_c.OPUS", "AUDIO\\ammu_a.OPUS", "AUDIO\\ammu_b.OPUS", "AUDIO\\ammu_c.OPUS", "AUDIO\\door_1.OPUS",
|
||||
"AUDIO\\door_2.OPUS", "AUDIO\\door_3.OPUS", "AUDIO\\door_4.OPUS", "AUDIO\\door_5.OPUS", "AUDIO\\door_6.OPUS", "AUDIO\\t3_a.OPUS",
|
||||
"AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"};
|
||||
#else
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
static char PS2StreamedNameTable[][25]=
|
||||
{
|
||||
"AUDIO\\MUSIC\\HEAD.VB",
|
||||
"AUDIO\\MUSIC\\CLASS.VB",
|
||||
"AUDIO\\MUSIC\\KJAH.VB",
|
||||
"AUDIO\\MUSIC\\RISE.VB",
|
||||
"AUDIO\\MUSIC\\LIPS.VB",
|
||||
"AUDIO\\MUSIC\\GAME.VB",
|
||||
"AUDIO\\MUSIC\\MSX.VB",
|
||||
"AUDIO\\MUSIC\\FLASH.VB",
|
||||
"AUDIO\\MUSIC\\CHAT.VB",
|
||||
"AUDIO\\MUSIC\\HEAD.VB",
|
||||
"AUDIO\\MUSIC\\POLICE.VB",
|
||||
"AUDIO\\MUSIC\\CITY.VB",
|
||||
"AUDIO\\MUSIC\\WATER.VB",
|
||||
"AUDIO\\MUSIC\\COMOPEN.VB",
|
||||
"AUDIO\\MUSIC\\SUBOPEN.VB",
|
||||
"AUDIO\\OTHER\\JB.VB",
|
||||
"AUDIO\\OTHER\\BET.VB",
|
||||
"AUDIO\\LUIGI\\L1_LG.VB",
|
||||
"AUDIO\\LUIGI\\L2_DSB.VB",
|
||||
"AUDIO\\LUIGI\\L3_DM.VB",
|
||||
"AUDIO\\LUIGI\\L4_PAP.VB",
|
||||
"AUDIO\\LUIGI\\L5_TFB.VB",
|
||||
"AUDIO\\JOEY\\J0_DM2.VB",
|
||||
"AUDIO\\JOEY\\J1_LFL.VB",
|
||||
"AUDIO\\JOEY\\J2_KCL.VB",
|
||||
"AUDIO\\JOEY\\J3_VH.VB",
|
||||
"AUDIO\\JOEY\\J4_ETH.VB",
|
||||
"AUDIO\\JOEY\\J5_DST.VB",
|
||||
"AUDIO\\JOEY\\J6_TBJ.VB",
|
||||
"AUDIO\\TONI\\T1_TOL.VB",
|
||||
"AUDIO\\TONI\\T2_TPU.VB",
|
||||
"AUDIO\\TONI\\T3_MAS.VB",
|
||||
"AUDIO\\TONI\\T4_TAT.VB",
|
||||
"AUDIO\\TONI\\T5_BF.VB",
|
||||
"AUDIO\\SAL\\S0_MAS.VB",
|
||||
"AUDIO\\SAL\\S1_PF.VB",
|
||||
"AUDIO\\SAL\\S2_CTG.VB",
|
||||
"AUDIO\\SAL\\S3_RTC.VB",
|
||||
"AUDIO\\SAL\\S5_LRQ.VB",
|
||||
"AUDIO\\EBALL\\S4_BDBA.VB",
|
||||
"AUDIO\\EBALL\\S4_BDBB.VB",
|
||||
"AUDIO\\SAL\\S2_CTG2.VB",
|
||||
"AUDIO\\SAL\\S4_BDBD.VB",
|
||||
"AUDIO\\SAL\\S5_LRQB.VB",
|
||||
"AUDIO\\SAL\\S5_LRQC.VB",
|
||||
"AUDIO\\ASUKA\\A1_SSO.VB",
|
||||
"AUDIO\\ASUKA\\A2_PP.VB",
|
||||
"AUDIO\\ASUKA\\A3_SS.VB",
|
||||
"AUDIO\\ASUKA\\A4_PDR.VB",
|
||||
"AUDIO\\ASUKA\\A5_K2FT.VB",
|
||||
"AUDIO\\KENJI\\K1_KBO.VB",
|
||||
"AUDIO\\KENJI\\K2_GIS.VB",
|
||||
"AUDIO\\KENJI\\K3_DS.VB",
|
||||
"AUDIO\\KENJI\\K4_SHI.VB",
|
||||
"AUDIO\\KENJI\\K5_SD.VB",
|
||||
"AUDIO\\RAY\\R0_PDR2.VB",
|
||||
"AUDIO\\RAY\\R1_SW.VB",
|
||||
"AUDIO\\RAY\\R2_AP.VB",
|
||||
"AUDIO\\RAY\\R3_ED.VB",
|
||||
"AUDIO\\RAY\\R4_GF.VB",
|
||||
"AUDIO\\RAY\\R5_PB.VB",
|
||||
"AUDIO\\RAY\\R6_MM.VB",
|
||||
"AUDIO\\LOVE\\D1_STOG.VB",
|
||||
"AUDIO\\LOVE\\D2_KK.VB",
|
||||
"AUDIO\\LOVE\\D3_ADO.VB",
|
||||
"AUDIO\\LOVE\\D5_ES.VB",
|
||||
"AUDIO\\LOVE\\D7_MLD.VB",
|
||||
"AUDIO\\LOVE\\D4_GTA.VB",
|
||||
"AUDIO\\LOVE\\D4_GTA2.VB",
|
||||
"AUDIO\\LOVE\\D6_STS.VB",
|
||||
"AUDIO\\ASUKA\\A6_BAIT.VB",
|
||||
"AUDIO\\ASUKA\\A7_ETG.VB",
|
||||
"AUDIO\\ASUKA\\A8_PS.VB",
|
||||
"AUDIO\\ASUKA\\A9_ASD.VB",
|
||||
"AUDIO\\SHOP\\K4_SHI2.VB",
|
||||
"AUDIO\\OTHER\\C1_TEX.VB",
|
||||
"AUDIO\\PHONE\\EL_PH1.VB",
|
||||
"AUDIO\\PHONE\\EL_PH2.VB",
|
||||
"AUDIO\\PHONE\\EL_PH3.VB",
|
||||
"AUDIO\\PHONE\\EL_PH4.VB",
|
||||
"AUDIO\\PHONE\\YD_PH1.VB",
|
||||
"AUDIO\\PHONE\\YD_PH2.VB",
|
||||
"AUDIO\\PHONE\\YD_PH3.VB",
|
||||
"AUDIO\\PHONE\\YD_PH4.VB",
|
||||
"AUDIO\\PHONE\\HD_PH1.VB",
|
||||
"AUDIO\\PHONE\\HD_PH2.VB",
|
||||
"AUDIO\\PHONE\\HD_PH3.VB",
|
||||
"AUDIO\\PHONE\\HD_PH4.VB",
|
||||
"AUDIO\\PHONE\\HD_PH5.VB",
|
||||
"AUDIO\\PHONE\\MT_PH1.VB",
|
||||
"AUDIO\\PHONE\\MT_PH2.VB",
|
||||
"AUDIO\\PHONE\\MT_PH3.VB",
|
||||
"AUDIO\\PHONE\\MT_PH4.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
"AUDIO\\MUSIC\\END.VB",
|
||||
"AUDIO\\lib_a1.WAV",
|
||||
"AUDIO\\lib_a2.WAV",
|
||||
"AUDIO\\lib_a.WAV",
|
||||
"AUDIO\\lib_b.WAV",
|
||||
"AUDIO\\lib_c.WAV",
|
||||
"AUDIO\\lib_d.WAV",
|
||||
"AUDIO\\l2_a.WAV",
|
||||
"AUDIO\\j4t_1.WAV",
|
||||
"AUDIO\\j4t_2.WAV",
|
||||
"AUDIO\\j4t_3.WAV",
|
||||
"AUDIO\\j4t_4.WAV",
|
||||
"AUDIO\\j4_a.WAV",
|
||||
"AUDIO\\j4_b.WAV",
|
||||
"AUDIO\\j4_c.WAV",
|
||||
"AUDIO\\j4_d.WAV",
|
||||
"AUDIO\\j4_e.WAV",
|
||||
"AUDIO\\j4_f.WAV",
|
||||
"AUDIO\\j6_1.WAV",
|
||||
"AUDIO\\j6_a.WAV",
|
||||
"AUDIO\\j6_b.WAV",
|
||||
"AUDIO\\j6_c.WAV",
|
||||
"AUDIO\\j6_d.WAV",
|
||||
"AUDIO\\t4_a.WAV",
|
||||
"AUDIO\\s1_a.WAV",
|
||||
"AUDIO\\s1_a1.WAV",
|
||||
"AUDIO\\s1_b.WAV",
|
||||
"AUDIO\\s1_c.WAV",
|
||||
"AUDIO\\s1_c1.WAV",
|
||||
"AUDIO\\s1_d.WAV",
|
||||
"AUDIO\\s1_e.WAV",
|
||||
"AUDIO\\s1_f.WAV",
|
||||
"AUDIO\\s1_g.WAV",
|
||||
"AUDIO\\s1_h.WAV",
|
||||
"AUDIO\\s1_i.WAV",
|
||||
"AUDIO\\s1_j.WAV",
|
||||
"AUDIO\\s1_k.WAV",
|
||||
"AUDIO\\s1_l.WAV",
|
||||
"AUDIO\\s3_a.WAV",
|
||||
"AUDIO\\s3_b.WAV",
|
||||
"AUDIO\\el3_a.WAV",
|
||||
"AUDIO\\mf1_a.WAV",
|
||||
"AUDIO\\mf2_a.WAV",
|
||||
"AUDIO\\mf3_a.WAV",
|
||||
"AUDIO\\mf3_b.WAV",
|
||||
"AUDIO\\mf3_b1.WAV",
|
||||
"AUDIO\\mf3_c.WAV",
|
||||
"AUDIO\\mf4_a.WAV",
|
||||
"AUDIO\\mf4_b.WAV",
|
||||
"AUDIO\\mf4_c.WAV",
|
||||
"AUDIO\\a1_a.WAV",
|
||||
"AUDIO\\a3_a.WAV",
|
||||
"AUDIO\\a5_a.WAV",
|
||||
"AUDIO\\a4_a.WAV",
|
||||
"AUDIO\\a4_b.WAV",
|
||||
"AUDIO\\a4_c.WAV",
|
||||
"AUDIO\\a4_d.WAV",
|
||||
"AUDIO\\k1_a.WAV",
|
||||
"AUDIO\\k3_a.WAV",
|
||||
"AUDIO\\r1_a.WAV",
|
||||
"AUDIO\\r2_a.WAV",
|
||||
"AUDIO\\r2_b.WAV",
|
||||
"AUDIO\\r2_c.WAV",
|
||||
"AUDIO\\r2_d.WAV",
|
||||
"AUDIO\\r2_e.WAV",
|
||||
"AUDIO\\r2_f.WAV",
|
||||
"AUDIO\\r2_g.WAV",
|
||||
"AUDIO\\r2_h.WAV",
|
||||
"AUDIO\\r5_a.WAV",
|
||||
"AUDIO\\r6_a.WAV",
|
||||
"AUDIO\\r6_a1.WAV",
|
||||
"AUDIO\\r6_b.WAV",
|
||||
"AUDIO\\lo2_a.WAV",
|
||||
"AUDIO\\lo6_a.WAV",
|
||||
"AUDIO\\yd2_a.WAV",
|
||||
"AUDIO\\yd2_b.WAV",
|
||||
"AUDIO\\yd2_c.WAV",
|
||||
"AUDIO\\yd2_c1.WAV",
|
||||
"AUDIO\\yd2_d.WAV",
|
||||
"AUDIO\\yd2_e.WAV",
|
||||
"AUDIO\\yd2_f.WAV",
|
||||
"AUDIO\\yd2_g.WAV",
|
||||
"AUDIO\\yd2_h.WAV",
|
||||
"AUDIO\\yd2_ass.WAV",
|
||||
"AUDIO\\yd2_ok.WAV",
|
||||
"AUDIO\\h5_a.WAV",
|
||||
"AUDIO\\h5_b.WAV",
|
||||
"AUDIO\\h5_c.WAV",
|
||||
"AUDIO\\ammu_a.WAV",
|
||||
"AUDIO\\ammu_b.WAV",
|
||||
"AUDIO\\ammu_c.WAV",
|
||||
"AUDIO\\door_1.WAV",
|
||||
"AUDIO\\door_2.WAV",
|
||||
"AUDIO\\door_3.WAV",
|
||||
"AUDIO\\door_4.WAV",
|
||||
"AUDIO\\door_5.WAV",
|
||||
"AUDIO\\door_6.WAV",
|
||||
"AUDIO\\t3_a.WAV",
|
||||
"AUDIO\\t3_b.WAV",
|
||||
"AUDIO\\t3_c.WAV",
|
||||
"AUDIO\\k1_b.WAV",
|
||||
"AUDIO\\cat1.WAV"
|
||||
};
|
||||
#endif
|
||||
|
||||
static char StreamedNameTable[][25] =
|
||||
{
|
||||
"AUDIO\\HEAD.WAV",
|
||||
"AUDIO\\CLASS.WAV",
|
||||
"AUDIO\\KJAH.WAV",
|
||||
"AUDIO\\RISE.WAV",
|
||||
"AUDIO\\LIPS.WAV",
|
||||
"AUDIO\\GAME.WAV",
|
||||
"AUDIO\\MSX.WAV",
|
||||
"AUDIO\\FLASH.WAV",
|
||||
"AUDIO\\CHAT.WAV",
|
||||
"AUDIO\\HEAD.WAV",
|
||||
"AUDIO\\POLICE.WAV",
|
||||
"AUDIO\\CITY.WAV",
|
||||
"AUDIO\\WATER.WAV",
|
||||
"AUDIO\\COMOPEN.WAV",
|
||||
"AUDIO\\SUBOPEN.WAV",
|
||||
"AUDIO\\JB.MP3",
|
||||
"AUDIO\\BET.MP3",
|
||||
"AUDIO\\L1_LG.MP3",
|
||||
"AUDIO\\L2_DSB.MP3",
|
||||
"AUDIO\\L3_DM.MP3",
|
||||
"AUDIO\\L4_PAP.MP3",
|
||||
"AUDIO\\L5_TFB.MP3",
|
||||
"AUDIO\\J0_DM2.MP3",
|
||||
"AUDIO\\J1_LFL.MP3",
|
||||
"AUDIO\\J2_KCL.MP3",
|
||||
"AUDIO\\J3_VH.MP3",
|
||||
"AUDIO\\J4_ETH.MP3",
|
||||
"AUDIO\\J5_DST.MP3",
|
||||
"AUDIO\\J6_TBJ.MP3",
|
||||
"AUDIO\\T1_TOL.MP3",
|
||||
"AUDIO\\T2_TPU.MP3",
|
||||
"AUDIO\\T3_MAS.MP3",
|
||||
"AUDIO\\T4_TAT.MP3",
|
||||
"AUDIO\\T5_BF.MP3",
|
||||
"AUDIO\\S0_MAS.MP3",
|
||||
"AUDIO\\S1_PF.MP3",
|
||||
"AUDIO\\S2_CTG.MP3",
|
||||
"AUDIO\\S3_RTC.MP3",
|
||||
"AUDIO\\S5_LRQ.MP3",
|
||||
"AUDIO\\S4_BDBA.MP3",
|
||||
"AUDIO\\S4_BDBB.MP3",
|
||||
"AUDIO\\S2_CTG2.MP3",
|
||||
"AUDIO\\S4_BDBD.MP3",
|
||||
"AUDIO\\S5_LRQB.MP3",
|
||||
"AUDIO\\S5_LRQC.MP3",
|
||||
"AUDIO\\A1_SSO.WAV",
|
||||
"AUDIO\\A2_PP.WAV",
|
||||
"AUDIO\\A3_SS.WAV",
|
||||
"AUDIO\\A4_PDR.WAV",
|
||||
"AUDIO\\A5_K2FT.WAV",
|
||||
"AUDIO\\K1_KBO.MP3",
|
||||
"AUDIO\\K2_GIS.MP3",
|
||||
"AUDIO\\K3_DS.MP3",
|
||||
"AUDIO\\K4_SHI.MP3",
|
||||
"AUDIO\\K5_SD.MP3",
|
||||
"AUDIO\\R0_PDR2.MP3",
|
||||
"AUDIO\\R1_SW.MP3",
|
||||
"AUDIO\\R2_AP.MP3",
|
||||
"AUDIO\\R3_ED.MP3",
|
||||
"AUDIO\\R4_GF.MP3",
|
||||
"AUDIO\\R5_PB.MP3",
|
||||
"AUDIO\\R6_MM.MP3",
|
||||
"AUDIO\\D1_STOG.MP3",
|
||||
"AUDIO\\D2_KK.MP3",
|
||||
"AUDIO\\D3_ADO.MP3",
|
||||
"AUDIO\\D5_ES.MP3",
|
||||
"AUDIO\\D7_MLD.MP3",
|
||||
"AUDIO\\D4_GTA.MP3",
|
||||
"AUDIO\\D4_GTA2.MP3",
|
||||
"AUDIO\\D6_STS.MP3",
|
||||
"AUDIO\\A6_BAIT.WAV",
|
||||
"AUDIO\\A7_ETG.WAV",
|
||||
"AUDIO\\A8_PS.WAV",
|
||||
"AUDIO\\A9_ASD.WAV",
|
||||
"AUDIO\\K4_SHI2.MP3",
|
||||
"AUDIO\\C1_TEX.MP3",
|
||||
"AUDIO\\EL_PH1.MP3",
|
||||
"AUDIO\\EL_PH2.MP3",
|
||||
"AUDIO\\EL_PH3.MP3",
|
||||
"AUDIO\\EL_PH4.MP3",
|
||||
"AUDIO\\YD_PH1.MP3",
|
||||
"AUDIO\\YD_PH2.MP3",
|
||||
"AUDIO\\YD_PH3.MP3",
|
||||
"AUDIO\\YD_PH4.MP3",
|
||||
"AUDIO\\HD_PH1.MP3",
|
||||
"AUDIO\\HD_PH2.MP3",
|
||||
"AUDIO\\HD_PH3.MP3",
|
||||
"AUDIO\\HD_PH4.MP3",
|
||||
"AUDIO\\HD_PH5.MP3",
|
||||
"AUDIO\\MT_PH1.MP3",
|
||||
"AUDIO\\MT_PH2.MP3",
|
||||
"AUDIO\\MT_PH3.MP3",
|
||||
"AUDIO\\MT_PH4.MP3",
|
||||
"AUDIO\\MISCOM.WAV",
|
||||
"AUDIO\\END.MP3",
|
||||
"AUDIO\\lib_a1.WAV",
|
||||
"AUDIO\\lib_a2.WAV",
|
||||
"AUDIO\\lib_a.WAV",
|
||||
"AUDIO\\lib_b.WAV",
|
||||
"AUDIO\\lib_c.WAV",
|
||||
"AUDIO\\lib_d.WAV",
|
||||
"AUDIO\\l2_a.WAV",
|
||||
"AUDIO\\j4t_1.WAV",
|
||||
"AUDIO\\j4t_2.WAV",
|
||||
"AUDIO\\j4t_3.WAV",
|
||||
"AUDIO\\j4t_4.WAV",
|
||||
"AUDIO\\j4_a.WAV",
|
||||
"AUDIO\\j4_b.WAV",
|
||||
"AUDIO\\j4_c.WAV",
|
||||
"AUDIO\\j4_d.WAV",
|
||||
"AUDIO\\j4_e.WAV",
|
||||
"AUDIO\\j4_f.WAV",
|
||||
"AUDIO\\j6_1.WAV",
|
||||
"AUDIO\\j6_a.WAV",
|
||||
"AUDIO\\j6_b.WAV",
|
||||
"AUDIO\\j6_c.WAV",
|
||||
"AUDIO\\j6_d.WAV",
|
||||
"AUDIO\\t4_a.WAV",
|
||||
"AUDIO\\s1_a.WAV",
|
||||
"AUDIO\\s1_a1.WAV",
|
||||
"AUDIO\\s1_b.WAV",
|
||||
"AUDIO\\s1_c.WAV",
|
||||
"AUDIO\\s1_c1.WAV",
|
||||
"AUDIO\\s1_d.WAV",
|
||||
"AUDIO\\s1_e.WAV",
|
||||
"AUDIO\\s1_f.WAV",
|
||||
"AUDIO\\s1_g.WAV",
|
||||
"AUDIO\\s1_h.WAV",
|
||||
"AUDIO\\s1_i.WAV",
|
||||
"AUDIO\\s1_j.WAV",
|
||||
"AUDIO\\s1_k.WAV",
|
||||
"AUDIO\\s1_l.WAV",
|
||||
"AUDIO\\s3_a.WAV",
|
||||
"AUDIO\\s3_b.WAV",
|
||||
"AUDIO\\el3_a.WAV",
|
||||
"AUDIO\\mf1_a.WAV",
|
||||
"AUDIO\\mf2_a.WAV",
|
||||
"AUDIO\\mf3_a.WAV",
|
||||
"AUDIO\\mf3_b.WAV",
|
||||
"AUDIO\\mf3_b1.WAV",
|
||||
"AUDIO\\mf3_c.WAV",
|
||||
"AUDIO\\mf4_a.WAV",
|
||||
"AUDIO\\mf4_b.WAV",
|
||||
"AUDIO\\mf4_c.WAV",
|
||||
"AUDIO\\a1_a.WAV",
|
||||
"AUDIO\\a3_a.WAV",
|
||||
"AUDIO\\a5_a.WAV",
|
||||
"AUDIO\\a4_a.WAV",
|
||||
"AUDIO\\a4_b.WAV",
|
||||
"AUDIO\\a4_c.WAV",
|
||||
"AUDIO\\a4_d.WAV",
|
||||
"AUDIO\\k1_a.WAV",
|
||||
"AUDIO\\k3_a.WAV",
|
||||
"AUDIO\\r1_a.WAV",
|
||||
"AUDIO\\r2_a.WAV",
|
||||
"AUDIO\\r2_b.WAV",
|
||||
"AUDIO\\r2_c.WAV",
|
||||
"AUDIO\\r2_d.WAV",
|
||||
"AUDIO\\r2_e.WAV",
|
||||
"AUDIO\\r2_f.WAV",
|
||||
"AUDIO\\r2_g.WAV",
|
||||
"AUDIO\\r2_h.WAV",
|
||||
"AUDIO\\r5_a.WAV",
|
||||
"AUDIO\\r6_a.WAV",
|
||||
"AUDIO\\r6_a1.WAV",
|
||||
"AUDIO\\r6_b.WAV",
|
||||
"AUDIO\\lo2_a.WAV",
|
||||
"AUDIO\\lo6_a.WAV",
|
||||
"AUDIO\\yd2_a.WAV",
|
||||
"AUDIO\\yd2_b.WAV",
|
||||
"AUDIO\\yd2_c.WAV",
|
||||
"AUDIO\\yd2_c1.WAV",
|
||||
"AUDIO\\yd2_d.WAV",
|
||||
"AUDIO\\yd2_e.WAV",
|
||||
"AUDIO\\yd2_f.WAV",
|
||||
"AUDIO\\yd2_g.WAV",
|
||||
"AUDIO\\yd2_h.WAV",
|
||||
"AUDIO\\yd2_ass.WAV",
|
||||
"AUDIO\\yd2_ok.WAV",
|
||||
"AUDIO\\h5_a.WAV",
|
||||
"AUDIO\\h5_b.WAV",
|
||||
"AUDIO\\h5_c.WAV",
|
||||
"AUDIO\\ammu_a.WAV",
|
||||
"AUDIO\\ammu_b.WAV",
|
||||
"AUDIO\\ammu_c.WAV",
|
||||
"AUDIO\\door_1.WAV",
|
||||
"AUDIO\\door_2.WAV",
|
||||
"AUDIO\\door_3.WAV",
|
||||
"AUDIO\\door_4.WAV",
|
||||
"AUDIO\\door_5.WAV",
|
||||
"AUDIO\\door_6.WAV",
|
||||
"AUDIO\\t3_a.WAV",
|
||||
"AUDIO\\t3_b.WAV",
|
||||
"AUDIO\\t3_c.WAV",
|
||||
"AUDIO\\k1_b.WAV",
|
||||
"AUDIO\\cat1.WAV"
|
||||
};
|
||||
#endif
|
||||
static char StreamedNameTable[][40] = {
|
||||
"AUDIO\\MUSIC\\HEAD",
|
||||
"AUDIO\\MUSIC\\DOUBLE",
|
||||
"AUDIO\\MUSIC\\KJAH",
|
||||
"AUDIO\\MUSIC\\RISE",
|
||||
"AUDIO\\MUSIC\\LIPS",
|
||||
"AUDIO\\MUSIC\\MUNDO",
|
||||
"AUDIO\\MUSIC\\MSX",
|
||||
"AUDIO\\MUSIC\\FLASH",
|
||||
"AUDIO\\MUSIC\\LCJ",
|
||||
"AUDIO\\MUSIC\\LCFR",
|
||||
"AUDIO\\MUSIC\\MISCOM2",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\WATER",
|
||||
"AUDIO\\MUSIC\\SAWMILL",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\WATER",
|
||||
"AUDIO\\MUSIC\\WATER",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\CITY",
|
||||
"AUDIO\\MUSIC\\POLICE",
|
||||
"AUDIO\\MUSIC\\TAXI",
|
||||
"AUDIO\\NEWS\\NEWS_A",
|
||||
"AUDIO\\NEWS\\NEWS_B",
|
||||
"AUDIO\\NEWS\\NEWS_C",
|
||||
"AUDIO\\NEWS\\NEWS_D",
|
||||
"AUDIO\\NEWS\\NEWS_E",
|
||||
"AUDIO\\NEWS\\NEWS_F",
|
||||
"AUDIO\\NEWS\\NEWS_G",
|
||||
"AUDIO\\NEWS\\NEWS_H",
|
||||
"AUDIO\\NEWS\\NEWS_I",
|
||||
"AUDIO\\NEWS\\NEWS_J",
|
||||
"AUDIO\\NEWS\\NEWS_K",
|
||||
"AUDIO\\NEWS\\NEWS_L",
|
||||
"AUDIO\\NEWS\\NEWS_M",
|
||||
"AUDIO\\NEWS\\NEWS_N",
|
||||
"AUDIO\\CUTSCENE\\BIKER",
|
||||
"AUDIO\\CUTSCENE\\BONEVOY",
|
||||
"AUDIO\\CUTSCENE\\CAMPAIN",
|
||||
"AUDIO\\CUTSCENE\\CASHCHP",
|
||||
"AUDIO\\CUTSCENE\\CONTBAN",
|
||||
"AUDIO\\CUTSCENE\\CRAZY69",
|
||||
"AUDIO\\CUTSCENE\\CRAZY69",
|
||||
"AUDIO\\CUTSCENE\\DEADLY",
|
||||
"AUDIO\\CUTSCENE\\DONPROB",
|
||||
"AUDIO\\CUTSCENE\\DRIVNMR",
|
||||
"AUDIO\\CUTSCENE\\ELECTON",
|
||||
"AUDIO\\CUTSCENE\\FINAL",
|
||||
"AUDIO\\CUTSCENE\\FINAL_2",
|
||||
"AUDIO\\CUTSCENE\\HOMSWET",
|
||||
"AUDIO\\CUTSCENE\\HOTWHEL",
|
||||
"AUDIO\\CUTSCENE\\KIDNAPP",
|
||||
"AUDIO\\CUTSCENE\\LANDGRB",
|
||||
"AUDIO\\CUTSCENE\\MORGUE",
|
||||
"AUDIO\\CUTSCENE\\OVERDOS",
|
||||
"AUDIO\\CUTSCENE\\RUFJUST",
|
||||
"AUDIO\\CUTSCENE\\SAYONAR",
|
||||
"AUDIO\\CUTSCENE\\SICILAN",
|
||||
"AUDIO\\CUTSCENE\\THEOFER",
|
||||
"AUDIO\\CUTSCENE\\INTRO",
|
||||
"AUDIO\\MUSIC\\FINALE",
|
||||
"AUDIO\\MUSIC\\MISCOM2"
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -115,6 +115,11 @@ cSampleManager::SetMusicMasterVolume(uint8 nVolume)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetMP3BoostVolume(uint8 nVolume)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetEffectsFadeVolume(uint8 nVolume)
|
||||
{
|
||||
@@ -126,7 +131,7 @@ cSampleManager::SetMusicFadeVolume(uint8 nVolume)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetMonoMode(uint8 nMode)
|
||||
cSampleManager::SetMonoMode(bool8 nMode)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -143,20 +148,36 @@ cSampleManager::UnloadSampleBank(uint8 nBank)
|
||||
ASSERT( nBank < MAX_SFX_BANKS );
|
||||
}
|
||||
|
||||
bool8
|
||||
int8
|
||||
cSampleManager::IsSampleBankLoaded(uint8 nBank)
|
||||
{
|
||||
ASSERT( nBank < MAX_SFX_BANKS );
|
||||
|
||||
return FALSE;
|
||||
return LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
|
||||
uint8
|
||||
cSampleManager::IsMissionAudioLoaded(uint8 nSlot, uint32 nSample)
|
||||
{
|
||||
ASSERT(nSlot < MISSION_AUDIO_COUNT);
|
||||
|
||||
return LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
|
||||
bool8
|
||||
cSampleManager::LoadMissionAudio(uint8 nSlot, uint32 nSample)
|
||||
{
|
||||
ASSERT(nSlot < MISSION_AUDIO_COUNT);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uint8
|
||||
cSampleManager::IsPedCommentLoaded(uint32 nComment)
|
||||
{
|
||||
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
||||
|
||||
return FALSE;
|
||||
return LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,14 +200,14 @@ cSampleManager::GetBankContainingSound(uint32 offset)
|
||||
return INVALID_SFX_BANK;
|
||||
}
|
||||
|
||||
int32
|
||||
uint32
|
||||
cSampleManager::GetSampleBaseFrequency(uint32 nSample)
|
||||
{
|
||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32
|
||||
uint32
|
||||
cSampleManager::GetSampleLoopStartOffset(uint32 nSample)
|
||||
{
|
||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||
@@ -301,7 +322,7 @@ cSampleManager::StopChannel(uint32 nChannel)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::PreloadStreamedFile(uint8 nFile, uint8 nStream)
|
||||
cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream)
|
||||
{
|
||||
ASSERT( nStream < MAX_STREAMS );
|
||||
}
|
||||
@@ -319,7 +340,7 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
||||
}
|
||||
|
||||
bool8
|
||||
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
||||
{
|
||||
ASSERT( nStream < MAX_STREAMS );
|
||||
|
||||
@@ -341,7 +362,7 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream)
|
||||
cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream)
|
||||
{
|
||||
ASSERT( nStream < MAX_STREAMS );
|
||||
}
|
||||
@@ -369,4 +390,14 @@ cSampleManager::InitialiseSampleBanks(void)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetStreamedFileLoopFlag(bool8 nLoopFlag, uint8 nChannel)
|
||||
{
|
||||
}
|
||||
|
||||
int8 cSampleManager::AutoDetect3DProviders()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -66,14 +66,14 @@ int usingEAX3=0;
|
||||
ALCdevice *ALDevice = NULL;
|
||||
ALCcontext *ALContext = NULL;
|
||||
unsigned int _maxSamples;
|
||||
float _fPrevEaxRatioDestination;
|
||||
float _fPrevEaxRatioDestination;
|
||||
bool _effectsSupported = false;
|
||||
bool _usingEFX;
|
||||
float _fEffectsLevel;
|
||||
ALuint ALEffect = AL_EFFECT_NULL;
|
||||
ALuint ALEffectSlot = AL_EFFECTSLOT_NULL;
|
||||
struct
|
||||
{
|
||||
{
|
||||
const char *id;
|
||||
char name[256];
|
||||
int sources;
|
||||
@@ -92,7 +92,7 @@ OggOpusFile *fpSampleDataHandle;
|
||||
#else
|
||||
FILE *fpSampleDataHandle;
|
||||
#endif
|
||||
bool8 bSampleBankLoaded [MAX_SFX_BANKS];
|
||||
int8 gBankLoaded [MAX_SFX_BANKS];
|
||||
int32 nSampleBankDiscStartOffset [MAX_SFX_BANKS];
|
||||
int32 nSampleBankSize [MAX_SFX_BANKS];
|
||||
uintptr nSampleBankMemoryStartAddress[MAX_SFX_BANKS];
|
||||
@@ -102,6 +102,12 @@ int32 nPedSlotSfx [MAX_PEDSFX];
|
||||
int32 nPedSlotSfxAddr[MAX_PEDSFX];
|
||||
uint8 nCurrentPedSlot;
|
||||
|
||||
uint32 nMissionSlotSfx[MISSION_AUDIO_SLOTS] = { UINT32_MAX, UINT32_MAX };
|
||||
uintptr nMissionSlotSfxStartAddress;
|
||||
|
||||
uint32 gPlayerTalkSfx = UINT32_MAX;
|
||||
void *gPlayerTalkData = 0;
|
||||
|
||||
CChannel aChannel[NUM_CHANNELS];
|
||||
uint8 nChannelVolume[NUM_CHANNELS];
|
||||
|
||||
@@ -126,6 +132,7 @@ char _mp3DirectoryPath[MAX_PATH];
|
||||
CStream *aStream[MAX_STREAMS];
|
||||
uint8 nStreamPan [MAX_STREAMS];
|
||||
uint8 nStreamVolume[MAX_STREAMS];
|
||||
bool8 nStreamLoopedFlag[MAX_STREAMS];
|
||||
uint32 _CurMP3Index;
|
||||
int32 _CurMP3Pos;
|
||||
bool8 _bIsMp3Active;
|
||||
@@ -157,7 +164,7 @@ static void
|
||||
add_providers()
|
||||
{
|
||||
SampleManager.SetNum3DProvidersAvailable(0);
|
||||
|
||||
|
||||
static ALDeviceList DeviceList;
|
||||
ALDeviceList *pDeviceList = &DeviceList;
|
||||
|
||||
@@ -170,7 +177,7 @@ add_providers()
|
||||
int i = pDeviceList->GetDefaultDevice();
|
||||
{
|
||||
if ( n < MAXPROVIDERS )
|
||||
{
|
||||
{
|
||||
providers[n].id = pDeviceList->GetDeviceName(i);
|
||||
strcpy(providers[n].name, "OPENAL SOFT");
|
||||
providers[n].sources = pDeviceList->GetMaxNumSources(i);
|
||||
@@ -183,10 +190,10 @@ add_providers()
|
||||
|| pDeviceList->IsExtensionSupported(i, ADEXT_EAX3)
|
||||
|| pDeviceList->IsExtensionSupported(i, ADEXT_EAX4)
|
||||
|| pDeviceList->IsExtensionSupported(i, ADEXT_EAX5) )
|
||||
{
|
||||
{
|
||||
providers[n - 1].bSupportsFx = true;
|
||||
if ( n < MAXPROVIDERS )
|
||||
{
|
||||
{
|
||||
providers[n].id = pDeviceList->GetDeviceName(i);
|
||||
strcpy(providers[n].name, "OPENAL SOFT EAX");
|
||||
providers[n].sources = pDeviceList->GetMaxNumSources(i);
|
||||
@@ -196,7 +203,7 @@ add_providers()
|
||||
}
|
||||
|
||||
if ( n < MAXPROVIDERS )
|
||||
{
|
||||
{
|
||||
providers[n].id = pDeviceList->GetDeviceName(i);
|
||||
strcpy(providers[n].name, "OPENAL SOFT EAX3");
|
||||
providers[n].sources = pDeviceList->GetMaxNumSources(i);
|
||||
@@ -210,7 +217,7 @@ add_providers()
|
||||
|
||||
for(int j=n;j<MAXPROVIDERS;j++)
|
||||
SampleManager.Set3DProviderName(j, NULL);
|
||||
|
||||
|
||||
// devices are gone now
|
||||
//defaultProvider = pDeviceList->GetDefaultDevice();
|
||||
//if ( defaultProvider > MAXPROVIDERS )
|
||||
@@ -233,7 +240,7 @@ release_existing()
|
||||
alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, AL_EFFECT_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEV("release_existing()\n");
|
||||
}
|
||||
|
||||
@@ -284,7 +291,7 @@ set_new_provider(int index)
|
||||
}
|
||||
|
||||
//SampleManager.SetSpeakerConfig(speaker_type);
|
||||
|
||||
|
||||
if ( IsFXSupported() )
|
||||
{
|
||||
for ( int32 i = 0; i < MAXCHANNELS; i++ )
|
||||
@@ -300,7 +307,7 @@ set_new_provider(int index)
|
||||
static bool8
|
||||
IsThisTrackAt16KHz(uint32 track)
|
||||
{
|
||||
return track == STREAMED_SOUND_RADIO_CHAT;
|
||||
return false;// track == STREAMED_SOUND_RADIO_KCHAT || track == STREAMED_SOUND_RADIO_VCPR || track == STREAMED_SOUND_RADIO_POLICE;
|
||||
}
|
||||
|
||||
cSampleManager::cSampleManager(void)
|
||||
@@ -313,6 +320,80 @@ cSampleManager::~cSampleManager(void)
|
||||
|
||||
}
|
||||
|
||||
int gBankStartOffset[67];
|
||||
|
||||
void
|
||||
SetUpDebugBanksInfo()
|
||||
{
|
||||
gBankStartOffset[3] = SFX_FE_BACK;
|
||||
gBankStartOffset[4] = SFX_CAR_ACCEL_1;
|
||||
gBankStartOffset[5] = SFX_CAR_ACCEL_2;
|
||||
gBankStartOffset[9] = SFX_CAR_ACCEL_6;
|
||||
gBankStartOffset[10] = SFX_CAR_ACCEL_7;
|
||||
gBankStartOffset[1] = SFX_EMPTY;
|
||||
gBankStartOffset[11] = SFX_CAR_ACCEL_8;
|
||||
gBankStartOffset[7] = SFX_CAR_ACCEL_4;
|
||||
gBankStartOffset[15] = SFX_CAR_ACCEL_12;
|
||||
gBankStartOffset[13] = SFX_CAR_ACCEL_10;
|
||||
gBankStartOffset[16] = SFX_CAR_CHAINSAW_IDLE;
|
||||
gBankStartOffset[0] = SFX_AIR_BRAKES;
|
||||
gBankStartOffset[17] = SFX_RC_IDLE;
|
||||
gBankStartOffset[6] = SFX_CAR_ACCEL_3;
|
||||
gBankStartOffset[19] = SFX_CAR_ACCEL_16;
|
||||
gBankStartOffset[12] = SFX_CAR_ACCEL_9;
|
||||
gBankStartOffset[2] = SFX_AMBULAN_VOICE_1_VAN_1;
|
||||
gBankStartOffset[21] = SFX_CAR_ACCEL_18;
|
||||
gBankStartOffset[22] = SFX_CAR_ACCEL_19;
|
||||
gBankStartOffset[8] = SFX_CAR_ACCEL_5;
|
||||
gBankStartOffset[23] = SFX_CAR_ACCEL_20;
|
||||
gBankStartOffset[14] = SFX_CAR_ACCEL_11;
|
||||
gBankStartOffset[20] = SFX_CAR_ACCEL_17;
|
||||
gBankStartOffset[18] = SFX_CAR_RC_HELI;
|
||||
gBankStartOffset[25] = SFX_CAR_AFTER_ACCEL_21;
|
||||
gBankStartOffset[26] = SFX_CAR_FINGER_OFF_ACCEL_21;
|
||||
gBankStartOffset[27] = SFX_CAR_ACCEL_22;
|
||||
gBankStartOffset[28] = SFX_CAR_AFTER_ACCEL_22;
|
||||
gBankStartOffset[29] = SFX_CAR_FINGER_OFF_ACCEL_22;
|
||||
gBankStartOffset[24] = SFX_CAR_ACCEL_21;
|
||||
gBankStartOffset[30] = SFX_HELI_APACHE_1;
|
||||
gBankStartOffset[31] = SFX_HELI_UNUSED_1;
|
||||
gBankStartOffset[32] = SFX_HELI_UNUSED_2;
|
||||
gBankStartOffset[33] = SFX_HELI_UNUSED_3;
|
||||
gBankStartOffset[34] = SFX_HELI_UNUSED_4;
|
||||
gBankStartOffset[35] = SFX_SEAPLANE_LOW;
|
||||
gBankStartOffset[37] = SFX_PLANE_UNUSED_2;
|
||||
gBankStartOffset[38] = SFX_PLANE_UNUSED_3;
|
||||
gBankStartOffset[39] = SFX_PLANE_UNUSED_4;
|
||||
gBankStartOffset[40] = SFX_BUILDINGS_BANK_ALARM;
|
||||
gBankStartOffset[41] = SFX_BUILDING_SNORE;
|
||||
gBankStartOffset[36] = SFX_PLANE_UNUSED_1;
|
||||
gBankStartOffset[43] = SFX_BUILDING_BAR_2;
|
||||
gBankStartOffset[44] = SFX_BUILDING_BAR_3;
|
||||
gBankStartOffset[45] = SFX_BUILDING_BAR_4;
|
||||
gBankStartOffset[46] = SFX_BUILDING_MALIBU_1;
|
||||
gBankStartOffset[47] = SFX_BUILDING_MALIBU_2;
|
||||
gBankStartOffset[42] = SFX_BUILDING_BAR_1;
|
||||
gBankStartOffset[49] = SFX_BUILDING_STRIP_1;
|
||||
gBankStartOffset[50] = SFX_BUILDING_STRIP_2;
|
||||
gBankStartOffset[51] = SFX_BUILDING_STRIP_3;
|
||||
gBankStartOffset[52] = SFX_BUILDING_CHURCH;
|
||||
gBankStartOffset[53] = SFX_BUILDING_FAN_1;
|
||||
gBankStartOffset[48] = SFX_BUILDING_MALIBU_3;
|
||||
gBankStartOffset[55] = SFX_BUILDING_INSECTS_1;
|
||||
gBankStartOffset[56] = SFX_BUILDING_INSECTS_2;
|
||||
gBankStartOffset[54] = SFX_BUILDING_FAN_2;
|
||||
gBankStartOffset[57] = SFX_CLUB_1;
|
||||
gBankStartOffset[58] = SFX_CLUB_2;
|
||||
gBankStartOffset[59] = SFX_CLUB_3;
|
||||
gBankStartOffset[60] = SFX_CLUB_4;
|
||||
gBankStartOffset[61] = SFX_FOOTSTEP_GRASS_1;
|
||||
gBankStartOffset[62] = SFX_FOOTSTEP_GRAVEL_1;
|
||||
gBankStartOffset[63] = SFX_FOOTSTEP_WOOD_1;
|
||||
gBankStartOffset[64] = SFX_FOOTSTEP_METAL_1;
|
||||
gBankStartOffset[65] = SFX_FOOTSTEP_WATER_1;
|
||||
gBankStartOffset[66] = SFX_FOOTSTEP_SAND_1;
|
||||
}
|
||||
|
||||
void cSampleManager::SetSpeakerConfig(int32 nConfig)
|
||||
{
|
||||
|
||||
@@ -365,6 +446,31 @@ int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider)
|
||||
return curprovider;
|
||||
}
|
||||
|
||||
int8
|
||||
cSampleManager::AutoDetect3DProviders()
|
||||
{
|
||||
if (!AudioManager.IsAudioInitialised())
|
||||
return -1;
|
||||
|
||||
if (defaultProvider >= 0 && defaultProvider < m_nNumberOfProviders) {
|
||||
if (set_new_provider(defaultProvider))
|
||||
return defaultProvider;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < GetNum3DProvidersAvailable(); i++)
|
||||
{
|
||||
char* providername = Get3DProviderName(i);
|
||||
|
||||
if (!strcasecmp(providername, "OPENAL SOFT")) {
|
||||
SetCurrent3DProvider(i);
|
||||
if (GetCurrent3DProviderIndex() == i)
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool8
|
||||
_ResolveLink(char const *path, char *out)
|
||||
{
|
||||
@@ -733,7 +839,7 @@ cSampleManager::Initialise(void)
|
||||
{
|
||||
if ( _bSampmanInitialised )
|
||||
return TRUE;
|
||||
|
||||
SetUpDebugBanksInfo();
|
||||
EFXInit();
|
||||
|
||||
for(int i = 0; i < MAX_STREAMS; i++)
|
||||
@@ -781,7 +887,7 @@ cSampleManager::Initialise(void)
|
||||
|
||||
for ( int32 i = 0; i < MAX_SFX_BANKS; i++ )
|
||||
{
|
||||
bSampleBankLoaded[i] = FALSE;
|
||||
gBankLoaded[i] = LOADING_STATUS_NOT_LOADED;
|
||||
nSampleBankDiscStartOffset[i] = 0;
|
||||
nSampleBankSize[i] = 0;
|
||||
nSampleBankMemoryStartAddress[i] = 0;
|
||||
@@ -840,7 +946,7 @@ cSampleManager::Initialise(void)
|
||||
alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
|
||||
|
||||
if ( alcIsExtensionPresent(ALDevice, (ALCchar*)ALC_EXT_EFX_NAME) )
|
||||
{
|
||||
{
|
||||
_effectsSupported = providers[index].bSupportsFx;
|
||||
alGenAuxiliaryEffectSlots(1, &ALEffectSlot);
|
||||
alGenEffects(1, &ALEffect);
|
||||
@@ -849,14 +955,14 @@ cSampleManager::Initialise(void)
|
||||
alGenSources(MAX_STREAMS*2, ALStreamSources[0]);
|
||||
for ( int32 i = 0; i < MAX_STREAMS; i++ )
|
||||
{
|
||||
alGenBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]);
|
||||
alGenBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]);
|
||||
alSourcei(ALStreamSources[i][0], AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
alSource3f(ALStreamSources[i][0], AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||
alSourcef(ALStreamSources[i][0], AL_GAIN, 1.0f);
|
||||
alSourcei(ALStreamSources[i][1], AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
alSource3f(ALStreamSources[i][1], AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||
alSourcef(ALStreamSources[i][1], AL_GAIN, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
CChannel::InitChannels();
|
||||
|
||||
@@ -875,7 +981,7 @@ cSampleManager::Initialise(void)
|
||||
aChannel[i].SetReverbMix(ALEffectSlot, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ )
|
||||
nStreamLength[i] = 0;
|
||||
@@ -894,14 +1000,25 @@ cSampleManager::Initialise(void)
|
||||
|
||||
for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ )
|
||||
{
|
||||
if(aStream[0] && (
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
aStream[0]->Open(PS2StreamedNameTable[i], IsThisTrackAt16KHz(i) ? 16000 : 32000) ||
|
||||
#endif
|
||||
aStream[0]->Open(StreamedNameTable[i], IsThisTrackAt16KHz(i) ? 16000 : 32000)))
|
||||
bool opened = false;
|
||||
char filename[MAX_PATH];
|
||||
sprintf(filename, "%s.VB", StreamedNameTable[i]);
|
||||
if ( aStream[0] )
|
||||
opened = aStream[0]->Open(filename, IsThisTrackAt16KHz(i) ? 16000 : 32000);
|
||||
|
||||
if ( !opened )
|
||||
{
|
||||
sprintf(filename, "%s.MP3", StreamedNameTable[i]);
|
||||
if ( aStream[0] )
|
||||
{
|
||||
opened = aStream[0]->Open(filename, IsThisTrackAt16KHz(i) ? 16000 : 32000);
|
||||
}
|
||||
}
|
||||
if ( opened )
|
||||
{
|
||||
uint32 tatalms = aStream[0]->GetLengthMS();
|
||||
aStream[0]->Close();
|
||||
|
||||
nStreamLength[i] = tatalms;
|
||||
} else
|
||||
USERERROR("Can't open '%s'\n", StreamedNameTable[i]);
|
||||
@@ -936,7 +1053,18 @@ cSampleManager::Initialise(void)
|
||||
|
||||
nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] = (uintptr)malloc(PED_BLOCKSIZE*MAX_PEDSFX);
|
||||
ASSERT(nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] != 0);
|
||||
|
||||
|
||||
nMissionSlotSfxStartAddress = (uintptr)malloc(MISSION_AUDIO_BLOCKSIZE*MISSION_AUDIO_SLOTS);
|
||||
ASSERT(nMissionSlotSfxStartAddress != 0);
|
||||
|
||||
// Find biggest player comment
|
||||
uint32 nMaxPedSize = 0;
|
||||
for (uint32 i = PLAYER_COMMENTS_START; i <= PLAYER_COMMENTS_END; i++)
|
||||
nMaxPedSize = Max(nMaxPedSize, m_aSamples[i].nSize);
|
||||
|
||||
gPlayerTalkData = malloc(nMaxPedSize);
|
||||
ASSERT(gPlayerTalkData != 0);
|
||||
|
||||
LoadSampleBank(SFX_BANK_0);
|
||||
}
|
||||
|
||||
@@ -1035,7 +1163,7 @@ cSampleManager::Terminate(void)
|
||||
|
||||
for ( int32 i = 0; i < NUM_CHANNELS; i++ )
|
||||
aChannel[i].Term();
|
||||
|
||||
|
||||
if ( IsFXSupported() )
|
||||
{
|
||||
if ( alIsEffect(ALEffect) )
|
||||
@@ -1053,7 +1181,7 @@ cSampleManager::Terminate(void)
|
||||
ALEffectSlot = AL_EFFECTSLOT_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for ( int32 i = 0; i < MAX_STREAMS; i++ )
|
||||
{
|
||||
alDeleteBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]);
|
||||
@@ -1077,7 +1205,7 @@ cSampleManager::Terminate(void)
|
||||
_fPrevEaxRatioDestination = 0.0f;
|
||||
_usingEFX = false;
|
||||
_fEffectsLevel = 0.0f;
|
||||
|
||||
|
||||
_DeleteMP3Entries();
|
||||
|
||||
CStream::Terminate();
|
||||
@@ -1096,6 +1224,21 @@ cSampleManager::Terminate(void)
|
||||
free((void *)nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS]);
|
||||
nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] = 0;
|
||||
}
|
||||
|
||||
if ( nMissionSlotSfxStartAddress != 0 )
|
||||
{
|
||||
free((void*)nMissionSlotSfxStartAddress);
|
||||
nMissionSlotSfxStartAddress = 0;
|
||||
|
||||
for ( uint32 i = 0; i < MISSION_AUDIO_SLOTS; i++ )
|
||||
nMissionSlotSfx[i] = UINT32_MAX;
|
||||
}
|
||||
|
||||
if ( gPlayerTalkData != 0 )
|
||||
{
|
||||
free(gPlayerTalkData);
|
||||
gPlayerTalkData = 0;
|
||||
}
|
||||
|
||||
_bSampmanInitialised = FALSE;
|
||||
}
|
||||
@@ -1139,6 +1282,12 @@ cSampleManager::SetMusicMasterVolume(uint8 nVolume)
|
||||
m_nMusicVolume = nVolume;
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetMP3BoostVolume(uint8 nVolume)
|
||||
{
|
||||
m_nMP3BoostVolume = nVolume;
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetEffectsFadeVolume(uint8 nVolume)
|
||||
{
|
||||
@@ -1153,7 +1302,7 @@ cSampleManager::SetMusicFadeVolume(uint8 nVolume)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetMonoMode(uint8 nMode)
|
||||
cSampleManager::SetMonoMode(bool8 nMode)
|
||||
{
|
||||
m_nMonoMode = nMode;
|
||||
}
|
||||
@@ -1194,7 +1343,7 @@ cSampleManager::LoadSampleBank(uint8 nBank)
|
||||
if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fpSampleDataHandle) != nSampleBankSize[nBank] )
|
||||
return FALSE;
|
||||
#endif
|
||||
bSampleBankLoaded[nBank] = TRUE;
|
||||
gBankLoaded[nBank] = LOADING_STATUS_LOADED;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1204,18 +1353,63 @@ cSampleManager::UnloadSampleBank(uint8 nBank)
|
||||
{
|
||||
ASSERT( nBank < MAX_SFX_BANKS);
|
||||
|
||||
bSampleBankLoaded[nBank] = FALSE;
|
||||
gBankLoaded[nBank] = LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
|
||||
bool8
|
||||
int8
|
||||
cSampleManager::IsSampleBankLoaded(uint8 nBank)
|
||||
{
|
||||
ASSERT( nBank < MAX_SFX_BANKS);
|
||||
|
||||
return bSampleBankLoaded[nBank];
|
||||
return gBankLoaded[nBank];
|
||||
}
|
||||
|
||||
uint8
|
||||
cSampleManager::IsMissionAudioLoaded(uint8 nSlot, uint32 nSample)
|
||||
{
|
||||
ASSERT(nSlot != MISSION_AUDIO_POLRADIO_CRIME_OR_COLOR && nSlot != MISSION_AUDIO_POLRADIO_AREA_OR_CAR); // these are not used in LCS
|
||||
|
||||
switch (nSlot)
|
||||
{
|
||||
case MISSION_AUDIO_SLOT_1:
|
||||
case MISSION_AUDIO_SLOT_2:
|
||||
return nMissionSlotSfx[nSlot] == nSample ? LOADING_STATUS_LOADED : LOADING_STATUS_NOT_LOADED;
|
||||
case MISSION_AUDIO_PLAYER_COMMENT:
|
||||
return nSample == gPlayerTalkSfx ? LOADING_STATUS_LOADED : LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8
|
||||
cSampleManager::LoadMissionAudio(uint8 nSlot, uint32 nSample)
|
||||
{
|
||||
ASSERT(nSlot != MISSION_AUDIO_POLRADIO_CRIME_OR_COLOR && nSlot != MISSION_AUDIO_POLRADIO_AREA_OR_CAR); // these are not used in LCS
|
||||
ASSERT(nSample < TOTAL_AUDIO_SAMPLES);
|
||||
|
||||
if (fseek(fpSampleDataHandle, m_aSamples[nSample].nOffset, SEEK_SET) != 0)
|
||||
return FALSE;
|
||||
|
||||
switch (nSlot)
|
||||
{
|
||||
case MISSION_AUDIO_SLOT_1:
|
||||
case MISSION_AUDIO_SLOT_2:
|
||||
if (fread((void*)(nMissionSlotSfxStartAddress + nSlot*MISSION_AUDIO_BLOCKSIZE), 1, m_aSamples[nSample].nSize, fpSampleDataHandle) != m_aSamples[nSample].nSize)
|
||||
return FALSE;
|
||||
|
||||
nMissionSlotSfx[nSlot] = nSample;
|
||||
break;
|
||||
case MISSION_AUDIO_PLAYER_COMMENT:
|
||||
if (fread(gPlayerTalkData, 1, m_aSamples[nSample].nSize, fpSampleDataHandle) != m_aSamples[nSample].nSize)
|
||||
return FALSE;
|
||||
|
||||
gPlayerTalkSfx = nSample;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint8
|
||||
cSampleManager::IsPedCommentLoaded(uint32 nComment)
|
||||
{
|
||||
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
||||
@@ -1230,10 +1424,10 @@ cSampleManager::IsPedCommentLoaded(uint32 nComment)
|
||||
uint8 slot = nCurrentPedSlot - i - 1;
|
||||
#endif
|
||||
if ( nComment == nPedSlotSfx[slot] )
|
||||
return TRUE;
|
||||
return LOADING_STATUS_LOADED;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return LOADING_STATUS_NOT_LOADED;
|
||||
}
|
||||
|
||||
|
||||
@@ -1275,14 +1469,6 @@ cSampleManager::LoadPedComment(uint32 nComment)
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case MUSICMODE_FRONTEND:
|
||||
{
|
||||
if ( MusicManager.GetNextTrack() == STREAMED_SOUND_GAME_COMPLETED )
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1291,7 +1477,7 @@ cSampleManager::LoadPedComment(uint32 nComment)
|
||||
int samplesSize = m_aSamples[nComment].nSize / 2;
|
||||
op_pcm_seek(fpSampleDataHandle, m_aSamples[nComment].nOffset / 2);
|
||||
while (samplesSize > 0) {
|
||||
int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead),
|
||||
int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead),
|
||||
samplesSize, NULL);
|
||||
if (size <= 0) {
|
||||
return FALSE;
|
||||
@@ -1327,14 +1513,14 @@ cSampleManager::GetBankContainingSound(uint32 offset)
|
||||
return INVALID_SFX_BANK;
|
||||
}
|
||||
|
||||
int32
|
||||
uint32
|
||||
cSampleManager::GetSampleBaseFrequency(uint32 nSample)
|
||||
{
|
||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||
return m_aSamples[nSample].nFrequency;
|
||||
}
|
||||
|
||||
int32
|
||||
uint32
|
||||
cSampleManager::GetSampleLoopStartOffset(uint32 nSample)
|
||||
{
|
||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||
@@ -1363,29 +1549,25 @@ bool8 cSampleManager::UpdateReverb(void)
|
||||
if ( AudioManager.m_FrameCounter & 15 )
|
||||
return FALSE;
|
||||
|
||||
float fRatio = 0.0f;
|
||||
|
||||
#ifdef AUDIO_REFLECTIONS
|
||||
float y = AudioManager.m_afReflectionsDistances[REFLECTION_TOP] + AudioManager.m_afReflectionsDistances[REFLECTION_BOTTOM];
|
||||
float x = AudioManager.m_afReflectionsDistances[REFLECTION_LEFT] + AudioManager.m_afReflectionsDistances[REFLECTION_RIGHT];
|
||||
float z = AudioManager.m_afReflectionsDistances[REFLECTION_UP];
|
||||
#else
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
float z = 0.0f;
|
||||
#define MIN_DIST 0.5f
|
||||
#define CALCULATE_RATIO(value, maxDist, maxRatio) (value > MIN_DIST && value < maxDist ? value / maxDist * maxRatio : 0)
|
||||
|
||||
fRatio += CALCULATE_RATIO(AudioManager.m_afReflectionsDistances[REFLECTION_CEIL_NORTH], 10.0f, 1/2.f);
|
||||
fRatio += CALCULATE_RATIO(AudioManager.m_afReflectionsDistances[REFLECTION_CEIL_SOUTH], 10.0f, 1/2.f);
|
||||
fRatio += CALCULATE_RATIO(AudioManager.m_afReflectionsDistances[REFLECTION_CEIL_WEST], 10.0f, 1/2.f);
|
||||
fRatio += CALCULATE_RATIO(AudioManager.m_afReflectionsDistances[REFLECTION_CEIL_EAST], 10.0f, 1/2.f);
|
||||
|
||||
fRatio += CALCULATE_RATIO((AudioManager.m_afReflectionsDistances[REFLECTION_NORTH] + AudioManager.m_afReflectionsDistances[REFLECTION_SOUTH]) / 2.f, 4.0f, 1/3.f);
|
||||
fRatio += CALCULATE_RATIO((AudioManager.m_afReflectionsDistances[REFLECTION_WEST] + AudioManager.m_afReflectionsDistances[REFLECTION_EAST]) / 2.f, 4.0f, 1/3.f);
|
||||
|
||||
#undef CALCULATE_RATIO
|
||||
#undef MIN_DIST
|
||||
#endif
|
||||
|
||||
float normy = norm(y, 5.0f, 40.0f);
|
||||
float normx = norm(x, 5.0f, 40.0f);
|
||||
float normz = norm(z, 5.0f, 40.0f);
|
||||
|
||||
#define ZR(v, a, b) (((v)==0)?(a):(b))
|
||||
#define CALCRATIO(x,y,z,min,max,val) (ZR(y, ZR(x, ZR(z, min, max), min), ZR(x, ZR(z, min, max), ZR(z, min, val))))
|
||||
|
||||
float fRatio = CALCRATIO(normx, normy, normz, 0.3f, 0.5f, (normy+normx+normz)/3.0f);
|
||||
|
||||
#undef CALCRATIO
|
||||
#undef ZR
|
||||
|
||||
fRatio = Clamp(fRatio, usingEAX3==1 ? 0.0f : 0.30f, 1.0f);
|
||||
fRatio = Clamp(fRatio, 0.0f, 0.6f);
|
||||
|
||||
if ( fRatio == _fPrevEaxRatioDestination )
|
||||
return FALSE;
|
||||
@@ -1396,6 +1578,7 @@ bool8 cSampleManager::UpdateReverb(void)
|
||||
if ( usingEAX3 )
|
||||
#endif
|
||||
{
|
||||
fRatio = Min(fRatio * 1.67f, 1.0f);
|
||||
if ( EAX3ListenerInterpolate(&StartEAX3, &FinishEAX3, fRatio, &EAX3Params, false) )
|
||||
{
|
||||
EAX_SetAll(&EAX3Params);
|
||||
@@ -1410,16 +1593,17 @@ bool8 cSampleManager::UpdateReverb(void)
|
||||
}
|
||||
*/
|
||||
|
||||
_fEffectsLevel = 1.0f - fRatio * 0.5f;
|
||||
_fEffectsLevel = fRatio * 0.75f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( _usingEFX )
|
||||
_fEffectsLevel = (1.0f - fRatio) * 0.4f;
|
||||
_fEffectsLevel = fRatio * 0.8f;
|
||||
else
|
||||
_fEffectsLevel = (1.0f - fRatio) * 0.7f;
|
||||
_fEffectsLevel = fRatio * 0.22f;
|
||||
}
|
||||
_fEffectsLevel = Min(_fEffectsLevel, 1.0f);
|
||||
|
||||
_fPrevEaxRatioDestination = fRatio;
|
||||
|
||||
@@ -1459,15 +1643,42 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
||||
|
||||
addr = nSampleBankMemoryStartAddress[nBank] + m_aSamples[nSfx].nOffset - m_aSamples[BankStartOffset[nBank]].nOffset;
|
||||
}
|
||||
else if ( nSfx >= PLAYER_COMMENTS_START && nSfx <= PLAYER_COMMENTS_END )
|
||||
{
|
||||
if ( !IsMissionAudioLoaded(MISSION_AUDIO_PLAYER_COMMENT, nSfx) )
|
||||
return FALSE;
|
||||
|
||||
addr = (uintptr)gPlayerTalkData;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !IsPedCommentLoaded(nSfx) )
|
||||
for ( uint32 i = 0; i < MISSION_AUDIO_SLOTS; i++ ) {
|
||||
if ( IsMissionAudioLoaded(i, nSfx) ) {
|
||||
addr = nMissionSlotSfxStartAddress + i * MISSION_AUDIO_BLOCKSIZE;
|
||||
goto MissionAudioFound;
|
||||
}
|
||||
}
|
||||
|
||||
int32 i;
|
||||
for ( i = 0; i < _TODOCONST(3); i++ )
|
||||
{
|
||||
int32 slot = nCurrentPedSlot - i - 1;
|
||||
#ifdef FIX_BUGS
|
||||
if (slot < 0)
|
||||
slot += ARRAY_SIZE(nPedSlotSfx);
|
||||
#endif
|
||||
if ( nSfx == nPedSlotSfx[slot] )
|
||||
{
|
||||
addr = (nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE * slot);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == _TODOCONST(3))
|
||||
return FALSE;
|
||||
|
||||
int32 slot = _GetPedCommentSlot(nSfx);
|
||||
addr = (nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE * slot);
|
||||
}
|
||||
|
||||
|
||||
MissionAudioFound:
|
||||
if ( GetChannelUsedFlag(nChannel) )
|
||||
{
|
||||
TRACE("Stopping channel %d - really!!!", nChannel);
|
||||
@@ -1496,12 +1707,11 @@ cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume)
|
||||
|
||||
nChannelVolume[nChannel] = vol;
|
||||
|
||||
// reduce channel volume when JB.MP3 or S4_BDBD.MP3 playing
|
||||
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
|
||||
&& MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
|
||||
&& MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
|
||||
{
|
||||
nChannelVolume[nChannel] = vol / 4;
|
||||
if (MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE ) {
|
||||
if (MusicManager.GetCurrentTrack() == STREAMED_SOUND_CUTSCENE_FINALE)
|
||||
nChannelVolume[nChannel] = 0;
|
||||
else
|
||||
nChannelVolume[nChannel] >>= 2;
|
||||
}
|
||||
|
||||
// no idea, does this one looks like a bug or it's SetChannelVolume ?
|
||||
@@ -1529,21 +1739,21 @@ cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume)
|
||||
ASSERT( nChannel >= MAXCHANNELS );
|
||||
ASSERT( nChannel < NUM_CHANNELS );
|
||||
|
||||
if ( nChannel == CHANNEL_POLICE_RADIO )
|
||||
if( nChannel >= CHANNEL_POLICE_RADIO )
|
||||
{
|
||||
uint32 vol = nVolume;
|
||||
if ( vol > MAX_VOLUME ) vol = MAX_VOLUME;
|
||||
|
||||
nChannelVolume[nChannel] = vol;
|
||||
|
||||
// reduce the volume for JB.MP3 and S4_BDBD.MP3
|
||||
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
|
||||
&& MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
|
||||
&& MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
|
||||
{
|
||||
nChannelVolume[nChannel] = vol / 4;
|
||||
// increase the volume for JB.MP3 and S4_BDBD.MP3
|
||||
if (MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE ) {
|
||||
if (MusicManager.GetCurrentTrack() == STREAMED_SOUND_CUTSCENE_FINALE)
|
||||
nChannelVolume[nChannel] = 0;
|
||||
else
|
||||
nChannelVolume[nChannel] >>= 2;
|
||||
}
|
||||
|
||||
|
||||
aChannel[nChannel].SetVolume(m_nEffectsFadeVolume*vol*m_nEffectsVolume >> 14);
|
||||
}
|
||||
}
|
||||
@@ -1554,7 +1764,7 @@ cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan)
|
||||
ASSERT( nChannel >= MAXCHANNELS );
|
||||
ASSERT( nChannel < NUM_CHANNELS );
|
||||
|
||||
if ( nChannel == CHANNEL_POLICE_RADIO )
|
||||
if ( nChannel >= CHANNEL_POLICE_RADIO )
|
||||
{
|
||||
aChannel[nChannel].SetPan(nPan);
|
||||
}
|
||||
@@ -1609,8 +1819,10 @@ cSampleManager::StopChannel(uint32 nChannel)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::PreloadStreamedFile(uint8 nFile, uint8 nStream)
|
||||
cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream)
|
||||
{
|
||||
char filename[MAX_PATH];
|
||||
|
||||
ASSERT( nStream < MAX_STREAMS );
|
||||
|
||||
if ( nFile < TOTAL_STREAMED_SOUNDS )
|
||||
@@ -1618,12 +1830,15 @@ cSampleManager::PreloadStreamedFile(uint8 nFile, uint8 nStream)
|
||||
CStream *stream = aStream[nStream];
|
||||
|
||||
stream->Close();
|
||||
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000))
|
||||
#endif
|
||||
stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
if ( !stream->Setup() )
|
||||
sprintf(filename, "%s.VB", StreamedNameTable[nFile]);
|
||||
bool opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
if ( !opened )
|
||||
{
|
||||
sprintf(filename, "%s.MP3", StreamedNameTable[nFile]);
|
||||
opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
}
|
||||
|
||||
if ( opened && !stream->Setup() )
|
||||
{
|
||||
stream->Close();
|
||||
}
|
||||
@@ -1657,12 +1872,12 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
||||
}
|
||||
|
||||
bool8
|
||||
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
||||
{
|
||||
uint32 i = 0;
|
||||
uint32 position = nPos;
|
||||
char filename[MAX_PATH];
|
||||
|
||||
|
||||
if ( nFile >= TOTAL_STREAMED_SOUNDS )
|
||||
return FALSE;
|
||||
|
||||
@@ -1672,7 +1887,7 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
{
|
||||
do
|
||||
{
|
||||
// Switched to MP3 player just now
|
||||
// Just switched to MP3 player
|
||||
if ( !_bIsMp3Active && i == 0 )
|
||||
{
|
||||
if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] )
|
||||
@@ -1682,12 +1897,21 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
// Try to continue from previous song, if already started
|
||||
if(!_GetMP3PosFromStreamPos(&position, &e) && !e) {
|
||||
nFile = 0;
|
||||
|
||||
sprintf(filename, "%s.VB", StreamedNameTable[nFile]);
|
||||
|
||||
CStream *stream = aStream[nStream];
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000))
|
||||
#endif
|
||||
stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
if ( stream->Setup() ) {
|
||||
bool opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
|
||||
if ( !opened )
|
||||
{
|
||||
sprintf(filename, "%s.MP3", StreamedNameTable[nFile]);
|
||||
opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
}
|
||||
|
||||
if ( opened && stream->Setup() ) {
|
||||
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||
nStreamLoopedFlag[nStream] = TRUE;
|
||||
if (position != 0)
|
||||
stream->SetPosMS(position);
|
||||
|
||||
@@ -1700,6 +1924,7 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
return FALSE;
|
||||
|
||||
} else {
|
||||
|
||||
if (e->pLinkPath != NULL)
|
||||
aStream[nStream]->Open(e->pLinkPath, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
else {
|
||||
@@ -1708,7 +1933,7 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
|
||||
aStream[nStream]->Open(filename);
|
||||
}
|
||||
|
||||
|
||||
if (aStream[nStream]->Setup()) {
|
||||
if (position != 0)
|
||||
aStream[nStream]->SetPosMS(position);
|
||||
@@ -1735,13 +1960,20 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
{
|
||||
nFile = 0;
|
||||
_bIsMp3Active = FALSE;
|
||||
CStream *stream = aStream[nStream];
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000))
|
||||
#endif
|
||||
stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
sprintf(filename, "%s.VB", StreamedNameTable[nFile]);
|
||||
|
||||
if (stream->Setup()) {
|
||||
CStream* stream = aStream[nStream];
|
||||
bool opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
|
||||
if ( !opened )
|
||||
{
|
||||
sprintf(filename, "%s.MP3", StreamedNameTable[nFile]);
|
||||
opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
}
|
||||
|
||||
if (opened && stream->Setup()) {
|
||||
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||
nStreamLoopedFlag[nStream] = TRUE;
|
||||
if (position != 0)
|
||||
stream->SetPosMS(position);
|
||||
|
||||
@@ -1759,6 +1991,7 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
else {
|
||||
strcpy(filename, _mp3DirectoryPath);
|
||||
strcat(filename, mp3->aFilename);
|
||||
|
||||
aStream[nStream]->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
}
|
||||
|
||||
@@ -1779,13 +2012,21 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||
position = 0;
|
||||
nFile = 0;
|
||||
}
|
||||
sprintf(filename, "%s.VB", StreamedNameTable[nFile]);
|
||||
|
||||
CStream *stream = aStream[nStream];
|
||||
#ifdef PS2_AUDIO_PATHS
|
||||
if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000))
|
||||
#endif
|
||||
stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
|
||||
if ( stream->Setup() ) {
|
||||
bool opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
|
||||
if ( !opened )
|
||||
{
|
||||
sprintf(filename, "%s.MP3", StreamedNameTable[nFile]);
|
||||
opened = stream->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||
}
|
||||
|
||||
if ( opened && stream->Setup() ) {
|
||||
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||
nStreamLoopedFlag[nStream] = TRUE;
|
||||
if (position != 0)
|
||||
stream->SetPosMS(position);
|
||||
|
||||
@@ -1841,15 +2082,20 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream)
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream)
|
||||
cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream)
|
||||
{
|
||||
ASSERT( nStream < MAX_STREAMS );
|
||||
|
||||
float boostMult = 0.0f;
|
||||
|
||||
if ( nVolume > MAX_VOLUME )
|
||||
nVolume = MAX_VOLUME;
|
||||
|
||||
if ( nPan > MAX_VOLUME )
|
||||
nPan = MAX_VOLUME;
|
||||
|
||||
if ( MusicManager.GetRadioInCar() == USERTRACK && !MusicManager.CheckForMusicInterruptions() )
|
||||
boostMult = m_nMP3BoostVolume / 64.f;
|
||||
|
||||
nStreamVolume[nStream] = nVolume;
|
||||
nStreamPan [nStream] = nPan;
|
||||
@@ -1858,10 +2104,14 @@ cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffect
|
||||
|
||||
if ( stream->IsOpened() )
|
||||
{
|
||||
if ( nEffectFlag )
|
||||
stream->SetVolume(m_nEffectsFadeVolume*nVolume*m_nEffectsVolume >> 14);
|
||||
if ( nEffectFlag ) {
|
||||
if ( nStream == 1 || nStream == 2 )
|
||||
stream->SetVolume(128*nVolume*m_nEffectsVolume >> 14);
|
||||
else
|
||||
stream->SetVolume(m_nEffectsFadeVolume*nVolume*m_nEffectsVolume >> 14);
|
||||
}
|
||||
else
|
||||
stream->SetVolume(m_nMusicFadeVolume*nVolume*m_nMusicVolume >> 14);
|
||||
stream->SetVolume((m_nMusicFadeVolume*nVolume*(uint32)(m_nMusicVolume * boostMult + m_nMusicVolume)) >> 14);
|
||||
|
||||
stream->SetPan(nPan);
|
||||
}
|
||||
@@ -1941,7 +2191,7 @@ cSampleManager::InitialiseSampleBanks(void)
|
||||
fclose(fpSampleDescHandle);
|
||||
fpSampleDescHandle = NULL;
|
||||
|
||||
for ( int32 i = 0; i < TOTAL_AUDIO_SAMPLES; i++ )
|
||||
for ( uint32 i = 0; i < TOTAL_AUDIO_SAMPLES; i++ )
|
||||
{
|
||||
#ifdef FIX_BUGS
|
||||
if (nBank >= MAX_SFX_BANKS) break;
|
||||
@@ -1958,4 +2208,11 @@ cSampleManager::InitialiseSampleBanks(void)
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::SetStreamedFileLoopFlag(bool8 nLoopFlag, uint8 nChannel)
|
||||
{
|
||||
nStreamLoopedFlag[nChannel] = nLoopFlag;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -16,8 +16,10 @@ enum eSound
|
||||
SOUND_CAR_DOOR_OPEN_BACK_RIGHT,
|
||||
SOUND_CAR_WINDSHIELD_CRACK,
|
||||
SOUND_CAR_JUMP,
|
||||
SOUND_E,
|
||||
SOUND_F,
|
||||
SOUND_CAR_JUMP_2,
|
||||
SOUND_CAR_TYRE_POP,
|
||||
SOUND_16,
|
||||
SOUND_17,
|
||||
SOUND_CAR_ENGINE_START,
|
||||
SOUND_CAR_LIGHT_BREAK,
|
||||
SOUND_CAR_HYDRAULIC_1,
|
||||
@@ -31,29 +33,33 @@ enum eSound
|
||||
SOUND_CAR_TANK_TURRET_ROTATE,
|
||||
SOUND_CAR_BOMB_TICK,
|
||||
SOUND_PLANE_ON_GROUND,
|
||||
SOUND_HELI_BLADE,
|
||||
SOUND_32,
|
||||
SOUND_STEP_START,
|
||||
SOUND_STEP_END,
|
||||
SOUND_FALL_LAND,
|
||||
SOUND_FALL_COLLAPSE,
|
||||
SOUND_FIGHT_PUNCH_33,
|
||||
SOUND_FIGHT_KICK_34,
|
||||
SOUND_FIGHT_HEADBUTT_35,
|
||||
SOUND_FIGHT_PUNCH_36,
|
||||
SOUND_FIGHT_PUNCH_37,
|
||||
SOUND_FIGHT_CLOSE_PUNCH_38,
|
||||
SOUND_FIGHT_PUNCH_39,
|
||||
SOUND_FIGHT_PUNCH_OR_KICK_BELOW_40,
|
||||
SOUND_FIGHT_PUNCH_41,
|
||||
SOUND_FIGHT_PUNCH_FROM_BEHIND_42,
|
||||
SOUND_FIGHT_KNEE_OR_KICK_43,
|
||||
SOUND_FIGHT_KICK_44,
|
||||
SOUND_2D,
|
||||
SOUND_FIGHT_37,
|
||||
SOUND_FIGHT_38,
|
||||
SOUND_FIGHT_39,
|
||||
SOUND_FIGHT_40,
|
||||
SOUND_FIGHT_41,
|
||||
SOUND_FIGHT_42,
|
||||
SOUND_FIGHT_43,
|
||||
SOUND_FIGHT_44,
|
||||
SOUND_FIGHT_45,
|
||||
SOUND_FIGHT_46,
|
||||
SOUND_FIGHT_47,
|
||||
SOUND_FIGHT_48,
|
||||
SOUND_49,
|
||||
SOUND_WEAPON_BAT_ATTACK,
|
||||
SOUND_WEAPON_KNIFE_ATTACK,
|
||||
SOUND_WEAPON_CHAINSAW_IDLE,
|
||||
SOUND_WEAPON_CHAINSAW_ATTACK,
|
||||
SOUND_WEAPON_CHAINSAW_MADECONTACT,
|
||||
SOUND_WEAPON_SHOT_FIRED,
|
||||
SOUND_WEAPON_RELOAD,
|
||||
SOUND_WEAPON_AK47_BULLET_ECHO,
|
||||
SOUND_WEAPON_UZI_BULLET_ECHO,
|
||||
SOUND_WEAPON_M16_BULLET_ECHO,
|
||||
SOUND_WEAPON_FLAMETHROWER_FIRE,
|
||||
SOUND_WEAPON_SNIPER_SHOT_NO_ZOOM,
|
||||
SOUND_WEAPON_ROCKET_SHOT_NO_ZOOM,
|
||||
@@ -66,8 +72,8 @@ enum eSound
|
||||
SOUND_GARAGE_BOMB1_SET,
|
||||
SOUND_GARAGE_BOMB2_SET,
|
||||
SOUND_GARAGE_BOMB3_SET,
|
||||
SOUND_40,
|
||||
SOUND_41,
|
||||
SOUND_70,
|
||||
SOUND_71,
|
||||
SOUND_GARAGE_VEHICLE_DECLINED,
|
||||
SOUND_GARAGE_VEHICLE_ACCEPTED,
|
||||
SOUND_GARAGE_DOOR_CLOSED,
|
||||
@@ -76,8 +82,8 @@ enum eSound
|
||||
SOUND_PICKUP_WEAPON_BOUGHT,
|
||||
SOUND_PICKUP_WEAPON,
|
||||
SOUND_PICKUP_HEALTH,
|
||||
SOUND_PICKUP_ERROR,
|
||||
SOUND_4B,
|
||||
SOUND_80,
|
||||
SOUND_81,
|
||||
SOUND_PICKUP_ADRENALINE,
|
||||
SOUND_PICKUP_ARMOUR,
|
||||
SOUND_PICKUP_BONUS,
|
||||
@@ -87,7 +93,7 @@ enum eSound
|
||||
SOUND_PICKUP_PACMAN_PACKAGE,
|
||||
SOUND_PICKUP_FLOAT_PACKAGE,
|
||||
SOUND_BOMB_TIMED_ACTIVATED,
|
||||
SOUND_55,
|
||||
SOUND_91,
|
||||
SOUND_BOMB_ONIGNITION_ACTIVATED,
|
||||
SOUND_BOMB_TICK,
|
||||
SOUND_RAMPAGE_START,
|
||||
@@ -104,12 +110,16 @@ enum eSound
|
||||
SOUND_PED_HIT,
|
||||
SOUND_PED_LAND,
|
||||
SOUND_PED_BULLET_HIT,
|
||||
SOUND_PED_BOMBER,
|
||||
SOUND_PED_BURNING,
|
||||
SOUND_PED_ARREST_FBI,
|
||||
SOUND_PED_ARREST_SWAT,
|
||||
SOUND_PED_PLAYER_REACTTOCOP,
|
||||
SOUND_PED_ARREST_COP,
|
||||
SOUND_PED_MIAMIVICE_EXITING_CAR,
|
||||
SOUND_PED_COP_HELIPILOTPHRASE,
|
||||
SOUND_PED_PULLOUTWEAPON,
|
||||
SOUND_PED_HELI_PLAYER_FOUND,
|
||||
SOUND_PED_VCPA_PLAYER_FOUND,
|
||||
SOUND_PED_ON_FIRE,
|
||||
SOUND_PED_AIMING,
|
||||
SOUND_PED_HANDS_UP,
|
||||
SOUND_PED_HANDS_COWER,
|
||||
SOUND_PED_FLEE_SPRINT,
|
||||
@@ -117,30 +127,40 @@ enum eSound
|
||||
SOUND_PED_MUGGING,
|
||||
SOUND_PED_CAR_JACKED,
|
||||
SOUND_PED_ROBBED,
|
||||
SOUND_PED_ACCIDENTREACTION1,
|
||||
SOUND_PED_INNOCENT,
|
||||
SOUND_PED_PLAYER_AFTERSEX,
|
||||
SOUND_PED_PLAYER_BEFORESEX,
|
||||
SOUND_PED_COP_TARGETING, // also used for medics
|
||||
SOUND_PED_COP_MANYCOPSAROUND, // also used for medics
|
||||
SOUND_PED_GUNAIMEDAT2,
|
||||
SOUND_PED_COP_ALONE, // also used for medics
|
||||
SOUND_PED_GUNAIMEDAT3,
|
||||
SOUND_PED_COP_ASK_FOR_ID,
|
||||
SOUND_PED_COP_LITTLECOPSAROUND, // also used for medics
|
||||
SOUND_PED_PLAYER_FARFROMCOPS, // also used for medics
|
||||
SOUND_PED_TAXI_WAIT,
|
||||
SOUND_PED_ATTACK,
|
||||
SOUND_PED_DEFEND,
|
||||
SOUND_PED_PURSUIT_ARMY,
|
||||
SOUND_PED_PURSUIT_FBI,
|
||||
SOUND_PED_PURSUIT_SWAT,
|
||||
SOUND_PED_PURSUIT_COP,
|
||||
SOUND_PED_HEALING,
|
||||
SOUND_PED_7B,
|
||||
SOUND_PED_LEAVE_VEHICLE,
|
||||
SOUND_PED_EVADE,
|
||||
SOUND_PED_FLEE_RUN,
|
||||
SOUND_PED_CRASH_VEHICLE,
|
||||
SOUND_PED_CRASH_CAR,
|
||||
SOUND_PED_ANNOYED_DRIVER,
|
||||
SOUND_PED_147,
|
||||
SOUND_PED_SOLICIT,
|
||||
SOUND_PED_JEER,
|
||||
SOUND_PED_150,
|
||||
SOUND_PED_EXTINGUISHING_FIRE,
|
||||
SOUND_PED_WAIT_DOUBLEBACK,
|
||||
SOUND_PED_CHAT_SEXY,
|
||||
SOUND_PED_CHAT_SEXY_FEMALE,
|
||||
SOUND_PED_CHAT_SEXY_MALE,
|
||||
SOUND_PED_CHAT_EVENT,
|
||||
SOUND_PED_PED_COLLISION,
|
||||
SOUND_PED_CHAT,
|
||||
SOUND_PED_BODYCAST_HIT,
|
||||
SOUND_PED_TAXI_CALL,
|
||||
SOUND_INJURED_PED_MALE_OUCH,
|
||||
SOUND_INJURED_PED_FEMALE,
|
||||
SOUND_INJURED_PED_MALE_PRISON,
|
||||
SOUND_RACE_START_3,
|
||||
SOUND_RACE_START_2,
|
||||
SOUND_RACE_START_1,
|
||||
@@ -151,143 +171,101 @@ enum eSound
|
||||
SOUND_CAR_PED_COLLISION,
|
||||
SOUND_CLOCK_TICK,
|
||||
SOUND_PART_MISSION_COMPLETE,
|
||||
SOUND_FRONTEND_MENU_STARTING,
|
||||
SOUND_FRONTEND_MENU_NEW_PAGE,
|
||||
SOUND_FRONTEND_MENU_NAVIGATION,
|
||||
SOUND_FRONTEND_MENU_SETTING_CHANGE,
|
||||
SOUND_FRONTEND_MENU_BACK,
|
||||
SOUND_FRONTEND_STEREO,
|
||||
SOUND_FRONTEND_MONO,
|
||||
SOUND_FRONTEND_AUDIO_TEST,
|
||||
SOUND_FRONTEND_FAIL,
|
||||
SOUND_FRONTEND_RADIO_TURN_OFF,
|
||||
SOUND_FRONTEND_RADIO_CHANGE,
|
||||
SOUND_FRONTEND_MENU_STARTING, // same sound as SOUND_HUD
|
||||
|
||||
// TODO(Miami): What are 170-175??
|
||||
|
||||
SOUND_FRONTEND_RADIO_TURN_OFF = 176, // those 2 are same sound
|
||||
SOUND_FRONTEND_RADIO_TURN_ON,
|
||||
SOUND_FRONTEND_HURRICANE, // yes, frontend
|
||||
SOUND_HUD,
|
||||
SOUND_AMMUNATION_WELCOME_1,
|
||||
SOUND_AMMUNATION_WELCOME_2,
|
||||
SOUND_AMMUNATION_WELCOME_3,
|
||||
SOUND_180,
|
||||
SOUND_181,
|
||||
SOUND_182,
|
||||
SOUND_LIGHTNING,
|
||||
SOUND_A5,
|
||||
SOUND_TOTAL_SOUNDS,
|
||||
SOUND_NO_SOUND,
|
||||
SOUND_BULLETTRACE_1,
|
||||
SOUND_BULLETTRACE_2,
|
||||
SOUND_186, // makes same sound as 40
|
||||
SOUND_187, // makes same sound as 46
|
||||
SOUND_MELEE_ATTACK_START,
|
||||
SOUND_SKATING,
|
||||
SOUND_WEAPON_MINIGUN_ATTACK,
|
||||
SOUND_WEAPON_MINIGUN_2,
|
||||
SOUND_WEAPON_MINIGUN_3,
|
||||
SOUND_AMMUNATION_IMRAN_ARM_BOMB,
|
||||
SOUND_RADIO_CHANGE,
|
||||
SOUND_FRONTEND_HIGHLIGHT_OPTION,
|
||||
SOUND_FRONTEND_ENTER_OR_ADJUST,
|
||||
SOUND_FRONTEND_BACK,
|
||||
SOUND_FRONTEND_FAIL,
|
||||
SOUND_FRONTEND_AUDIO_TEST,
|
||||
SOUND_INJURED_PED_MALE_OUCH,
|
||||
SOUND_INJURED_PED_FEMALE,
|
||||
SOUND_SHIRT_WIND_FLAP,
|
||||
SOUND_SET_203,
|
||||
SOUND_TOTAL_SOUNDS = 204,
|
||||
SOUND_NO_SOUND = 205,
|
||||
};
|
||||
|
||||
|
||||
enum eScriptSounds {
|
||||
SCRIPT_SOUND_0 = 0,
|
||||
SCRIPT_SOUND_1,
|
||||
SCRIPT_SOUND_2,
|
||||
SCRIPT_SOUND_3,
|
||||
SCRIPT_SOUND_PARTY_1_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_1_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_2_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_2_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_3_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_3_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_4_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_4_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_5_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_5_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_6_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_6_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_7_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_7_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_8_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_8_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_9_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_9_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_10_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_10_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_11_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_11_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_12_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_12_LOOP_L,
|
||||
SCRIPT_SOUND_PARTY_13_LOOP_S,
|
||||
SCRIPT_SOUND_PARTY_13_LOOP_L,
|
||||
SCRIPT_SOUND_STRIP_CLUB_LOOP_1_S,
|
||||
SCRIPT_SOUND_STRIP_CLUB_LOOP_1_L,
|
||||
SCRIPT_SOUND_STRIP_CLUB_LOOP_2_S,
|
||||
SCRIPT_SOUND_STRIP_CLUB_LOOP_2_L,
|
||||
SCRIPT_SOUND_WORK_SHOP_LOOP_S,
|
||||
SCRIPT_SOUND_WORK_SHOP_LOOP_L,
|
||||
SCRIPT_SOUND_SAWMILL_LOOP_S,
|
||||
SCRIPT_SOUND_SAWMILL_LOOP_L,
|
||||
SCRIPT_SOUND_38,
|
||||
SCRIPT_SOUND_39,
|
||||
SCRIPT_SOUND_LAUNDERETTE_LOOP_S,
|
||||
SCRIPT_SOUND_LAUNDERETTE_LOOP_L,
|
||||
SCRIPT_SOUND_CHINATOWN_RESTAURANT_S,
|
||||
SCRIPT_SOUND_CHINATOWN_RESTAURANT_L,
|
||||
SCRIPT_SOUND_CIPRIANI_RESAURANT_S,
|
||||
SCRIPT_SOUND_CIPRIANI_RESAURANT_L,
|
||||
SCRIPT_SOUND_46_S,
|
||||
SCRIPT_SOUND_47_L,
|
||||
SCRIPT_SOUND_MARCO_BISTRO_S,
|
||||
SCRIPT_SOUND_MARCO_BISTRO_L,
|
||||
SCRIPT_SOUND_AIRPORT_LOOP_S,
|
||||
SCRIPT_SOUND_AIRPORT_LOOP_L,
|
||||
SCRIPT_SOUND_SHOP_LOOP_S,
|
||||
SCRIPT_SOUND_SHOP_LOOP_L,
|
||||
SCRIPT_SOUND_CINEMA_LOOP_S,
|
||||
SCRIPT_SOUND_CINEMA_LOOP_L,
|
||||
SCRIPT_SOUND_DOCKS_LOOP_S,
|
||||
SCRIPT_SOUND_DOCKS_LOOP_L,
|
||||
SCRIPT_SOUND_HOME_LOOP_S,
|
||||
SCRIPT_SOUND_HOME_LOOP_L,
|
||||
SCRIPT_SOUND_FRANKIE_PIANO,
|
||||
SCRIPT_SOUND_PARTY_1_LOOP,
|
||||
SCRIPT_SOUND_PORN_CINEMA_1_S,
|
||||
SCRIPT_SOUND_PORN_CINEMA_1_L,
|
||||
SCRIPT_SOUND_PORN_CINEMA_2_S,
|
||||
SCRIPT_SOUND_PORN_CINEMA_2_L,
|
||||
SCRIPT_SOUND_PORN_CINEMA_3_S,
|
||||
SCRIPT_SOUND_PORN_CINEMA_3_L,
|
||||
SCRIPT_SOUND_BANK_ALARM_LOOP_S,
|
||||
SCRIPT_SOUND_BANK_ALARM_LOOP_L,
|
||||
SCRIPT_SOUND_POLICE_BALL_LOOP_S,
|
||||
SCRIPT_SOUND_POLICE_BALL_LOOP_L,
|
||||
SCRIPT_SOUND_RAVE_LOOP_INDUSTRIAL_S,
|
||||
SCRIPT_SOUND_RAVE_LOOP_INDUSTRIAL_L,
|
||||
SCRIPT_SOUND_74,
|
||||
SCRIPT_SOUND_75,
|
||||
SCRIPT_SOUND_POLICE_CELL_BEATING_LOOP_S,
|
||||
SCRIPT_SOUND_POLICE_CELL_BEATING_LOOP_L,
|
||||
SCRIPT_SOUND_INJURED_PED_MALE_OUCH_S,
|
||||
SCRIPT_SOUND_INJURED_PED_MALE_OUCH_L,
|
||||
SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_S,
|
||||
SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_L,
|
||||
SCRIPT_SOUND_EVIDENCE_PICKUP,
|
||||
SCRIPT_SOUND_UNLOAD_GOLD,
|
||||
SCRIPT_SOUND_RAVE_1_LOOP_S,
|
||||
SCRIPT_SOUND_RAVE_1_LOOP_L,
|
||||
SCRIPT_SOUND_RAVE_2_LOOP_S,
|
||||
SCRIPT_SOUND_RAVE_2_LOOP_L,
|
||||
SCRIPT_SOUND_RAVE_3_LOOP_S,
|
||||
SCRIPT_SOUND_RAVE_3_LOOP_L,
|
||||
SCRIPT_SOUND_MISTY_SEX_S,
|
||||
SCRIPT_SOUND_MISTY_SEX_L,
|
||||
SCRIPT_SOUND_GATE_START_CLUNK,
|
||||
SCRIPT_SOUND_GATE_STOP_CLUNK,
|
||||
SCRIPT_SOUND_BANK_ALARM_LOOP = 0,
|
||||
SCRIPT_SOUND_PART_MISSION_COMPLETE,
|
||||
SCRIPT_SOUND_CHUNKY_RUN_SHOUT,
|
||||
SCRIPT_SOUND_SECURITY_GUARD_AWAY_SHOUT,
|
||||
SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP,
|
||||
SCRIPT_SOUND_POLICE_CELL_DOOR_CLUNK,
|
||||
SCRIPT_SOUND_GARAGE_DOOR_SLIDING_LOOP,
|
||||
SCRIPT_SOUND_GARAGE_DOOR_CLUNK,
|
||||
SCRIPT_SOUND_SNORING_LOOP,
|
||||
SCRIPT_SOUND_RACE_START_3,
|
||||
SCRIPT_SOUND_RACE_START_2,
|
||||
SCRIPT_SOUND_RACE_START_1,
|
||||
SCRIPT_SOUND_RACE_START_GO,
|
||||
SCRIPT_SOUND_SWAT_PED_SHOUT,
|
||||
SCRIPT_SOUND_PRETEND_FIRE_LOOP,
|
||||
SCRIPT_SOUND_AMMUNATION_CHAT_1,
|
||||
SCRIPT_SOUND_AMMUNATION_CHAT_2,
|
||||
SCRIPT_SOUND_AMMUNATION_CHAT_3,
|
||||
SCRIPT_SOUND_SHOOTING_RANGE_TARGET_MOVING_LOOP,
|
||||
SCRIPT_SOUND_SHOOTING_RANGE_TARGET_HIT,
|
||||
SCRIPT_SOUND_AMMUNATION_BUY_WEAPON,
|
||||
SCRIPT_SOUND_AMMUNATION_BUY_WEAPON_DENIED,
|
||||
SCRIPT_SOUND_WMYCW_TICKET_SPEECH,
|
||||
SCRIPT_SOUND_IMRAN_ARM_BOMB,
|
||||
SCRIPT_SOUND_ANDY_SNIPER_SHOT,
|
||||
SCRIPT_SOUND_WILLIE_CARD_SWIPE,
|
||||
SCRIPT_SOUND_MALE_AMBULANCE_OUCH,
|
||||
SCRIPT_SOUND_FEMALE_AMBULANCE_OUCH,
|
||||
SCRIPT_SOUND_BUILDING_BAR_1,
|
||||
SCRIPT_SOUND_BUILDING_BAR_2,
|
||||
SCRIPT_SOUND_BUILDING_BAR_3,
|
||||
SCRIPT_SOUND_BUILDING_BAR_4,
|
||||
SCRIPT_SOUND_BUILDING_BIKER_BAR,
|
||||
SCRIPT_SOUND_BUILDING_CHURCH,
|
||||
SCRIPT_SOUND_BUILDING_CLUB,
|
||||
SCRIPT_SOUND_BUILDING_CUBA_1,
|
||||
SCRIPT_SOUND_BUILDING_CUBA_2,
|
||||
SCRIPT_SOUND_BUILDING_VOODOO,
|
||||
SCRIPT_SOUND_BUILDING_MUSIC_SHOP,
|
||||
SCRIPT_SOUND_BUILDING_STRIPCLUB_1,
|
||||
SCRIPT_SOUND_BUILDING_STRIPCLUB_2,
|
||||
SCRIPT_SOUND_BUILDING_SUPERSWEEP,
|
||||
SCRIPT_SOUND_SEAPLANE_LOW_FUEL,
|
||||
SCRIPT_SOUND_NEW_BUILDING_BAR_1,
|
||||
SCRIPT_SOUND_NEW_BUILDING_BAR_2,
|
||||
SCRIPT_SOUND_NEW_BUILDING_BAR_3,
|
||||
SCRIPT_SOUND_NEW_BUILDING_BAR_4,
|
||||
SCRIPT_SOUND_NEW_BUILDING_MALIBU_1,
|
||||
SCRIPT_SOUND_NEW_BUILDING_MALIBU_2,
|
||||
SCRIPT_SOUND_NEW_BUILDING_MALIBU_3,
|
||||
SCRIPT_SOUND_NEW_BUILDING_STRIP_1,
|
||||
SCRIPT_SOUND_NEW_BUILDING_STRIP_2,
|
||||
SCRIPT_SOUND_NEW_BUILDING_STRIP_3,
|
||||
SCRIPT_SOUND_NEW_BUILDING_CHURCH,
|
||||
SCRIPT_SOUND_NEW_BUILDING_FAN_1,
|
||||
SCRIPT_SOUND_NEW_BUILDING_FAN_2,
|
||||
SCRIPT_SOUND_NEW_BUILDING_INSECT_1,
|
||||
SCRIPT_SOUND_NEW_BUILDING_INSECT_2,
|
||||
SCRIPT_SOUND_NEW_WATERFALL,
|
||||
SCRIPT_SOUND_BULLET_HIT_GROUND_1,
|
||||
SCRIPT_SOUND_BULLET_HIT_GROUND_2,
|
||||
SCRIPT_SOUND_BULLET_HIT_GROUND_3,
|
||||
SCRIPT_SOUND_BULLET_HIT_WATER, // no sound
|
||||
SCRIPT_SOUND_TRAIN_ANNOUNCEMENT_1,
|
||||
SCRIPT_SOUND_TRAIN_ANNOUNCEMENT_2,
|
||||
SCRIPT_SOUND_PAYPHONE_RINGING,
|
||||
SCRIPT_SOUND_113,
|
||||
SCRIPT_SOUND_GLASS_BREAK_L,
|
||||
SCRIPT_SOUND_GLASS_BREAK_S,
|
||||
SCRIPT_SOUND_GLASS_CRACK,
|
||||
@@ -296,6 +274,7 @@ enum eScriptSounds {
|
||||
SCRIPT_SOUND_BOX_DESTROYED_2,
|
||||
SCRIPT_SOUND_METAL_COLLISION,
|
||||
SCRIPT_SOUND_TIRE_COLLISION,
|
||||
SCRIPT_SOUND_HIT_BALL,
|
||||
SCRIPT_SOUND_GUNSHELL_DROP,
|
||||
SCRIPT_SOUND_GUNSHELL_DROP_SOFT,
|
||||
SCRIPT_SOUND_TOTAL,
|
||||
|
||||
@@ -20,3 +20,25 @@ CBuilding::ReplaceWithNewModel(int32 id)
|
||||
if(m_level == LEVEL_GENERIC || m_level == CGame::currLevel)
|
||||
CStreaming::RequestModel(id, STREAMFLAGS_DONT_REMOVE);
|
||||
}
|
||||
|
||||
bool
|
||||
IsBuildingPointerValid(CBuilding* pBuilding)
|
||||
{
|
||||
if (!pBuilding)
|
||||
return false;
|
||||
if (pBuilding->GetIsATreadable()) {
|
||||
int index = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pBuilding);
|
||||
#ifdef FIX_BUGS
|
||||
return index >= 0 && index < CPools::GetTreadablePool()->GetSize();
|
||||
#else
|
||||
return index >= 0 && index <= CPools::GetTreadablePool()->GetSize();
|
||||
#endif
|
||||
} else {
|
||||
int index = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pBuilding);
|
||||
#ifdef FIX_BUGS
|
||||
return index >= 0 && index < CPools::GetBuildingPool()->GetSize();
|
||||
#else
|
||||
return index >= 0 && index <= CPools::GetBuildingPool()->GetSize();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,5 +17,4 @@ public:
|
||||
virtual bool GetIsATreadable(void) { return false; }
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(CBuilding, 0x64);
|
||||
|
||||
bool IsBuildingPointerValid(CBuilding*);
|
||||
|
||||
@@ -8,10 +8,5 @@ public:
|
||||
static void *operator new(size_t) throw();
|
||||
static void operator delete(void*, size_t) throw();
|
||||
|
||||
int16 m_nodeIndices[2][12]; // first car, then ped
|
||||
|
||||
bool GetIsATreadable(void) { return true; }
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(CTreadable, 0x94);
|
||||
|
||||
|
||||
@@ -2,15 +2,29 @@
|
||||
|
||||
#include "SurfaceTable.h"
|
||||
|
||||
struct CColBox
|
||||
struct CBox
|
||||
{
|
||||
CVector min;
|
||||
CVector max;
|
||||
CVector GetSize(void) { return max - min; }
|
||||
void Set(const CVector &min, const CVector &max) { this->min = min; this->max = max; }
|
||||
};
|
||||
|
||||
struct CColBox : public CBox
|
||||
{
|
||||
uint8 surface;
|
||||
uint8 piece;
|
||||
|
||||
void Set(const CVector &min, const CVector &max, uint8 surf = SURFACE_DEFAULT, uint8 piece = 0);
|
||||
CVector GetSize(void) { return max - min; }
|
||||
void Set(const CVector &min, const CVector &max, uint8 surf, uint8 piece);
|
||||
using CBox::Set;
|
||||
|
||||
CColBox& operator=(const CColBox &other);
|
||||
};
|
||||
};
|
||||
|
||||
// no name for this
|
||||
// bounds for a number of triangles
|
||||
struct CColTriBBox : public CBox
|
||||
{
|
||||
int32 first;
|
||||
int32 last;
|
||||
};
|
||||
|
||||
@@ -4,9 +4,9 @@ struct CColLine
|
||||
{
|
||||
// NB: this has to be compatible with two CVuVectors
|
||||
CVector p0;
|
||||
int pad0;
|
||||
// int pad0;
|
||||
CVector p1;
|
||||
int pad1;
|
||||
// int pad1;
|
||||
|
||||
CColLine(void) { };
|
||||
CColLine(const CVector &p0, const CVector &p1) { this->p0 = p0; this->p1 = p1; };
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
#include "common.h"
|
||||
#include "main.h"
|
||||
#include "ColModel.h"
|
||||
#include "Collision.h"
|
||||
#include "Game.h"
|
||||
#include "MemoryHeap.h"
|
||||
#include "Pools.h"
|
||||
|
||||
CColModel::CColModel(void)
|
||||
{
|
||||
boundingSphere.Set(0.0001f, CVector(0.0f, 0.0f, 0.0f));
|
||||
boundingBox.Set(CVector(0.0f, 0.0f, 0.0f), CVector(0.0f, 0.0f, 0.0f));
|
||||
numTriBBoxes = 0;
|
||||
triBBoxes = nil;
|
||||
numSpheres = 0;
|
||||
spheres = nil;
|
||||
numLines = 0;
|
||||
@@ -15,31 +22,58 @@ CColModel::CColModel(void)
|
||||
vertices = nil;
|
||||
triangles = nil;
|
||||
trianglePlanes = nil;
|
||||
level = CGame::currLevel;
|
||||
ownsCollisionVolumes = true;
|
||||
level = LEVEL_GENERIC; // generic col slot
|
||||
// ownsCollisionVolumes = true;
|
||||
}
|
||||
|
||||
CColModel::~CColModel(void)
|
||||
{
|
||||
RemoveCollisionVolumes();
|
||||
RemoveTrianglePlanes();
|
||||
if(!gNASTY_NASTY_MEM_SHUTDOWN_HACK){
|
||||
RemoveTrianglePlanes();
|
||||
RemoveCollisionVolumes();
|
||||
}
|
||||
}
|
||||
|
||||
//--LCS: no pool used, but maybe we better keep it?
|
||||
void*
|
||||
CColModel::operator new(size_t) throw()
|
||||
{
|
||||
CColModel* node = CPools::GetColModelPool()->New();
|
||||
assert(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
void
|
||||
CColModel::operator delete(void *p, size_t) throw()
|
||||
{
|
||||
CPools::GetColModelPool()->Delete((CColModel*)p);
|
||||
}
|
||||
|
||||
void
|
||||
CColModel::RemoveCollisionVolumes(void)
|
||||
{
|
||||
if(ownsCollisionVolumes){
|
||||
RwFree(spheres);
|
||||
RwFree(lines);
|
||||
RwFree(boxes);
|
||||
RwFree(vertices);
|
||||
RwFree(triangles);
|
||||
#ifdef FIX_BUGS
|
||||
// why is this missing?
|
||||
if(ownsCollisionVolumes)
|
||||
#endif
|
||||
if(!gUseChunkFiles){
|
||||
delete[] triBBoxes;
|
||||
delete[] spheres;
|
||||
delete[] lines;
|
||||
delete[] boxes;
|
||||
delete[] vertices;
|
||||
delete[] triangles;
|
||||
}
|
||||
CCollision::RemoveTrianglePlanes(this);
|
||||
numSpheres = 0;
|
||||
numTriBBoxes = 0;
|
||||
numLines = 0;
|
||||
numBoxes = 0;
|
||||
numTriangles = 0;
|
||||
spheres = nil;
|
||||
#ifdef FIX_BUGS
|
||||
triBBoxes = nil;
|
||||
#endif
|
||||
lines = nil;
|
||||
boxes = nil;
|
||||
vertices = nil;
|
||||
@@ -52,7 +86,7 @@ CColModel::CalculateTrianglePlanes(void)
|
||||
PUSH_MEMID(MEMID_COLLISION);
|
||||
|
||||
// HACK: allocate space for one more element to stuff the link pointer into
|
||||
trianglePlanes = (CColTrianglePlane*)RwMalloc(sizeof(CColTrianglePlane) * (numTriangles+1));
|
||||
trianglePlanes = new CColTrianglePlane[numTriangles+1];
|
||||
REGISTER_MEMPTR(&trianglePlanes);
|
||||
for(int i = 0; i < numTriangles; i++)
|
||||
trianglePlanes[i].Set(vertices, triangles[i]);
|
||||
@@ -63,8 +97,10 @@ CColModel::CalculateTrianglePlanes(void)
|
||||
void
|
||||
CColModel::RemoveTrianglePlanes(void)
|
||||
{
|
||||
RwFree(trianglePlanes);
|
||||
trianglePlanes = nil;
|
||||
if(trianglePlanes){
|
||||
delete[] trianglePlanes;
|
||||
trianglePlanes = nil;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -96,20 +132,33 @@ CColModel::operator=(const CColModel &other)
|
||||
boundingSphere = other.boundingSphere;
|
||||
boundingBox = other.boundingBox;
|
||||
|
||||
// copy tri bboxes
|
||||
if(other.numTriBBoxes){
|
||||
if(numTriBBoxes != other.numTriBBoxes){
|
||||
numTriBBoxes = other.numTriBBoxes;
|
||||
delete[] triBBoxes;
|
||||
triBBoxes = new CColTriBBox[numTriBBoxes];
|
||||
}
|
||||
for(i = 0; i < numTriBBoxes; i++)
|
||||
triBBoxes[i] = other.triBBoxes[i];
|
||||
}else{
|
||||
numTriBBoxes = 0;
|
||||
delete[] triBBoxes;
|
||||
triBBoxes = nil;
|
||||
}
|
||||
|
||||
// copy spheres
|
||||
if(other.numSpheres){
|
||||
if(numSpheres != other.numSpheres){
|
||||
numSpheres = other.numSpheres;
|
||||
if(spheres)
|
||||
RwFree(spheres);
|
||||
spheres = (CColSphere*)RwMalloc(numSpheres*sizeof(CColSphere));
|
||||
delete[] spheres;
|
||||
spheres = new CColSphere[numSpheres];
|
||||
}
|
||||
for(i = 0; i < numSpheres; i++)
|
||||
spheres[i] = other.spheres[i];
|
||||
}else{
|
||||
numSpheres = 0;
|
||||
if(spheres)
|
||||
RwFree(spheres);
|
||||
delete[] spheres;
|
||||
spheres = nil;
|
||||
}
|
||||
|
||||
@@ -117,16 +166,14 @@ CColModel::operator=(const CColModel &other)
|
||||
if(other.numLines){
|
||||
if(numLines != other.numLines){
|
||||
numLines = other.numLines;
|
||||
if(lines)
|
||||
RwFree(lines);
|
||||
lines = (CColLine*)RwMalloc(numLines*sizeof(CColLine));
|
||||
delete[] lines;
|
||||
lines = new CColLine[numLines];
|
||||
}
|
||||
for(i = 0; i < numLines; i++)
|
||||
lines[i] = other.lines[i];
|
||||
}else{
|
||||
numLines = 0;
|
||||
if(lines)
|
||||
RwFree(lines);
|
||||
delete[] lines;
|
||||
lines = nil;
|
||||
}
|
||||
|
||||
@@ -134,23 +181,21 @@ CColModel::operator=(const CColModel &other)
|
||||
if(other.numBoxes){
|
||||
if(numBoxes != other.numBoxes){
|
||||
numBoxes = other.numBoxes;
|
||||
if(boxes)
|
||||
RwFree(boxes);
|
||||
boxes = (CColBox*)RwMalloc(numBoxes*sizeof(CColBox));
|
||||
delete[] boxes;
|
||||
boxes = new CColBox[numBoxes];
|
||||
}
|
||||
for(i = 0; i < numBoxes; i++)
|
||||
boxes[i] = other.boxes[i];
|
||||
}else{
|
||||
numBoxes = 0;
|
||||
if(boxes)
|
||||
RwFree(boxes);
|
||||
delete[] boxes;
|
||||
boxes = nil;
|
||||
}
|
||||
|
||||
// copy mesh
|
||||
if(other.numTriangles){
|
||||
// copy vertices
|
||||
numVerts = 0;
|
||||
numVerts = -1;
|
||||
for(i = 0; i < other.numTriangles; i++){
|
||||
if(other.triangles[i].a > numVerts)
|
||||
numVerts = other.triangles[i].a;
|
||||
@@ -160,10 +205,9 @@ CColModel::operator=(const CColModel &other)
|
||||
numVerts = other.triangles[i].c;
|
||||
}
|
||||
numVerts++;
|
||||
if(vertices)
|
||||
RwFree(vertices);
|
||||
delete[] vertices;
|
||||
if(numVerts){
|
||||
vertices = (CompressedVector*)RwMalloc(numVerts*sizeof(CompressedVector));
|
||||
vertices = new CompressedVector[numVerts];
|
||||
for(i = 0; i < numVerts; i++)
|
||||
vertices[i] = other.vertices[i];
|
||||
}
|
||||
@@ -171,20 +215,54 @@ CColModel::operator=(const CColModel &other)
|
||||
// copy triangles
|
||||
if(numTriangles != other.numTriangles){
|
||||
numTriangles = other.numTriangles;
|
||||
if(triangles)
|
||||
RwFree(triangles);
|
||||
triangles = (CColTriangle*)RwMalloc(numTriangles*sizeof(CColTriangle));
|
||||
delete[] triangles;
|
||||
triangles = new CColTriangle[numTriangles];
|
||||
}
|
||||
for(i = 0; i < numTriangles; i++)
|
||||
triangles[i] = other.triangles[i];
|
||||
}else{
|
||||
numTriangles = 0;
|
||||
if(triangles)
|
||||
RwFree(triangles);
|
||||
delete[] triangles;
|
||||
triangles = nil;
|
||||
if(vertices)
|
||||
RwFree(vertices);
|
||||
delete[] vertices;
|
||||
vertices = nil;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool
|
||||
CColModel::Write(base::cRelocatableChunkWriter &writer, bool allocSpace)
|
||||
{
|
||||
int numVerts = -1;
|
||||
for(int i = 0; i < numTriangles; i++){
|
||||
if(triangles[i].a > numVerts)
|
||||
numVerts = triangles[i].a;
|
||||
if(triangles[i].b > numVerts)
|
||||
numVerts = triangles[i].b;
|
||||
if(triangles[i].c > numVerts)
|
||||
numVerts = triangles[i].c;
|
||||
}
|
||||
numVerts++;
|
||||
|
||||
if(allocSpace)
|
||||
writer.AllocateRaw(this, sizeof(*this), 16, false, true);
|
||||
writer.AllocateRaw(spheres, sizeof(*spheres)*numSpheres, 16, false, true);
|
||||
writer.AddPatch(&spheres);
|
||||
writer.AllocateRaw(lines, sizeof(*lines)*numLines, 16, false, true);
|
||||
writer.AddPatch(&lines);
|
||||
writer.AllocateRaw(boxes, sizeof(*boxes)*numBoxes, 16, false, true);
|
||||
writer.AddPatch(&boxes);
|
||||
if(triBBoxes && numTriBBoxes != 0){
|
||||
writer.AllocateRaw(triBBoxes, sizeof(*triBBoxes)*numTriBBoxes, 16, false, true);
|
||||
writer.AddPatch(&triBBoxes);
|
||||
}else
|
||||
triBBoxes = nil;
|
||||
if(numTriangles != 0){
|
||||
writer.AllocateRaw(vertices, sizeof(*vertices)*numVerts, 2, false, true);
|
||||
writer.AddPatch(&vertices);
|
||||
writer.AllocateRaw(triangles, sizeof(*triangles)*numTriangles, 2, false, true);
|
||||
writer.AddPatch(&triangles);
|
||||
RemoveTrianglePlanes();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user