Compare commits
602 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae51f0cf09 | ||
|
|
22020108f6 | ||
|
|
2931fa5cfe | ||
|
|
35b73e2b2e | ||
|
|
f6b9b54616 | ||
|
|
0dcb8d0c10 | ||
|
|
984bcf893d | ||
|
|
c1c5176b17 | ||
|
|
06a05476cb | ||
|
|
dff5f5bf61 | ||
|
|
5d1725b634 | ||
|
|
3233ffe1c4 | ||
|
|
3569b7edfe | ||
|
|
a15d5589b3 | ||
|
|
d23c045d11 | ||
|
|
3bc6aa85da | ||
|
|
5aa149f0bc | ||
|
|
8c1f1cc7b8 | ||
|
|
9b511d28ec | ||
|
|
c41239ed5e | ||
|
|
787f1922f4 | ||
|
|
6d44cee7c2 | ||
|
|
6c3cb330c1 | ||
|
|
57757e6c6f | ||
|
|
1c426fdff1 | ||
|
|
bcdeb71070 | ||
|
|
9bb34fab25 | ||
|
|
8593fff48b | ||
|
|
55e950fe84 | ||
|
|
af543350db | ||
|
|
9c71524583 | ||
|
|
399fb28f77 | ||
|
|
2e02aed5d5 | ||
|
|
885467bcd0 | ||
|
|
5017e09dd0 | ||
|
|
ee93e4bc7d | ||
|
|
9ecca45bf3 | ||
|
|
38f4ea7aa3 | ||
|
|
e9a61ca38c | ||
|
|
ceb65eafa5 | ||
|
|
6110f74ad6 | ||
|
|
c52aebe8e7 | ||
|
|
f86bdb2cdb | ||
|
|
e33b56b49a | ||
|
|
b683c047dc | ||
|
|
7d5b1e6c2e | ||
|
|
aa104bb0aa | ||
|
|
ef0b5f857d | ||
|
|
c168786b42 | ||
|
|
0e5ffb8c34 | ||
|
|
d3e7ab933d | ||
|
|
eda2c05448 | ||
|
|
01c70dfb76 | ||
|
|
597802ff2e | ||
|
|
5c562c3adc | ||
|
|
d4175c5315 | ||
|
|
6b4b11d80e | ||
|
|
16ff379ebe | ||
|
|
2526503743 | ||
|
|
e0ecbeee39 | ||
|
|
79856dac25 | ||
|
|
8641e9d0bb | ||
|
|
076b324539 | ||
|
|
bcb5b4f94d | ||
|
|
ab03fbb6c8 | ||
|
|
97aeb85d84 | ||
|
|
4b4aefe339 | ||
|
|
c48f6e9bda | ||
|
|
5fe04940be | ||
|
|
854ee12d9d | ||
|
|
5ddd0649e3 | ||
|
|
886650a887 | ||
|
|
747ae04279 | ||
|
|
df89e5091e | ||
|
|
b7c7c883d7 | ||
|
|
8759c2edf0 | ||
|
|
033d89a9ab | ||
|
|
f1545daeae | ||
|
|
4f8993e19b | ||
|
|
2ef43e8d1a | ||
|
|
ce78081a7f | ||
|
|
6c2d179aad | ||
|
|
2eb0390dc9 | ||
|
|
f131f70761 | ||
|
|
1f98f01dcb | ||
|
|
8ea411e4c5 | ||
|
|
858f913fac | ||
|
|
35dd465c19 | ||
|
|
bd96584433 | ||
|
|
947f67dfb7 | ||
|
|
63046894b0 | ||
|
|
15f770531c | ||
|
|
4f461bd7be | ||
|
|
09748d094a | ||
|
|
cb5586e658 | ||
|
|
865ce46fdb | ||
|
|
2b99f2634b | ||
|
|
6d7dec96af | ||
|
|
0542b1bd4d | ||
|
|
232b5a04ba | ||
|
|
9d25e7f315 | ||
|
|
3c5bae164f | ||
|
|
6cea1de9e6 | ||
|
|
81673ab304 | ||
|
|
d0666a8702 | ||
|
|
16e2e3d091 | ||
|
|
5240dce018 | ||
|
|
1eedf7f0ae | ||
|
|
55e83982c3 | ||
|
|
388dd5cb00 | ||
|
|
d77ed4608f | ||
|
|
f19a1aebd4 | ||
|
|
bc3734cae3 | ||
|
|
cafc0f3c10 | ||
|
|
f73dfa12e6 | ||
|
|
6a94299eac | ||
|
|
a064b3a687 | ||
|
|
a7e673c2ec | ||
|
|
3adf37a3a9 | ||
|
|
bd3c3849fe | ||
|
|
1d1f10d68c | ||
|
|
a437d2bc26 | ||
|
|
d0404cbdb7 | ||
|
|
8018e40ebf | ||
|
|
2ce36a48b9 | ||
|
|
4f78733836 | ||
|
|
d2e594db2b | ||
|
|
894495689f | ||
|
|
207378c947 | ||
|
|
a7b38e1b34 | ||
|
|
5cab196718 | ||
|
|
3bde84f6c8 | ||
|
|
a99a04ed49 | ||
|
|
b09b489ae7 | ||
|
|
a247d53367 | ||
|
|
ca5d3c8811 | ||
|
|
02ec56e8f7 | ||
|
|
6da20aa723 | ||
|
|
28f266302f | ||
|
|
a4b92fe9be | ||
|
|
152148d71f | ||
|
|
3d922c90e9 | ||
|
|
f50026828a | ||
|
|
ac3905123e | ||
|
|
b4364c3672 | ||
|
|
3515363df5 | ||
|
|
c0cbf8045f | ||
|
|
a8fd3f828a | ||
|
|
291213ed40 | ||
|
|
2a6f9c2757 | ||
|
|
11434f96cc | ||
|
|
3194fdb2c1 | ||
|
|
d7ceb4870c | ||
|
|
e9baf31ad8 | ||
|
|
d82dbf91ef | ||
|
|
db4ae18e5d | ||
|
|
5458632c40 | ||
|
|
ab73c2f539 | ||
|
|
12efd1209b | ||
|
|
33c45e4ae0 | ||
|
|
011aafa043 | ||
|
|
71f28c8cf5 | ||
|
|
4eb9a149e4 | ||
|
|
f09da45823 | ||
|
|
d824a321b9 | ||
|
|
9a68f94c54 | ||
|
|
a7ab4cc23a | ||
|
|
5b390ade40 | ||
|
|
f184c43b9b | ||
|
|
37b6d491e7 | ||
|
|
e2ae17d994 | ||
|
|
47f153fe76 | ||
|
|
f9a2f1daf7 | ||
|
|
dadc56ccf9 | ||
|
|
164623d58e | ||
|
|
386b113603 | ||
|
|
8916fe1820 | ||
|
|
ab7513cc85 | ||
|
|
6edb8d9610 | ||
|
|
52e4cd19ce | ||
|
|
ec45ba68cd | ||
|
|
77f31105de | ||
|
|
3136ce6451 | ||
|
|
060c1181bc | ||
|
|
be6e273930 | ||
|
|
63d9d9c148 | ||
|
|
51042e15aa | ||
|
|
a8549e86a7 | ||
|
|
424a6d90bd | ||
|
|
70fa7fc239 | ||
|
|
7df71c9673 | ||
|
|
f7816c577f | ||
|
|
de64bbe875 | ||
|
|
b8e80a67ea | ||
|
|
2071abd295 | ||
|
|
a3964dfd4a | ||
|
|
3383d8c6e7 | ||
|
|
22e8e0eff8 | ||
|
|
cb3b3855b8 | ||
|
|
cc235be3aa | ||
|
|
53a4b6936b | ||
|
|
091a65996e | ||
|
|
a923728877 | ||
|
|
4819d195d8 | ||
|
|
f3a931e1c9 | ||
|
|
090fa619b4 | ||
|
|
2c92accb8e | ||
|
|
171d9fd036 | ||
|
|
036eff2c48 | ||
|
|
fff899ec16 | ||
|
|
6cb8c11285 | ||
|
|
3092b9a46e | ||
|
|
9b5caa190e | ||
|
|
af7573ddbe | ||
|
|
4bab6d5356 | ||
|
|
2b67aba94c | ||
|
|
6152f02333 | ||
|
|
84fb48825d | ||
|
|
a83ecc123d | ||
|
|
1f082a85cb | ||
|
|
5c1af537af | ||
|
|
a446dbefaa | ||
|
|
2592da2273 | ||
|
|
b90784da90 | ||
|
|
f741101e44 | ||
|
|
cacec36dd1 | ||
|
|
f2390deaa9 | ||
|
|
8fc99387f5 | ||
|
|
939d0c59a3 | ||
|
|
edc25a689f | ||
|
|
68b5270fe4 | ||
|
|
a11bf19b93 | ||
|
|
2ad3a75be5 | ||
|
|
50058371ef | ||
|
|
ce0a097392 | ||
|
|
1e084dfab7 | ||
|
|
5a55d3a949 | ||
|
|
7a2dbd9112 | ||
|
|
c9804510d1 | ||
|
|
c37f4c3c1a | ||
|
|
319bf9d8d2 | ||
|
|
786e101acf | ||
|
|
596e12b897 | ||
|
|
4a9d890ae9 | ||
|
|
873c4fc81e | ||
|
|
f518676b76 | ||
|
|
0f6583560d | ||
|
|
6537dfe7f1 | ||
|
|
f2b59f5097 | ||
|
|
8ae4859398 | ||
|
|
c4f231deb4 | ||
|
|
c58d98a39e | ||
|
|
77ca9c593f | ||
|
|
8488dc791a | ||
|
|
df1ad8e122 | ||
|
|
931bc690cd | ||
|
|
087174c6a6 | ||
|
|
9fce8636b0 | ||
|
|
5bdbb5f802 | ||
|
|
59c9ae29cf | ||
|
|
82ebd8aae1 | ||
|
|
a3f1601fd1 | ||
|
|
620155ac8d | ||
|
|
9a7fa47857 | ||
|
|
0b1d3669bc | ||
|
|
8128e8e817 | ||
|
|
73fce903b8 | ||
|
|
b52356f6b5 | ||
|
|
139c6bfcf3 | ||
|
|
53631f97db | ||
|
|
006254fc9c | ||
|
|
bf7280b55b | ||
|
|
48cec4a786 | ||
|
|
6245a17e16 | ||
|
|
1402b9ed72 | ||
|
|
253021866c | ||
|
|
e8b435a624 | ||
|
|
9db87fc636 | ||
|
|
1a429bb3c4 | ||
|
|
a4412e8d63 | ||
|
|
c3af33f97d | ||
|
|
68cc5fe965 | ||
|
|
6227aee863 | ||
|
|
ee6b7152c7 | ||
|
|
53e3bc6092 | ||
|
|
7db2df33e8 | ||
|
|
b4c96bca93 | ||
|
|
c488ce166e | ||
|
|
4d8f340827 | ||
|
|
eccf87acc7 | ||
|
|
19b39f49fa | ||
|
|
e482ab6292 | ||
|
|
20d9498fdb | ||
|
|
1a64053da5 | ||
|
|
5ee4931fb6 | ||
|
|
49fd99119d | ||
|
|
179b11151e | ||
|
|
3baccc9d3e | ||
|
|
edc77d7f00 | ||
|
|
fec39e87c0 | ||
|
|
a826091dc9 | ||
|
|
a3eae736e7 | ||
|
|
a666de46aa | ||
|
|
e35c56ceb3 | ||
|
|
be55085303 | ||
|
|
0b6e46b1e4 | ||
|
|
b2b243e803 | ||
|
|
475a4d71d8 | ||
|
|
0dd5be788f | ||
|
|
4e8f42f6f6 | ||
|
|
9f575a70c1 | ||
|
|
f372420dc0 | ||
|
|
2183e25081 | ||
|
|
8d27dba4cd | ||
|
|
02ac7c309e | ||
|
|
4907c56231 | ||
|
|
42952743ba | ||
|
|
04345643a0 | ||
|
|
80aabfe0aa | ||
|
|
9c7d83ebc1 | ||
|
|
465f156e03 | ||
|
|
d0fbba19d1 | ||
|
|
f407c5a25f | ||
|
|
c1a274d91c | ||
|
|
0f8614221b | ||
|
|
291cdd4bfb | ||
|
|
2ce946584e | ||
|
|
78cc2aa9cc | ||
|
|
9553478d9c | ||
|
|
6689b0be02 | ||
|
|
a44d7d86cb | ||
|
|
8659b9d77c | ||
|
|
1b8d03f3aa | ||
|
|
bf1db80e4f | ||
|
|
e7a4a3516f | ||
|
|
2c194df591 | ||
|
|
6580ddd6cb | ||
|
|
a3a5e5b824 | ||
|
|
788ab8d3a8 | ||
|
|
9e1c048e20 | ||
|
|
a1903e025c | ||
|
|
f3bfdd7857 | ||
|
|
c7dae2aca6 | ||
|
|
69138fc08b | ||
|
|
a6b56e6b7a | ||
|
|
c9f804486d | ||
|
|
1d8d2bd7b7 | ||
|
|
a6d402e8fd | ||
|
|
25703b04a2 | ||
|
|
62f28cc4ac | ||
|
|
d460c3863e | ||
|
|
0eb1913713 | ||
|
|
d224f8b7ee | ||
|
|
6662e60b63 | ||
|
|
c7ba01b034 | ||
|
|
2bd8be5872 | ||
|
|
5385d004ec | ||
|
|
bf299e5c17 | ||
|
|
7aaaaa953b | ||
|
|
ad87a6d185 | ||
|
|
e653f4f7dd | ||
|
|
95208bc3dd | ||
|
|
263a766d8e | ||
|
|
61618389e1 | ||
|
|
e6d86bfab5 | ||
|
|
f7959d5646 | ||
|
|
e077a6bf28 | ||
|
|
c002dd6cba | ||
|
|
f2cd511d9c | ||
|
|
3f8bf89e72 | ||
|
|
91c3bdfa15 | ||
|
|
bd368b29b1 | ||
|
|
2e8429858e | ||
|
|
862f83cc40 | ||
|
|
ac339f4724 | ||
|
|
aeccd8c166 | ||
|
|
f6326606b7 | ||
|
|
f541520040 | ||
|
|
7ff899bd22 | ||
|
|
f42f785c78 | ||
|
|
1667ffdd8f | ||
|
|
a7e11d134f | ||
|
|
adf07aab47 | ||
|
|
91612eb45a | ||
|
|
b47a23ab79 | ||
|
|
e28188edd9 | ||
|
|
b65f8a3fe2 | ||
|
|
8d4c134f80 | ||
|
|
4afa7b86ae | ||
|
|
3d4791f291 | ||
|
|
7a3b80a9b7 | ||
|
|
5de4e88d7a | ||
|
|
b60baf46f6 | ||
|
|
d76b58cc72 | ||
|
|
da378077f7 | ||
|
|
f61a91c97d | ||
|
|
d52b917c54 | ||
|
|
f7fc919d98 | ||
|
|
2e7405b76c | ||
|
|
3dfffdf351 | ||
|
|
1a7810efe1 | ||
|
|
6700c5fd46 | ||
|
|
f05cfe2627 | ||
|
|
69cb133c57 | ||
|
|
7c38e2db24 | ||
|
|
64a4ed6db6 | ||
|
|
ebb615d080 | ||
|
|
2d0562412e | ||
|
|
a74f597d45 | ||
|
|
2b269ff1c0 | ||
|
|
e9054f2980 | ||
|
|
d2cf090ace | ||
|
|
93ffe6123d | ||
|
|
8846f50cb7 | ||
|
|
843dd9b5e1 | ||
|
|
0f623c2354 | ||
|
|
f27e1ec818 | ||
|
|
d3cd707db7 | ||
|
|
7afb8ff679 | ||
|
|
b4e0c97469 | ||
|
|
cb34060f00 | ||
|
|
4564f7aeea | ||
|
|
1d3b4d1e9a | ||
|
|
5336620f5c | ||
|
|
a0bf47cfd2 | ||
|
|
d7c00841d6 | ||
|
|
3e6bb267f3 | ||
|
|
5183d7cf0f | ||
|
|
db6b7b473d | ||
|
|
6bdc0365ee | ||
|
|
921ca7712e | ||
|
|
35258b9b9c | ||
|
|
2650fa9a92 | ||
|
|
6f4e2ab491 | ||
|
|
5988c0e95a | ||
|
|
fd461ca702 | ||
|
|
0ea72af60c | ||
|
|
6118ed89bb | ||
|
|
226e3b83da | ||
|
|
f6c846d27a | ||
|
|
3b4e79f073 | ||
|
|
2e5898490c | ||
|
|
d58f090198 | ||
|
|
e9adf8162b | ||
|
|
a034661bc9 | ||
|
|
609cad506f | ||
|
|
950a3e82c1 | ||
|
|
d77846bb16 | ||
|
|
497e0b801f | ||
|
|
a511d79bf0 | ||
|
|
69500eed56 | ||
|
|
c67273e92a | ||
|
|
ef24783bff | ||
|
|
034df61f3c | ||
|
|
3c221d9466 | ||
|
|
6df52f06b6 | ||
|
|
f2596b3759 | ||
|
|
ac0f759b27 | ||
|
|
8e825fa629 | ||
|
|
c54f5c4b4f | ||
|
|
9b193a47a2 | ||
|
|
505438cd90 | ||
|
|
bb66028e74 | ||
|
|
a9b8d30ce0 | ||
|
|
e6ef164441 | ||
|
|
25d3066eae | ||
|
|
ef59c623fd | ||
|
|
8c1f4ba65d | ||
|
|
91093305d6 | ||
|
|
7687ce84ed | ||
|
|
da29203219 | ||
|
|
a6faa0384b | ||
|
|
deaaf3d22f | ||
|
|
448e41ecaa | ||
|
|
5a47379bf5 | ||
|
|
357b67e3f5 | ||
|
|
caa7d3177c | ||
|
|
a06bd7f735 | ||
|
|
260591cc54 | ||
|
|
ad908f5dde | ||
|
|
a844cbbc3d | ||
|
|
011a9cc775 | ||
|
|
7f15e11b1b | ||
|
|
e8727cf4a1 | ||
|
|
6aab948be2 | ||
|
|
083aa700e9 | ||
|
|
7c3e43aa2e | ||
|
|
d88a3cf558 | ||
|
|
b9dc81d600 | ||
|
|
57201187de | ||
|
|
4097c20bdd | ||
|
|
fb1bd1a5bd | ||
|
|
4837969e09 | ||
|
|
ef0b2291a0 | ||
|
|
29172e9ee2 | ||
|
|
66b8c870f4 | ||
|
|
6103677914 | ||
|
|
005ddf26c1 | ||
|
|
c210e1bae6 | ||
|
|
4fe64d1b0d | ||
|
|
461e9fe5c2 | ||
|
|
ad1d0ffc5a | ||
|
|
4a96c7c9f2 | ||
|
|
3ae4c00562 | ||
|
|
13d5c5e7e6 | ||
|
|
8929e55bff | ||
|
|
11ecab3ca1 | ||
|
|
48ce6151f9 | ||
|
|
fe1d82c9c3 | ||
|
|
be1e09aad4 | ||
|
|
06fbbaa43f | ||
|
|
31dd135075 | ||
|
|
08e5c8e010 | ||
|
|
3519cbd3e5 | ||
|
|
6b8374f391 | ||
|
|
96e2ba19f8 | ||
|
|
a78e4a3366 | ||
|
|
b375e20c75 | ||
|
|
d9f6a05b7e | ||
|
|
64b585efa1 | ||
|
|
54b88cdfbe | ||
|
|
e9adfd8663 | ||
|
|
8d0b4ede68 | ||
|
|
9707eeb8cb | ||
|
|
2f48d0c828 | ||
|
|
2ff9270279 | ||
|
|
8a157eee0a | ||
|
|
8aaa3c4884 | ||
|
|
59825a5268 | ||
|
|
cc2cebffb6 | ||
|
|
4bb6740bf4 | ||
|
|
9693184cea | ||
|
|
822f0bd40b | ||
|
|
02f6ed7da3 | ||
|
|
39a121351d | ||
|
|
00d23c61d9 | ||
|
|
8eed6ae179 | ||
|
|
6e42c791cf | ||
|
|
368d2f3279 | ||
|
|
c594d89dc5 | ||
|
|
223b49e3be | ||
|
|
ec61964bce | ||
|
|
d8a04c9e43 | ||
|
|
ef13866af6 | ||
|
|
168d3d7ddb | ||
|
|
2173ceae95 | ||
|
|
416a898943 | ||
|
|
02a28996f4 | ||
|
|
36996af82b | ||
|
|
145bd243e8 | ||
|
|
4cb00d3801 | ||
|
|
148383ff53 | ||
|
|
493f6cb578 | ||
|
|
a6409fb445 | ||
|
|
d94e8e8faf | ||
|
|
fd4c2172f5 | ||
|
|
2e734a4750 | ||
|
|
e6ef2f12de | ||
|
|
11de714d9d | ||
|
|
042e21115e | ||
|
|
63e9f6d826 | ||
|
|
150f5302b7 | ||
|
|
047f9c49ec | ||
|
|
0f43523a16 | ||
|
|
8d782a1027 | ||
|
|
c2ff171364 | ||
|
|
3b1400eaed | ||
|
|
2860f6e4a9 | ||
|
|
bbbfe65870 | ||
|
|
ab788a5316 | ||
|
|
f1660d8e05 | ||
|
|
eac0d0c99a | ||
|
|
52df1e65de | ||
|
|
bb5d2c501c | ||
|
|
213a8eb905 | ||
|
|
ee05c7fe42 | ||
|
|
28ec412369 | ||
|
|
941e70a701 | ||
|
|
0d05be4e31 | ||
|
|
78fed0dfe7 | ||
|
|
cdb65e9ced | ||
|
|
482ff4562f | ||
|
|
38bca2332d | ||
|
|
c587203ebe | ||
|
|
716e322246 | ||
|
|
3a0d99d24c | ||
|
|
d3b11c2b8c | ||
|
|
e6914355dd | ||
|
|
b3581bc0b4 | ||
|
|
c9a7fd9435 | ||
|
|
bc7161754f | ||
|
|
7a360b1181 | ||
|
|
8fadca196b | ||
|
|
30236a804d | ||
|
|
24eb7c98f2 | ||
|
|
89e2709304 | ||
|
|
7b9e58f7c6 | ||
|
|
737d41e184 | ||
|
|
97f83c9fb2 | ||
|
|
224e805fe4 | ||
|
|
9e8faebcd6 | ||
|
|
bc4d3a32eb |
24
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
24
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
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.
|
||||||
13
.github/pull_request_template.md
vendored
Normal file
13
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
|
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 R* 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 R* supported/outsourced
|
||||||
|
- Code that increase maintainability
|
||||||
117
.github/workflows/build-cmake-conan.yml
vendored
Normal file
117
.github/workflows/build-cmake-conan.yml
vendored
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
name: re3 conan+cmake
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
release:
|
||||||
|
types: published
|
||||||
|
jobs:
|
||||||
|
build-cmake:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: 'windows-latest'
|
||||||
|
platform: 'gl3'
|
||||||
|
gl3_gfxlib: 'glfw'
|
||||||
|
audio: 'openal'
|
||||||
|
# - os: 'windows-latest'
|
||||||
|
# platform: 'gl3'
|
||||||
|
# gl3_gfxlib: 'sdl2'
|
||||||
|
# audio: 'openal'
|
||||||
|
- os: 'windows-latest'
|
||||||
|
platform: 'd3d9'
|
||||||
|
audio: 'openal'
|
||||||
|
# - os: 'windows-latest'
|
||||||
|
# platform: 'd3d9'
|
||||||
|
# audio: 'miles'
|
||||||
|
- os: 'ubuntu-18.04'
|
||||||
|
platform: 'gl3'
|
||||||
|
gl3_gfxlib: 'glfw'
|
||||||
|
audio: 'openal'
|
||||||
|
# - os: 'ubuntu-18.04'
|
||||||
|
# platform: 'gl3'
|
||||||
|
# gl3_gfxlib: 'sdl2'
|
||||||
|
# audio: 'openal'
|
||||||
|
- os: 'macos-latest'
|
||||||
|
platform: 'gl3'
|
||||||
|
gl3_gfxlib: 'glfw'
|
||||||
|
audio: 'openal'
|
||||||
|
# - os: 'macos-latest'
|
||||||
|
# platform: 'gl3'
|
||||||
|
# gl3_gfxlib: 'sdl2'
|
||||||
|
# audio: 'openal'
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
continue-on-error: ${{ matrix.platform == 'ps2' || matrix.gl3_gfxlib == 'sdl2' || matrix.audio == 'miles' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: "Checkout Miles SDK Import Library project"
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
if: ${{ matrix.audio == 'miles' }}
|
||||||
|
with:
|
||||||
|
repository: 'withmorten/re3mss'
|
||||||
|
path: 're3mss'
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: "Use XCode 11 as default (conan-center-index does not provide XCode 12 binaries at the moment)"
|
||||||
|
if: startsWith(matrix.os, 'macos')
|
||||||
|
run: |
|
||||||
|
sudo xcode-select --switch /Applications/Xcode_11.7.app
|
||||||
|
- name: "Setup conan"
|
||||||
|
run: |
|
||||||
|
python -m pip install conan
|
||||||
|
conan config init
|
||||||
|
conan config set log.print_run_commands=True
|
||||||
|
conan config set general.revisions_enabled=1
|
||||||
|
conan remote add bincrafters https://bincrafters.jfrog.io/artifactory/api/conan/public-conan
|
||||||
|
# conan remote add madebr_ps2dev https://api.bintray.com/conan/madebr/ps2dev
|
||||||
|
- name: "Add os=playstation2 + gcc.version=3.2 to .conan/settings.yml"
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import os, yaml
|
||||||
|
settings_path = os.path.expanduser("~/.conan/settings.yml")
|
||||||
|
yml = yaml.safe_load(open(settings_path))
|
||||||
|
yml["os"]["playstation2"] = None
|
||||||
|
yml["compiler"]["gcc"]["version"].append("3.2")
|
||||||
|
yml["compiler"]["gcc"]["version"].sort()
|
||||||
|
yaml.safe_dump(yml, open(settings_path, "w"))
|
||||||
|
- name: "Create host profile"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if test "${{ matrix.platform }}" = "ps2"; then
|
||||||
|
cp vendor/librw/conan/playstation2 host_profile
|
||||||
|
else
|
||||||
|
cp ~/.conan/profiles/default host_profile
|
||||||
|
fi
|
||||||
|
- name: "Export Playstation 2 CMake toolchain conan recipe"
|
||||||
|
run: |
|
||||||
|
conan export vendor/librw/cmake/ps2/cmaketoolchain ps2dev-cmaketoolchain/master@
|
||||||
|
- name: "Export librw conan recipe"
|
||||||
|
run: |
|
||||||
|
conan export vendor/librw librw/master@
|
||||||
|
- name: "Export Miles SDK conan recipe"
|
||||||
|
if: ${{ matrix.audio == 'miles' }}
|
||||||
|
run: |
|
||||||
|
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
|
||||||
|
env:
|
||||||
|
CONAN_SYSREQUIRES_MODE: enabled
|
||||||
|
- name: "Build re3 (conan build)"
|
||||||
|
run: |
|
||||||
|
conan build ${{ github.workspace }} -if build -bf build -pf package
|
||||||
|
- name: "Package re3 (conan package)"
|
||||||
|
run: |
|
||||||
|
conan package ${{ github.workspace }} -if build -bf build -pf package
|
||||||
|
- name: "Create binary package (cpack)"
|
||||||
|
working-directory: ./build
|
||||||
|
run: |
|
||||||
|
cpack -C RelWithDebInfo
|
||||||
|
- name: "Archive binary package (github artifacts)"
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ matrix.os }}-${{ matrix.platform }}"
|
||||||
|
path: build/*.zip
|
||||||
|
if-no-files-found: error
|
||||||
28
.github/workflows/build-switch.yml
vendored
Normal file
28
.github/workflows/build-switch.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
name: re3 cmake devkitA64 (Nintendo Switch)
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
release:
|
||||||
|
types: published
|
||||||
|
jobs:
|
||||||
|
build-nintendo-switch:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: devkitpro/devkita64:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
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
|
||||||
|
cmake --build build --parallel
|
||||||
|
- name: "Create binary package (cpack)"
|
||||||
|
working-directory: ./build
|
||||||
|
run: |
|
||||||
|
cpack
|
||||||
|
- name: "Archive binary package (github artifacts)"
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "switch-gl3"
|
||||||
|
path: build/*.zip
|
||||||
|
if-no-files-found: error
|
||||||
28
.github/workflows/re3_msvc_amd64.yml
vendored
28
.github/workflows/re3_msvc_amd64.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: re3_msvc_amd64
|
name: re3 premake amd64
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -6,13 +6,9 @@ on:
|
|||||||
release:
|
release:
|
||||||
types: published
|
types: published
|
||||||
env:
|
env:
|
||||||
GLEW_VER: "2.1.0"
|
|
||||||
GLFW_VER: "3.3.2"
|
GLFW_VER: "3.3.2"
|
||||||
GLEW_BASE: "glew-2.1.0"
|
|
||||||
GLFW_BASE: "glfw-3.3.2.bin.WIN64"
|
GLFW_BASE: "glfw-3.3.2.bin.WIN64"
|
||||||
GLEW_FILE: "glew-2.1.0-win32.zip"
|
|
||||||
GLFW_FILE: "glfw-3.3.2.bin.WIN64.zip"
|
GLFW_FILE: "glfw-3.3.2.bin.WIN64.zip"
|
||||||
GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip"
|
|
||||||
GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN64.zip"
|
GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN64.zip"
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -27,11 +23,6 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
- if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
|
|
||||||
name: Download glew
|
|
||||||
uses: carlosperate/download-file-action@v1.0.3
|
|
||||||
with:
|
|
||||||
file-url: ${{env.GLEW_URL}}
|
|
||||||
- if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
|
- if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
|
||||||
name: Download glfw
|
name: Download glfw
|
||||||
uses: carlosperate/download-file-action@v1.0.3
|
uses: carlosperate/download-file-action@v1.0.3
|
||||||
@@ -40,22 +31,29 @@ jobs:
|
|||||||
- if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
|
- if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
|
||||||
name: Unpack archives
|
name: Unpack archives
|
||||||
run: |
|
run: |
|
||||||
7z x ${{env.GLEW_FILE}}
|
|
||||||
7z x ${{env.GLFW_FILE}}
|
7z x ${{env.GLFW_FILE}}
|
||||||
- name: Configure build
|
- name: Configure build
|
||||||
run: |
|
run: |
|
||||||
./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir64=${{env.GLFW_BASE}}
|
./premake5 vs2019 --with-librw --no-full-paths --glfwdir64=${{env.GLFW_BASE}}
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||||
- name: Pack artifacts
|
# - name: Pack artifacts
|
||||||
|
# run: |
|
||||||
|
# 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||||
|
- name: Move binaries to gamefiles
|
||||||
run: |
|
run: |
|
||||||
7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
|
||||||
|
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
|
||||||
|
- name: Move dynamic dependencies to gamefiles
|
||||||
|
run: |
|
||||||
|
mv ./vendor/mpg123/dist/Win64/libmpg123-0.dll ./gamefiles/
|
||||||
|
mv ./vendor/openal-soft/dist/Win64/OpenAL32.dll ./gamefiles/
|
||||||
- name: Upload artifact to actions
|
- name: Upload artifact to actions
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
||||||
path: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
|
path: ./gamefiles/*
|
||||||
# - name: Upload artifact to Bintray
|
# - name: Upload artifact to Bintray
|
||||||
# uses: hpcsc/upload-bintray-docker-action@v1
|
# uses: hpcsc/upload-bintray-docker-action@v1
|
||||||
# with:
|
# with:
|
||||||
|
|||||||
31
.github/workflows/re3_msvc_x86.yml
vendored
31
.github/workflows/re3_msvc_x86.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: re3_msvc_x86
|
name: re3 premake x86
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -6,13 +6,9 @@ on:
|
|||||||
release:
|
release:
|
||||||
types: published
|
types: published
|
||||||
env:
|
env:
|
||||||
GLEW_VER: "2.1.0"
|
|
||||||
GLFW_VER: "3.3.2"
|
GLFW_VER: "3.3.2"
|
||||||
GLEW_BASE: "glew-2.1.0"
|
|
||||||
GLFW_BASE: "glfw-3.3.2.bin.WIN32"
|
GLFW_BASE: "glfw-3.3.2.bin.WIN32"
|
||||||
GLEW_FILE: "glew-2.1.0-win32.zip"
|
|
||||||
GLFW_FILE: "glfw-3.3.2.bin.WIN32.zip"
|
GLFW_FILE: "glfw-3.3.2.bin.WIN32.zip"
|
||||||
GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip"
|
|
||||||
GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN32.zip"
|
GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN32.zip"
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -20,18 +16,13 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platform: [win-x86-librw_d3d9-mss, win-x86-librw_gl3_glfw-mss, win-x86-librw_d3d9-oal, win-x86-librw_gl3_glfw-oal]
|
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]
|
buildtype: [Debug, Release, Vanilla]
|
||||||
steps:
|
steps:
|
||||||
- name: Add msbuild to PATH
|
- name: Add msbuild to PATH
|
||||||
uses: microsoft/setup-msbuild@v1.0.2
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
- if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
|
|
||||||
name: Download glew
|
|
||||||
uses: carlosperate/download-file-action@v1.0.3
|
|
||||||
with:
|
|
||||||
file-url: ${{env.GLEW_URL}}
|
|
||||||
- if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
|
- if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
|
||||||
name: Download glfw
|
name: Download glfw
|
||||||
uses: carlosperate/download-file-action@v1.0.3
|
uses: carlosperate/download-file-action@v1.0.3
|
||||||
@@ -40,22 +31,30 @@ jobs:
|
|||||||
- if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
|
- if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
|
||||||
name: Unpack archives
|
name: Unpack archives
|
||||||
run: |
|
run: |
|
||||||
7z x ${{env.GLEW_FILE}}
|
|
||||||
7z x ${{env.GLFW_FILE}}
|
7z x ${{env.GLFW_FILE}}
|
||||||
- name: Configure build
|
- name: Configure build
|
||||||
run: |
|
run: |
|
||||||
./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir32=${{env.GLFW_BASE}}
|
./premake5 vs2019 --with-librw --no-full-paths --glfwdir32=${{env.GLFW_BASE}}
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
|
||||||
- name: Pack artifacts
|
# - name: Pack artifacts
|
||||||
|
# run: |
|
||||||
|
# 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
||||||
|
- name: Move binaries to gamefiles
|
||||||
run: |
|
run: |
|
||||||
7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
|
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
|
||||||
|
mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
|
||||||
|
- if: contains(matrix.platform, 'oal')
|
||||||
|
name: Move dynamic dependencies to gamefiles
|
||||||
|
run: |
|
||||||
|
mv ./vendor/mpg123/dist/Win32/libmpg123-0.dll ./gamefiles/
|
||||||
|
mv ./vendor/openal-soft/dist/Win32/OpenAL32.dll ./gamefiles/
|
||||||
- name: Upload artifact to actions
|
- name: Upload artifact to actions
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
|
||||||
path: re3_${{matrix.buildtype}}_${{matrix.platform}}.zip
|
path: ./gamefiles/*
|
||||||
# - name: Upload artifact to Bintray
|
# - name: Upload artifact to Bintray
|
||||||
# uses: hpcsc/upload-bintray-docker-action@v1
|
# uses: hpcsc/upload-bintray-docker-action@v1
|
||||||
# with:
|
# with:
|
||||||
|
|||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -353,4 +353,11 @@ vendor/glew-2.1.0/
|
|||||||
vendor/glfw-3.3.2.bin.WIN32/
|
vendor/glfw-3.3.2.bin.WIN32/
|
||||||
vendor/glfw-3.3.2.bin.WIN64/
|
vendor/glfw-3.3.2.bin.WIN64/
|
||||||
|
|
||||||
sdk/
|
sdk/
|
||||||
|
|
||||||
|
codewarrior/re3.mcp
|
||||||
|
codewarrior/re3_Data/
|
||||||
|
codewarrior/Release/
|
||||||
|
codewarrior/Debug/
|
||||||
|
|
||||||
|
src/extras/GitSHA1.cpp
|
||||||
44
.travis.yml
44
.travis.yml
@@ -1,44 +0,0 @@
|
|||||||
language: cpp
|
|
||||||
dist: focal
|
|
||||||
os: linux
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- env: TARGET=release_linux-amd64-librw_gl3_glfw-oal
|
|
||||||
os: linux
|
|
||||||
- env: TARGET=debug_linux-amd64-librw_gl3_glfw-oal
|
|
||||||
os: linux
|
|
||||||
- env: TARGET=release_macosx-amd64-librw_gl3_glfw-oal PREMAKE5=premake-5.0.0-alpha15
|
|
||||||
compiler: clang
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode12u
|
|
||||||
- env: TARGET=debug_macosx-amd64-librw_gl3_glfw-oal PREMAKE5=premake-5.0.0-alpha15
|
|
||||||
compiler: clang
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode12u
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- linux-libc-dev
|
|
||||||
- libopenal-dev
|
|
||||||
- libglew-dev
|
|
||||||
- libglfw3-dev
|
|
||||||
- libsndfile1-dev
|
|
||||||
- libmpg123-dev
|
|
||||||
- gcc-8-multilib
|
|
||||||
- g++-8-multilib
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- libsndfile
|
|
||||||
- mpg123
|
|
||||||
- glew
|
|
||||||
- glfw
|
|
||||||
- openal-soft
|
|
||||||
script:
|
|
||||||
- mkdir -p "$TRAVIS_BUILD_DIR/build"
|
|
||||||
- cd "$TRAVIS_BUILD_DIR"
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = linux ]; then ./premake5Linux --with-librw gmake2; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = osx ]; then curl -L -o "${PREMAKE5}.zip" "https://github.com/premake/premake-core/releases/download/v5.0.0-alpha15/${PREMAKE5}-src.zip" && unzip -q "${PREMAKE5}.zip" && cd "$PREMAKE5" && make -f Bootstrap.mak osx && cd .. && "./${PREMAKE5}/bin/release/premake5" --with-librw gmake2; fi
|
|
||||||
- cd build
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = linux ]; then env CC=gcc-8 CXX=g++-8 make config=$TARGET -j4 verbose=1; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = osx ]; then make config=$TARGET -j4 verbose=1; fi
|
|
||||||
18
.vscode/c_cpp_properties.json
vendored
18
.vscode/c_cpp_properties.json
vendored
@@ -26,6 +26,24 @@
|
|||||||
"compilerArgs": ["-ggdb"],
|
"compilerArgs": ["-ggdb"],
|
||||||
"cStandard": "gnu11",
|
"cStandard": "gnu11",
|
||||||
"cppStandard": "gnu++14"
|
"cppStandard": "gnu++14"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "devkitPro aarch64 (Nintendo Switch)",
|
||||||
|
"compilerPath": "${env:DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++",
|
||||||
|
"includePath": [
|
||||||
|
"${default}",
|
||||||
|
"${env:DEVKITPRO}/portlibs/switch/include",
|
||||||
|
"${env:DEVKITPRO}/libnx/include"
|
||||||
|
],
|
||||||
|
"intelliSenseMode": "gcc-arm64",
|
||||||
|
"cStandard": "gnu11",
|
||||||
|
"cppStandard": "gnu++11",
|
||||||
|
"defines": [
|
||||||
|
"__SWITCH__",
|
||||||
|
"LIBRW",
|
||||||
|
"RW_GL3",
|
||||||
|
"AUDIO_OAL"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": 4
|
"version": 4
|
||||||
|
|||||||
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -3,7 +3,7 @@
|
|||||||
{
|
{
|
||||||
"MIMode": "gdb",
|
"MIMode": "gdb",
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}/bin/linux-amd64-librw_gl3_glfw-oal/Debug",
|
||||||
"environment": [],
|
"environment": [],
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"name": "(gdb) Launch (Linux Debug)",
|
"name": "(gdb) Launch (Linux Debug)",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
{
|
{
|
||||||
"MIMode": "gdb",
|
"MIMode": "gdb",
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}/bin/linux-amd64-librw_gl3_glfw-oal/Release",
|
||||||
"environment": [],
|
"environment": [],
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"name": "(gdb) Launch (Linux Release)",
|
"name": "(gdb) Launch (Linux Release)",
|
||||||
|
|||||||
12
.vscode/settings.json
vendored
12
.vscode/settings.json
vendored
@@ -2,8 +2,13 @@
|
|||||||
"C_Cpp.default.cStandard": "gnu11",
|
"C_Cpp.default.cStandard": "gnu11",
|
||||||
"C_Cpp.default.cppStandard": "gnu++14",
|
"C_Cpp.default.cppStandard": "gnu++14",
|
||||||
"C_Cpp.default.includePath": [
|
"C_Cpp.default.includePath": [
|
||||||
|
"src",
|
||||||
"src/animation",
|
"src/animation",
|
||||||
"src/audio",
|
"src/audio",
|
||||||
|
"src/audio/eax",
|
||||||
|
"src/audio/oal",
|
||||||
|
"src/buildings",
|
||||||
|
"src/collision",
|
||||||
"src/control",
|
"src/control",
|
||||||
"src/core",
|
"src/core",
|
||||||
"src/entities",
|
"src/entities",
|
||||||
@@ -13,10 +18,11 @@
|
|||||||
"src/modelinfo",
|
"src/modelinfo",
|
||||||
"src/objects",
|
"src/objects",
|
||||||
"src/peds",
|
"src/peds",
|
||||||
"src/render",
|
"src/renderer",
|
||||||
"src/rw",
|
"src/rw",
|
||||||
"src/save",
|
"src/save/",
|
||||||
"src/skel",
|
"src/skel/",
|
||||||
|
"src/skel/glfw",
|
||||||
"src/text",
|
"src/text",
|
||||||
"src/vehicles",
|
"src/vehicles",
|
||||||
"src/weapons",
|
"src/weapons",
|
||||||
|
|||||||
114
CMakeLists.txt
114
CMakeLists.txt
@@ -1,44 +1,100 @@
|
|||||||
cmake_minimum_required(VERSION 3.8)
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
|
||||||
project(re3 C CXX)
|
set(EXECUTABLE re3)
|
||||||
|
set(PROJECT RE3)
|
||||||
|
|
||||||
|
project(${EXECUTABLE} C CXX)
|
||||||
|
set(${PROJECT}_AUTHOR "${PROJECT} Team")
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
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)
|
||||||
|
endfunction()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(RE3_AUDIOS "NULL" "OAL" "MSS")
|
set(${PROJECT}_AUDIOS "OAL" "MSS")
|
||||||
else()
|
else()
|
||||||
set(RE3_AUDIOS "NULL" "OAL")
|
set(${PROJECT}_AUDIOS "OAL")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(RE3_AUDIO "OAL" CACHE STRING "Audio")
|
set(${PROJECT}_AUDIO "OAL" CACHE STRING "Audio")
|
||||||
|
|
||||||
set_property(CACHE RE3_AUDIO PROPERTY STRINGS ${RE3_AUDIOS})
|
option(${PROJECT}_INSTALL "Enable installation of ${EXECUTABLE} + gamefiles" OFF)
|
||||||
message(STATUS "RE3_AUDIO = ${RE3_AUDIO} (choices=${RE3_AUDIOS})")
|
option(${PROJECT}_WITH_OPUS "Build ${EXECUTABLE} with opus support" OFF)
|
||||||
set("RE3_AUDIO_${RE3_AUDIO}" ON)
|
option(${PROJECT}_WITH_LIBSNDFILE "Build ${EXECUTABLE} with libsndfile (instead of internal decoder)" OFF)
|
||||||
if(NOT RE3_AUDIO IN_LIST RE3_AUDIOS)
|
|
||||||
message(FATAL_ERROR "Illegal RE3_AUDIO=${RE3_AUDIO}")
|
set_property(CACHE ${PROJECT}_AUDIO PROPERTY STRINGS ${${PROJECT}_AUDIOS})
|
||||||
|
message(STATUS "${PROJECT}_AUDIO = ${${PROJECT}_AUDIO} (choices=${${PROJECT}_AUDIOS})")
|
||||||
|
set("${PROJECT}_AUDIO_${${PROJECT}_AUDIO}" ON)
|
||||||
|
if(NOT ${PROJECT}_AUDIO IN_LIST ${PROJECT}_AUDIOS)
|
||||||
|
message(FATAL_ERROR "Illegal ${PROJECT}_AUDIO=${${PROJECT}_AUDIO}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(RE3_INSTALL)
|
option(${PROJECT}_VENDORED_LIBRW "Use vendored librw" ON)
|
||||||
include(GNUInstallDirs)
|
if(${PROJECT}_VENDORED_LIBRW)
|
||||||
set(RE3_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/re3")
|
add_subdirectory(vendor/librw)
|
||||||
|
else()
|
||||||
|
find_package(librw REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory("vendor/librw")
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
if(RE3_INSTALL)
|
if(${PROJECT}_INSTALL)
|
||||||
include(CMakePackageConfigHelpers)
|
install(DIRECTORY gamefiles/ DESTINATION ".")
|
||||||
configure_package_config_file(re3-config.cmake.in re3-config.cmake
|
if(LIBRW_PLATFORM_NULL)
|
||||||
INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}"
|
set(platform "-null")
|
||||||
)
|
elseif(LIBRW_PLATFORM_PS2)
|
||||||
install(
|
set(platform "-ps2")
|
||||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/re3-config.cmake"
|
elseif(LIBRW_PLATFORM_GL3)
|
||||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
if(LIBRW_GL3_GFXLIB STREQUAL "GLFW")
|
||||||
)
|
set(platform "-gl3-glfw")
|
||||||
install(
|
else()
|
||||||
EXPORT re3-targets
|
set(platform "-gl3-sdl2")
|
||||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
endif()
|
||||||
)
|
elseif(LIBRW_PLATFORM_D3D9)
|
||||||
|
set(platform "-d3d9")
|
||||||
|
endif()
|
||||||
|
if(${PROJECT}_AUDIO_OAL)
|
||||||
|
set(audio "-oal")
|
||||||
|
elseif(${PROJECT}_AUDIO_MSS)
|
||||||
|
set(audio "-mss")
|
||||||
|
endif()
|
||||||
|
if(${PROJECT}_WITH_OPUS)
|
||||||
|
set(audio "${audio}-opus")
|
||||||
|
endif()
|
||||||
|
if(NOT LIBRW_PLATFORM_PS2)
|
||||||
|
if(WIN32)
|
||||||
|
set(os "-win")
|
||||||
|
elseif(APPLE)
|
||||||
|
set(os "-apple")
|
||||||
|
elseif(UNIX)
|
||||||
|
set(os "-linux")
|
||||||
|
elseif(NINTENDO_SWITCH)
|
||||||
|
set(os "-switch")
|
||||||
|
else()
|
||||||
|
set(compiler "-UNK")
|
||||||
|
message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
include(CMakeCPack.cmake)
|
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}${platform}${audio}${os}${compiler}")
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GTA III reversed")
|
||||||
|
set(CPACK_PACKAGE_VENDOR "GTAModding")
|
||||||
|
# FIXME: missing license (https://github.com/GTAmodding/re3/issues/794)
|
||||||
|
# set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||||
|
# set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||||
|
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")
|
||||||
|
include(CPack)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
236
README.md
236
README.md
@@ -1,56 +1,212 @@
|
|||||||
<img src="https://github.com/GTAmodding/re3/blob/master/logo.png?raw=true" alt="re3 logo" width="200">
|
<img src="https://github.com/hezkore/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)
|
## About this fork of re3
|
||||||
<a href="https://discord.gg/aKYAwCx92H"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
This fork fixes some issues I've had with the original re3.\
|
||||||
|
They're currently only applied to GTA 3.
|
||||||
|
|
||||||
|
* The camera now has the same vertical and horizontal speed.
|
||||||
|
* The mouse is generally slower, letting you adjust the mouse sensitivity at a finer-granularity level.
|
||||||
|
* Particles are no longer affected by framerate.\
|
||||||
|
_(via a dirty fixed rate hack)_
|
||||||
|
|
||||||
## Intro
|
## Intro
|
||||||
|
|
||||||
The aim of this project is to reverse GTA III for PC by replacing
|
In this repository you'll find the fully reversed source code for GTA III ([master](https://github.com/hezkore/re3/tree/master/) branch) and GTA VC ([miami](https://github.com/GTAmodding/re3/tree/miami/) branch).
|
||||||
parts of the game [one by one](https://en.wikipedia.org/wiki/Ship_of_Theseus)
|
|
||||||
such that we have a working game at all times.
|
|
||||||
|
|
||||||
## How can I try it?
|
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.
|
||||||
|
|
||||||
- re3 requires game assets to work, so you **must** own [a copy of GTA III](https://store.steampowered.com/app/12100/Grand_Theft_Auto_III/).
|
The project has also been ported to the [Nintendo Switch](https://github.com/AGraber/re3-nx/),
|
||||||
- Build re3 or download it from one of the above links (Debug or Release).
|
[Playstation Vita](https://github.com/Rinnegatamante/re3) and
|
||||||
- (Optional) If you want to use optional features like Russian language or menu map, copy the files in /gamefiles folder to your game root folder.
|
[Nintendo Wii U](https://github.com/GaryOderNichts/re3-wiiu/).
|
||||||
- Move re3.exe to GTA 3 directory and run it.
|
|
||||||
|
|
||||||
## Preparing the environment for building
|
We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us.
|
||||||
|
|
||||||
You may want to point GTA_III_RE_DIR environment variable to GTA3 root folder if you want executable to be moved there via post-build script.
|
## Installation
|
||||||
|
|
||||||
- For Linux, proceed: [Building on Linux](https://github.com/GTAmodding/re3/wiki/Building-on-Linux)
|
- 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/).
|
||||||
- For FreeBSD, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)
|
- Build re3 or download the latest build:
|
||||||
- For Windows, assuming you have Visual Studio:
|
- [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_x86/master/re3_Release_win-x86-librw_d3d9-mss.zip)
|
||||||
- Clone the repo using the argument `--recursive`.
|
- [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_d3d9-oal.zip)
|
||||||
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
|
- [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_gl3_glfw-oal.zip)
|
||||||
- Open the project via Visual Studio
|
- [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)
|
||||||
**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)
|
- 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.
|
||||||
|
|
||||||
There are various settings at the very bottom of [config.h](https://github.com/GTAmodding/re3/tree/master/src/core/config.h), you may want to take a look there. i.e. FIX_BUGS define fixes the bugs we've come across.
|
## Screenshots
|
||||||
|
|
||||||
> :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).
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
> :information_source: **Did you notice librw?** 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.
|
## 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.
|
||||||
|
|
||||||
|
CLEO scripts work with [CLEO Redux](https://github.com/cleolibrary/CLEO-Redux).
|
||||||
|
|
||||||
|
Mods that make changes to the code (dll/asi, 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.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Please read the [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) Document
|
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.
|
||||||
|
|
||||||
### Unreversed / incomplete classes (at least the ones we know)
|
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.
|
||||||
The following classes have only unused or practically unused code left:
|
|
||||||
```
|
|
||||||
NameGrid.cpp - only on mobile (a player name grid, either a very early player name code ala GTA1 or a multiplayer leftover)
|
|
||||||
PedDebug.cpp - only on mobile (debug code)
|
|
||||||
HandlingMgr.cpp - debug functions from mobile
|
|
||||||
CFormationInfo - unused PedAI class that could be found on mobile
|
|
||||||
CVehicle::ProcessBikeWheel - early bike code (only on mobile)
|
|
||||||
CAutomobile::DebugCode - debug function from mobile
|
|
||||||
CBoat::DebugCode - debug function from mobile
|
|
||||||
CBoat::ModifyHandlingValue - debug function from mobile
|
|
||||||
CBoat::DisplayHandlingData - debug function from mobile
|
|
||||||
CStreaming::PrintRequestList - debug function from mobile
|
|
||||||
d3d8raster.c - only on PC (slight RW modification that we don't actually need)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|||||||
27
autoconf/LICENSE.txt
Normal file
27
autoconf/LICENSE.txt
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) 2016 Blizzard Entertainment and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Premake nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
305
autoconf/api.lua
Normal file
305
autoconf/api.lua
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
---
|
||||||
|
-- Autoconfiguration.
|
||||||
|
-- Copyright (c) 2016 Blizzard Entertainment
|
||||||
|
-- Enhanced by re3
|
||||||
|
---
|
||||||
|
local p = premake
|
||||||
|
local autoconf = p.modules.autoconf
|
||||||
|
autoconf.cache = {}
|
||||||
|
autoconf.parameters = ""
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- register autoconfigure api.
|
||||||
|
---
|
||||||
|
p.api.register {
|
||||||
|
name = "autoconfigure",
|
||||||
|
scope = "config",
|
||||||
|
kind = "table"
|
||||||
|
}
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Check for a particular include file.
|
||||||
|
--
|
||||||
|
-- @cfg : Current config.
|
||||||
|
-- @variable : The variable to store the result, such as 'HAVE_STDINT_H'.
|
||||||
|
-- @filename : The header file to check for.
|
||||||
|
---
|
||||||
|
function check_include(cfg, variable, filename)
|
||||||
|
local res = autoconf.cache_compile(cfg, variable, function ()
|
||||||
|
p.outln('#include <' .. filename .. '>')
|
||||||
|
p.outln('int main(void) { return 0; }')
|
||||||
|
end)
|
||||||
|
|
||||||
|
if res.value then
|
||||||
|
autoconf.set_value(cfg, variable, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Check for size of a particular type.
|
||||||
|
--
|
||||||
|
-- @cfg : Current config.
|
||||||
|
-- @variable : The variable to use, such as 'SIZEOF_SIZE_T', this method will also add "'HAVE_' .. variable".
|
||||||
|
-- @type : The type to check.
|
||||||
|
-- @headers : An optional array of header files to include.
|
||||||
|
-- @defines : An optional array of defines to define.
|
||||||
|
---
|
||||||
|
function check_type_size(cfg, variable, type, headers, defines)
|
||||||
|
check_include(cfg, 'HAVE_SYS_TYPES_H', 'sys/types.h')
|
||||||
|
check_include(cfg, 'HAVE_STDINT_H', 'stdint.h')
|
||||||
|
check_include(cfg, 'HAVE_STDDEF_H', 'stddef.h')
|
||||||
|
|
||||||
|
local res = autoconf.cache_compile(cfg, variable .. cfg.platform,
|
||||||
|
function ()
|
||||||
|
if cfg.autoconf['HAVE_SYS_TYPES_H'] then
|
||||||
|
p.outln('#include <sys/types.h>')
|
||||||
|
end
|
||||||
|
|
||||||
|
if cfg.autoconf['HAVE_STDINT_H'] then
|
||||||
|
p.outln('#include <stdint.h>')
|
||||||
|
end
|
||||||
|
|
||||||
|
if cfg.autoconf['HAVE_STDDEF_H'] then
|
||||||
|
p.outln('#include <stddef.h>')
|
||||||
|
end
|
||||||
|
|
||||||
|
autoconf.include_defines(defines)
|
||||||
|
autoconf.include_headers(headers)
|
||||||
|
p.outln("")
|
||||||
|
p.outln("#define SIZE (sizeof(" .. type .. "))")
|
||||||
|
p.outln("char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[',")
|
||||||
|
p.outln(" ('0' + ((SIZE / 10000)%10)),")
|
||||||
|
p.outln(" ('0' + ((SIZE / 1000)%10)),")
|
||||||
|
p.outln(" ('0' + ((SIZE / 100)%10)),")
|
||||||
|
p.outln(" ('0' + ((SIZE / 10)%10)),")
|
||||||
|
p.outln(" ('0' + (SIZE %10)),")
|
||||||
|
p.outln(" ']', '\\0'};")
|
||||||
|
p.outln("")
|
||||||
|
p.outln("int main(int argc, char *argv[]) {")
|
||||||
|
p.outln(" int require = 0;")
|
||||||
|
p.outln(" require += info_size[argc];")
|
||||||
|
p.outln(" (void)argv;")
|
||||||
|
p.outln(" return require;")
|
||||||
|
p.outln("}")
|
||||||
|
end,
|
||||||
|
function (e)
|
||||||
|
-- if the compile step succeeded, we should have a binary with 'INFO:size[*****]'
|
||||||
|
-- somewhere in there.
|
||||||
|
local content = io.readfile(e.binary)
|
||||||
|
if content then
|
||||||
|
local size = string.find(content, 'INFO:size')
|
||||||
|
if size then
|
||||||
|
e.size = tonumber(string.sub(content, size+10, size+14))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
if res.size then
|
||||||
|
autoconf.set_value(cfg, 'HAVE_' .. variable, 1)
|
||||||
|
autoconf.set_value(cfg, variable, res.size)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Check if the given struct or class has the specified member variable
|
||||||
|
--
|
||||||
|
-- @cfg : current config.
|
||||||
|
-- @variable : variable to store the result.
|
||||||
|
-- @type : the name of the struct or class you are interested in
|
||||||
|
-- @member : the member which existence you want to check
|
||||||
|
-- @headers : an optional array of header files to include.
|
||||||
|
-- @defines : An optional array of defines to define.
|
||||||
|
---
|
||||||
|
function check_struct_has_member(cfg, variable, type, member, headers, defines)
|
||||||
|
local res = autoconf.cache_compile(cfg, variable, function ()
|
||||||
|
autoconf.include_defines(defines)
|
||||||
|
autoconf.include_headers(headers)
|
||||||
|
p.outln('int main(void) {')
|
||||||
|
p.outln(' (void)sizeof(((' .. type .. '*)0)->' .. member ..');')
|
||||||
|
p.outln(' return 0;')
|
||||||
|
p.outln('}')
|
||||||
|
end)
|
||||||
|
|
||||||
|
if res.value then
|
||||||
|
autoconf.set_value(cfg, variable, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Check if a symbol exists as a function, variable, or macro
|
||||||
|
--
|
||||||
|
-- @cfg : current config.
|
||||||
|
-- @variable : variable to store the result.
|
||||||
|
-- @symbol : The symbol to check for.
|
||||||
|
-- @headers : an optional array of header files to include.
|
||||||
|
-- @defines : An optional array of defines to define.
|
||||||
|
---
|
||||||
|
function check_symbol_exists(cfg, variable, symbol, headers, defines)
|
||||||
|
local h = headers
|
||||||
|
local res = autoconf.cache_compile(cfg, variable, function ()
|
||||||
|
autoconf.include_defines(defines)
|
||||||
|
autoconf.include_headers(headers)
|
||||||
|
p.outln('int main(int argc, char** argv) {')
|
||||||
|
p.outln(' (void)argv;')
|
||||||
|
p.outln('#ifndef ' .. symbol)
|
||||||
|
p.outln(' return ((int*)(&' .. symbol .. '))[argc];')
|
||||||
|
p.outln('#else')
|
||||||
|
p.outln(' (void)argc;')
|
||||||
|
p.outln(' return 0;')
|
||||||
|
p.outln('#endif')
|
||||||
|
p.outln('}')
|
||||||
|
end)
|
||||||
|
|
||||||
|
if res.value then
|
||||||
|
autoconf.set_value(cfg, variable, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- try compiling a piece of c/c++
|
||||||
|
---
|
||||||
|
function autoconf.try_compile(cfg, cpp)
|
||||||
|
local ts = autoconf.toolset(cfg)
|
||||||
|
if ts then
|
||||||
|
return ts.try_compile(cfg, cpp, autoconf.parameters)
|
||||||
|
else
|
||||||
|
p.warnOnce('autoconf', 'no toolset found, autoconf always failing.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function autoconf.cache_compile(cfg, entry, func, post)
|
||||||
|
if not autoconf.cache[entry] then
|
||||||
|
local cpp = p.capture(func)
|
||||||
|
local res = autoconf.try_compile(cfg, cpp)
|
||||||
|
if res then
|
||||||
|
local e = { binary = res, value = true }
|
||||||
|
if post then
|
||||||
|
post(e)
|
||||||
|
end
|
||||||
|
autoconf.cache[entry] = e
|
||||||
|
else
|
||||||
|
autoconf.cache[entry] = { }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return autoconf.cache[entry]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- get the current configured toolset, or the default.
|
||||||
|
---
|
||||||
|
function autoconf.toolset(cfg)
|
||||||
|
local ts = p.config.toolset(cfg)
|
||||||
|
if not ts then
|
||||||
|
local tools = {
|
||||||
|
-- Actually we always return nil on msc. see msc.lua
|
||||||
|
['vs2010'] = p.tools.msc,
|
||||||
|
['vs2012'] = p.tools.msc,
|
||||||
|
['vs2013'] = p.tools.msc,
|
||||||
|
['vs2015'] = p.tools.msc,
|
||||||
|
['vs2017'] = p.tools.msc,
|
||||||
|
['vs2019'] = p.tools.msc,
|
||||||
|
['gmake'] = premake.tools.gcc,
|
||||||
|
['gmake2'] = premake.tools.gcc,
|
||||||
|
['codelite'] = premake.tools.gcc,
|
||||||
|
['xcode4'] = premake.tools.clang,
|
||||||
|
}
|
||||||
|
ts = tools[_ACTION]
|
||||||
|
end
|
||||||
|
return ts
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- store the value of the variable in the configuration
|
||||||
|
---
|
||||||
|
function autoconf.set_value(cfg, variable, value)
|
||||||
|
cfg.autoconf[variable] = value
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- write the cfg.autoconf table to the file
|
||||||
|
---
|
||||||
|
function autoconf.writefile(cfg, filename)
|
||||||
|
if cfg.autoconf then
|
||||||
|
local file = io.open(filename, "w+")
|
||||||
|
for variable, value in pairs(cfg.autoconf) do
|
||||||
|
file:write('#define ' .. variable .. ' ' .. tostring(value) .. (_eol or '\n'))
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Utility method to add a table of headers.
|
||||||
|
---
|
||||||
|
function autoconf.include_headers(headers)
|
||||||
|
if headers ~= nil then
|
||||||
|
if type(headers) == "table" then
|
||||||
|
for _, v in ipairs(headers) do
|
||||||
|
p.outln('#include <' .. v .. '>')
|
||||||
|
end
|
||||||
|
else
|
||||||
|
p.outln('#include <' .. headers .. '>')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function autoconf.include_defines(defines)
|
||||||
|
if defines ~= nil then
|
||||||
|
if type(defines) == "table" then
|
||||||
|
for _, v in ipairs(defines) do
|
||||||
|
p.outln('#define ' .. v)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
p.outln('#define ' .. defines)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- attach ourselfs to the running action.
|
||||||
|
---
|
||||||
|
p.override(p.action, 'call', function (base, name)
|
||||||
|
local a = p.action.get(name)
|
||||||
|
|
||||||
|
-- store the old callback.
|
||||||
|
local onBaseProject = a.onProject or a.onproject
|
||||||
|
|
||||||
|
-- override it with our own.
|
||||||
|
a.onProject = function(prj)
|
||||||
|
-- go through each configuration, and call the setup configuration methods.
|
||||||
|
for cfg in p.project.eachconfig(prj) do
|
||||||
|
cfg.autoconf = {}
|
||||||
|
if cfg.autoconfigure then
|
||||||
|
verbosef('Running auto config steps for "%s/%s".', prj.name, cfg.name)
|
||||||
|
for file, func in pairs(cfg.autoconfigure) do
|
||||||
|
func(cfg)
|
||||||
|
|
||||||
|
if not (file ~= "dontWrite") then
|
||||||
|
os.mkdir(cfg.objdir)
|
||||||
|
local filename = path.join(cfg.objdir, file)
|
||||||
|
autoconf.writefile(cfg, filename)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- then call the old onProject.
|
||||||
|
if onBaseProject then
|
||||||
|
onBaseProject(prj)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- now call the original action.call methods
|
||||||
|
base(name)
|
||||||
|
end)
|
||||||
18
autoconf/autoconf.lua
Normal file
18
autoconf/autoconf.lua
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
-- Autoconfiguration.
|
||||||
|
-- Copyright (c) 2016 Blizzard Entertainment
|
||||||
|
---
|
||||||
|
local p = premake
|
||||||
|
|
||||||
|
if not premake.modules.autoconf then
|
||||||
|
p.modules.autoconf = {}
|
||||||
|
p.modules.autoconf._VERSION = p._VERSION
|
||||||
|
|
||||||
|
verbosef('Loading autoconf module...')
|
||||||
|
include('api.lua')
|
||||||
|
include('msc.lua')
|
||||||
|
include('clang.lua')
|
||||||
|
include('gcc.lua')
|
||||||
|
end
|
||||||
|
|
||||||
|
return p.modules.autoconf
|
||||||
27
autoconf/clang.lua
Normal file
27
autoconf/clang.lua
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
-- Autoconfiguration.
|
||||||
|
-- Copyright (c) 2016 Blizzard Entertainment
|
||||||
|
---
|
||||||
|
local p = premake
|
||||||
|
local clang = p.tools.clang
|
||||||
|
|
||||||
|
function clang.try_compile(cfg, text, parameters)
|
||||||
|
-- write the text to a temporary file.
|
||||||
|
local cppFile = path.join(cfg.objdir, "temp.cpp")
|
||||||
|
if not io.writefile(cppFile, text) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if parameters == nil then
|
||||||
|
parameters = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
local outFile = path.join(cfg.objdir, "temp.out")
|
||||||
|
|
||||||
|
-- compile that text file.
|
||||||
|
if os.execute('clang "' .. cppFile .. '" ' .. parameters .. ' -o "' .. outFile ..'" &> /dev/null') then
|
||||||
|
return outFile
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
27
autoconf/gcc.lua
Normal file
27
autoconf/gcc.lua
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
-- Autoconfiguration.
|
||||||
|
-- Copyright (c) 2016 Blizzard Entertainment
|
||||||
|
---
|
||||||
|
local p = premake
|
||||||
|
local gcc = p.tools.gcc
|
||||||
|
|
||||||
|
function gcc.try_compile(cfg, text, parameters)
|
||||||
|
-- write the text to a temporary file.
|
||||||
|
local cppFile = path.join(cfg.objdir, "temp.cpp")
|
||||||
|
if not io.writefile(cppFile, text) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if parameters == nil then
|
||||||
|
parameters = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
local outFile = path.join(cfg.objdir, "temp.out")
|
||||||
|
|
||||||
|
-- compile that text file.
|
||||||
|
if os.execute('gcc "' .. cppFile .. '" ' .. parameters .. ' -o "' .. outFile ..'" &> /dev/null') then
|
||||||
|
return outFile
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
62
autoconf/msc.lua
Normal file
62
autoconf/msc.lua
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
-- Autoconfiguration.
|
||||||
|
-- Copyright (c) 2016 Blizzard Entertainment
|
||||||
|
---
|
||||||
|
local p = premake
|
||||||
|
local msc = p.tools.msc
|
||||||
|
|
||||||
|
-- "parameters" is unused, matter of fact this file is unused - re3
|
||||||
|
function msc.try_compile(cfg, text, parameters)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
--[[
|
||||||
|
-- write the text to a temporary file.
|
||||||
|
local cppFile = path.join(cfg.objdir, "temp.cpp")
|
||||||
|
if not io.writefile(cppFile, text) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- write out a batch file.
|
||||||
|
local batch = p.capture(function ()
|
||||||
|
p.outln('@echo off')
|
||||||
|
p.outln('SET mypath=%~dp0')
|
||||||
|
p.outln('pushd %mypath%')
|
||||||
|
|
||||||
|
local map = {
|
||||||
|
vs2010 = 'VS100COMNTOOLS',
|
||||||
|
vs2012 = 'VS110COMNTOOLS',
|
||||||
|
vs2013 = 'VS120COMNTOOLS',
|
||||||
|
vs2015 = 'VS140COMNTOOLS',
|
||||||
|
vs2017 = 'VS141COMNTOOLS',
|
||||||
|
vs2019 = 'VS142COMNTOOLS',
|
||||||
|
}
|
||||||
|
|
||||||
|
local a = map[_ACTION]
|
||||||
|
if a then
|
||||||
|
a = path.translate(os.getenv(a), '/')
|
||||||
|
a = path.join(a, '../../VC/vcvarsall.bat')
|
||||||
|
|
||||||
|
if cfg.platform == 'x86' then
|
||||||
|
p.outln('call "' .. a .. '" > NUL')
|
||||||
|
else
|
||||||
|
p.outln('call "' .. a .. '" amd64 > NUL')
|
||||||
|
end
|
||||||
|
|
||||||
|
p.outln('cl.exe /nologo temp.cpp > NUL')
|
||||||
|
else
|
||||||
|
error('Unsupported Visual Studio version: ' .. _ACTION)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
local batchFile = path.join(cfg.objdir, "compile.bat")
|
||||||
|
if not io.writefile(batchFile, batch) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if os.execute(batchFile) then
|
||||||
|
return path.join(cfg.objdir, "temp.exe")
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
--]]
|
||||||
|
end
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# - Find mpg123
|
|
||||||
# Find the native mpg123 includes and library
|
|
||||||
#
|
|
||||||
# MPG123_INCLUDE_DIR - where to find mpg123.h
|
|
||||||
# MPG123_LIBRARIES - List of libraries when using mpg123.
|
|
||||||
# MPG123_FOUND - True if mpg123 found.
|
|
||||||
|
|
||||||
IF(MPG123_INCLUDE_DIR AND MPG123_LIBRARIES)
|
|
||||||
# Already in cache, be silent
|
|
||||||
SET(MPG123_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF(MPG123_INCLUDE_DIR AND MPG123_LIBRARIES)
|
|
||||||
|
|
||||||
FIND_PATH(MPG123_INCLUDE_DIR mpg123.h
|
|
||||||
PATHS "${MPG123_DIR}"
|
|
||||||
PATH_SUFFIXES include
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(MPG123_LIBRARIES NAMES mpg123 mpg123-0
|
|
||||||
PATHS "${MPG123_DIR}"
|
|
||||||
PATH_SUFFIXES lib
|
|
||||||
)
|
|
||||||
|
|
||||||
# MARK_AS_ADVANCED(MPG123_LIBRARIES MPG123_INCLUDE_DIR)
|
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set MPG123_FOUND to TRUE if
|
|
||||||
# all listed variables are TRUE
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MPG123 DEFAULT_MSG MPG123_LIBRARIES MPG123_INCLUDE_DIR)
|
|
||||||
34
cmake/FindMilesSDK.cmake
Normal file
34
cmake/FindMilesSDK.cmake
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# - Find Miles SDK
|
||||||
|
# Find the Miles SDK header + import library
|
||||||
|
#
|
||||||
|
# MilesSDK_INCLUDE_DIR - Where to find mss.h
|
||||||
|
# MilesSDK_LIBRARIES - List of libraries when using MilesSDK.
|
||||||
|
# MilesSDK_FOUND - True if Miles SDK found.
|
||||||
|
# MilesSDK::MilesSDK - Imported library of Miles SDK
|
||||||
|
|
||||||
|
find_path(MilesSDK_INCLUDE_DIR mss.h
|
||||||
|
PATHS "${MilesSDK_DIR}"
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
set(_miles_sdk_libname mss64)
|
||||||
|
else()
|
||||||
|
set(_miles_sdk_libname mss32)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(MilesSDK_LIBRARIES NAMES ${_miles_sdk_libname}
|
||||||
|
PATHS "${MilesSDK_DIR}"
|
||||||
|
PATH_SUFFIXES lib
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(MilesSDK DEFAULT_MSG MilesSDK_LIBRARIES MilesSDK_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(NOT TARGET MilesSDK::MilesSDK)
|
||||||
|
add_library(MilesSDK::MilesSDK UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MilesSDK::MilesSDK PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${MilesSDK_LIBRARIES}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${MilesSDK_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
@@ -4,9 +4,11 @@
|
|||||||
#
|
#
|
||||||
# Once done this will define
|
# Once done this will define
|
||||||
#
|
#
|
||||||
# SNDFILE_FOUND - system has libsndfile
|
# SNDFILE_FOUND - system has libsndfile
|
||||||
# SNDFILE_INCLUDE_DIRS - the libsndfile include directory
|
# SNDFILE_INCLUDE_DIRS - the libsndfile include directory
|
||||||
# SNDFILE_LIBRARIES - Link these to use libsndfile
|
# SNDFILE_LIBRARIES - Link these to use libsndfile
|
||||||
|
# SNDFILE_CFLAGS - Compile options to use libsndfile
|
||||||
|
# SndFile::SndFile - Imported library of libsndfile
|
||||||
#
|
#
|
||||||
# Copyright (C) 2006 Wengo
|
# Copyright (C) 2006 Wengo
|
||||||
#
|
#
|
||||||
@@ -15,53 +17,51 @@
|
|||||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||||
#
|
#
|
||||||
|
|
||||||
if (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
|
find_package(PkgConfig QUIET)
|
||||||
# in cache already
|
if(PKG_CONFIG_FOUND)
|
||||||
set(SNDFILE_FOUND TRUE)
|
pkg_search_module(PKG_SNDFILE "sndfile")
|
||||||
else (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
|
endif()
|
||||||
|
|
||||||
find_path(SNDFILE_INCLUDE_DIR
|
find_path(SNDFILE_INCLUDE_DIR
|
||||||
NAMES
|
NAMES
|
||||||
sndfile.h
|
sndfile.h
|
||||||
|
HINTS
|
||||||
|
${PKG_SNDFILE_INCLUDE_DIRS}
|
||||||
PATHS
|
PATHS
|
||||||
/usr/include
|
/usr/include
|
||||||
/usr/local/include
|
/usr/local/include
|
||||||
/opt/local/include
|
/opt/local/include
|
||||||
/sw/include
|
/sw/include
|
||||||
)
|
)
|
||||||
|
|
||||||
find_library(SNDFILE_LIBRARY
|
find_library(SNDFILE_LIBRARY
|
||||||
NAMES
|
NAMES
|
||||||
sndfile
|
sndfile
|
||||||
|
HINTS
|
||||||
|
${PKG_SNDFILE_LIBRARIES}
|
||||||
PATHS
|
PATHS
|
||||||
/usr/lib
|
/usr/lib
|
||||||
/usr/local/lib
|
/usr/local/lib
|
||||||
/opt/local/lib
|
/opt/local/lib
|
||||||
/sw/lib
|
/sw/lib
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SNDFILE_INCLUDE_DIRS
|
set(SNDFILE_CFLAGS "${PKG_SNDFILE_CFLAGS_OTHER}" CACHE STRING "CFLAGS of libsndfile")
|
||||||
${SNDFILE_INCLUDE_DIR}
|
|
||||||
)
|
|
||||||
set(SNDFILE_LIBRARIES
|
|
||||||
${SNDFILE_LIBRARY}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
|
set(SNDFILE_INCLUDE_DIRS "${SNDFILE_INCLUDE_DIR}")
|
||||||
|
set(SNDFILE_LIBRARIES "${SNDFILE_LIBRARY}")
|
||||||
|
|
||||||
|
if(SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
|
||||||
set(SNDFILE_FOUND TRUE)
|
set(SNDFILE_FOUND TRUE)
|
||||||
endif (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
|
endif()
|
||||||
|
|
||||||
if (SNDFILE_FOUND)
|
include(FindPackageHandleStandardArgs)
|
||||||
if (NOT SndFile_FIND_QUIETLY)
|
find_package_handle_standard_args(SndFile DEFAULT_MSG SNDFILE_INCLUDE_DIRS SNDFILE_LIBRARIES)
|
||||||
message(STATUS "Found libsndfile: ${SNDFILE_LIBRARIES}")
|
|
||||||
endif (NOT SndFile_FIND_QUIETLY)
|
|
||||||
else (SNDFILE_FOUND)
|
|
||||||
if (SndFile_FIND_REQUIRED)
|
|
||||||
message(FATAL_ERROR "Could not find libsndfile")
|
|
||||||
endif (SndFile_FIND_REQUIRED)
|
|
||||||
endif (SNDFILE_FOUND)
|
|
||||||
|
|
||||||
# show the SNDFILE_INCLUDE_DIRS and SNDFILE_LIBRARIES variables only in the advanced view
|
if(NOT TARGET SndFile::SndFile)
|
||||||
mark_as_advanced(SNDFILE_INCLUDE_DIRS SNDFILE_LIBRARIES)
|
add_library(__SndFile INTERFACE)
|
||||||
|
target_compile_options(__SndFile INTERFACE ${SNDFILE_CFLAGS})
|
||||||
endif (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
|
target_include_directories(__SndFile INTERFACE ${SNDFILE_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(__SndFile INTERFACE ${SNDFILE_LIBRARIES})
|
||||||
|
add_library(SndFile::SndFile ALIAS __SndFile)
|
||||||
|
endif()
|
||||||
|
|||||||
38
cmake/Findmpg123.cmake
Normal file
38
cmake/Findmpg123.cmake
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# - Find mpg123
|
||||||
|
# Find the native mpg123 includes and library
|
||||||
|
#
|
||||||
|
# mpg123_INCLUDE_DIR - Where to find mpg123.h
|
||||||
|
# mpg123_LIBRARIES - List of libraries when using mpg123.
|
||||||
|
# mpg123_CFLAGS - Compile options to use mpg123
|
||||||
|
# mpg123_FOUND - True if mpg123 found.
|
||||||
|
# MPG123::libmpg123 - Imported library of libmpg123
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_search_module(PKG_MPG123 mpg123)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(mpg123_INCLUDE_DIR mpg123.h
|
||||||
|
HINTS ${PKG_MPG123_INCLUDE_DIRS}
|
||||||
|
PATHS "${mpg123_DIR}"
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(mpg123_LIBRARIES NAMES mpg123 mpg123-0 libmpg123-0
|
||||||
|
HINTS ${PKG_MPG123_LIBRARIES}
|
||||||
|
PATHS "${mpg123_DIR}"
|
||||||
|
PATH_SUFFIXES lib
|
||||||
|
)
|
||||||
|
|
||||||
|
set(mpg123_CFLAGS "${PKG_MPG123_CFLAGS_OTHER}" CACHE STRING "CFLAGS of mpg123")
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(mpg123 DEFAULT_MSG mpg123_LIBRARIES mpg123_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(NOT TARGET MPG123::libmpg123)
|
||||||
|
add_library(__libmpg123 INTERFACE)
|
||||||
|
target_compile_options(__libmpg123 INTERFACE ${mpg123_CFLAGS})
|
||||||
|
target_include_directories(__libmpg123 INTERFACE ${mpg123_INCLUDE_DIR})
|
||||||
|
target_link_libraries(__libmpg123 INTERFACE ${mpg123_LIBRARIES})
|
||||||
|
add_library(MPG123::libmpg123 ALIAS __libmpg123)
|
||||||
|
endif()
|
||||||
64
cmake/Findopusfile.cmake
Normal file
64
cmake/Findopusfile.cmake
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# - Try to find opusfile
|
||||||
|
#
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# OPUSFILE_FOUND - system has opusfile
|
||||||
|
# OPUSFILE_INCLUDE_DIRS - the opusfile include directories
|
||||||
|
# OPUSFILE_LIBRARIES - Link these to use opusfile
|
||||||
|
# OPUSFILE_CFLAGS - Compile options to use opusfile
|
||||||
|
# opusfile::opusfile - Imported library of opusfile
|
||||||
|
#
|
||||||
|
|
||||||
|
# FIXME: opusfile does not ship an official opusfile cmake script,
|
||||||
|
# rename this file/variables/target when/if it has.
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_search_module(PKG_OPUSFILE "opusfile")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(OPUSFILE_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
opusfile.h
|
||||||
|
PATH_SUFFIXES
|
||||||
|
opusfile
|
||||||
|
HINTS
|
||||||
|
${PKG_OPUSFILE_INCLUDE_DIRS}
|
||||||
|
PATHS
|
||||||
|
/usr/include
|
||||||
|
/usr/local/include
|
||||||
|
/opt/local/include
|
||||||
|
/sw/include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(OPUSFILE_LIBRARY
|
||||||
|
NAMES
|
||||||
|
opusfile
|
||||||
|
HINTS
|
||||||
|
${PKG_OPUSFILE_LIBRARIES}
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
set(OPUSFILE_CFLAGS "${PKG_OPUSFILE_CFLAGS_OTHER}" CACHE STRING "CFLAGS of opusfile")
|
||||||
|
|
||||||
|
set(OPUSFILE_INCLUDE_DIRS "${OPUSFILE_INCLUDE_DIR}")
|
||||||
|
set(OPUSFILE_LIBRARIES "${OPUSFILE_LIBRARY}")
|
||||||
|
|
||||||
|
if (OPUSFILE_INCLUDE_DIRS AND OPUSFILE_LIBRARIES)
|
||||||
|
set(OPUSFILE_FOUND TRUE)
|
||||||
|
endif (OPUSFILE_INCLUDE_DIRS AND OPUSFILE_LIBRARIES)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(opusfile DEFAULT_MSG OPUSFILE_INCLUDE_DIRS OPUSFILE_LIBRARIES)
|
||||||
|
|
||||||
|
if(NOT TARGET opusfile::opusfile)
|
||||||
|
add_library(__opusfile INTERFACE)
|
||||||
|
target_compile_options(__opusfile INTERFACE ${OPUSFILE_CFLAGS})
|
||||||
|
target_include_directories(__opusfile INTERFACE ${OPUSFILE_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(__opusfile INTERFACE ${OPUSFILE_LIBRARIES})
|
||||||
|
add_library(opusfile::opusfile ALIAS __opusfile)
|
||||||
|
endif()
|
||||||
284
cmake/GetGitRevisionDescription.cmake
Normal file
284
cmake/GetGitRevisionDescription.cmake
Normal file
@@ -0,0 +1,284 @@
|
|||||||
|
# - Returns a version string from Git
|
||||||
|
#
|
||||||
|
# These functions force a re-configure on each git commit so that you can
|
||||||
|
# trust the values of the variables in your build system.
|
||||||
|
#
|
||||||
|
# get_git_head_revision(<refspecvar> <hashvar> [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR])
|
||||||
|
#
|
||||||
|
# Returns the refspec and sha hash of the current head revision
|
||||||
|
#
|
||||||
|
# git_describe(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the source tree, and adjusting
|
||||||
|
# the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the working tree (--dirty option),
|
||||||
|
# and adjusting the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe --exact-match on the source tree,
|
||||||
|
# and adjusting the output so that it tests false if there was no exact
|
||||||
|
# matching tag.
|
||||||
|
#
|
||||||
|
# git_local_changes(<var>)
|
||||||
|
#
|
||||||
|
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
|
||||||
|
# Uses the return code of "git diff-index --quiet HEAD --".
|
||||||
|
# Does not regard untracked files.
|
||||||
|
#
|
||||||
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
|
||||||
|
# http://academic.cleardefinition.com
|
||||||
|
#
|
||||||
|
# Copyright 2009-2013, Iowa State University.
|
||||||
|
# Copyright 2013-2020, Ryan Pavlik
|
||||||
|
# Copyright 2013-2020, Contributors
|
||||||
|
# SPDX-License-Identifier: BSL-1.0
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
if(__get_git_revision_description)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(__get_git_revision_description YES)
|
||||||
|
|
||||||
|
# We must run the following at "include" time, not at function call time,
|
||||||
|
# to find the path to this module rather than the path to a calling list file
|
||||||
|
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||||
|
|
||||||
|
# Function _git_find_closest_git_dir finds the next closest .git directory
|
||||||
|
# that is part of any directory in the path defined by _start_dir.
|
||||||
|
# The result is returned in the parent scope variable whose name is passed
|
||||||
|
# as variable _git_dir_var. If no .git directory can be found, the
|
||||||
|
# function returns an empty string via _git_dir_var.
|
||||||
|
#
|
||||||
|
# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
|
||||||
|
# neither foo nor bar contain a file/directory .git. This wil return
|
||||||
|
# C:/bla/.git
|
||||||
|
#
|
||||||
|
function(_git_find_closest_git_dir _start_dir _git_dir_var)
|
||||||
|
set(cur_dir "${_start_dir}")
|
||||||
|
set(git_dir "${_start_dir}/.git")
|
||||||
|
while(NOT EXISTS "${git_dir}")
|
||||||
|
# .git dir not found, search parent directories
|
||||||
|
set(git_previous_parent "${cur_dir}")
|
||||||
|
get_filename_component(cur_dir ${cur_dir} DIRECTORY)
|
||||||
|
if(cur_dir STREQUAL git_previous_parent)
|
||||||
|
# We have reached the root directory, we are not in git
|
||||||
|
set(${_git_dir_var}
|
||||||
|
""
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(git_dir "${cur_dir}/.git")
|
||||||
|
endwhile()
|
||||||
|
set(${_git_dir_var}
|
||||||
|
"${git_dir}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(get_git_head_revision _refspecvar _hashvar)
|
||||||
|
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
|
||||||
|
|
||||||
|
if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
|
||||||
|
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
|
||||||
|
else()
|
||||||
|
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
|
||||||
|
endif()
|
||||||
|
if(NOT "${GIT_DIR}" STREQUAL "")
|
||||||
|
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
|
||||||
|
"${GIT_DIR}")
|
||||||
|
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
|
||||||
|
# We've gone above the CMake root dir.
|
||||||
|
set(GIT_DIR "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if("${GIT_DIR}" STREQUAL "")
|
||||||
|
set(${_refspecvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check if the current source dir is a git submodule or a worktree.
|
||||||
|
# In both cases .git is a file instead of a directory.
|
||||||
|
#
|
||||||
|
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||||
|
# The following git command will return a non empty string that
|
||||||
|
# points to the super project working tree if the current
|
||||||
|
# source dir is inside a git submodule.
|
||||||
|
# Otherwise the command will return an empty string.
|
||||||
|
#
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" rev-parse
|
||||||
|
--show-superproject-working-tree
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT "${out}" STREQUAL "")
|
||||||
|
# If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
|
||||||
|
file(READ ${GIT_DIR} submodule)
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
|
||||||
|
${submodule})
|
||||||
|
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
|
||||||
|
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||||
|
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
|
||||||
|
ABSOLUTE)
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
else()
|
||||||
|
# GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
|
||||||
|
file(READ ${GIT_DIR} worktree_ref)
|
||||||
|
# The .git directory contains a path to the worktree information directory
|
||||||
|
# inside the parent git repo of the worktree.
|
||||||
|
#
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
|
||||||
|
${worktree_ref})
|
||||||
|
string(STRIP ${git_worktree_dir} git_worktree_dir)
|
||||||
|
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
|
||||||
|
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
endif()
|
||||||
|
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
||||||
|
if(NOT EXISTS "${GIT_DATA}")
|
||||||
|
file(MAKE_DIRECTORY "${GIT_DATA}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
||||||
|
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
|
||||||
|
|
||||||
|
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
||||||
|
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
||||||
|
include("${GIT_DATA}/grabRef.cmake")
|
||||||
|
|
||||||
|
set(${_refspecvar}
|
||||||
|
"${HEAD_REF}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"${HEAD_HASH}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO sanitize
|
||||||
|
#if((${ARGN}" MATCHES "&&") OR
|
||||||
|
# (ARGN MATCHES "||") OR
|
||||||
|
# (ARGN MATCHES "\\;"))
|
||||||
|
# message("Please report the following error to the project!")
|
||||||
|
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
#message(STATUS "Arguments to execute_process: ${ARGN}")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe_working_tree _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_get_exact_tag _var)
|
||||||
|
git_describe(out --exact-match ${ARGN})
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_local_changes _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(res EQUAL 0)
|
||||||
|
set(${_var}
|
||||||
|
"CLEAN"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${_var}
|
||||||
|
"DIRTY"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
43
cmake/GetGitRevisionDescription.cmake.in
Normal file
43
cmake/GetGitRevisionDescription.cmake.in
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#
|
||||||
|
# Internal file for GetGitRevisionDescription.cmake
|
||||||
|
#
|
||||||
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||||
|
# http://academic.cleardefinition.com
|
||||||
|
# Iowa State University HCI Graduate Program/VRAC
|
||||||
|
#
|
||||||
|
# Copyright 2009-2012, Iowa State University
|
||||||
|
# Copyright 2011-2015, Contributors
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
# SPDX-License-Identifier: BSL-1.0
|
||||||
|
|
||||||
|
set(HEAD_HASH)
|
||||||
|
|
||||||
|
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
||||||
|
|
||||||
|
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
||||||
|
if(HEAD_CONTENTS MATCHES "ref")
|
||||||
|
# named branch
|
||||||
|
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||||
|
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||||
|
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
|
else()
|
||||||
|
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||||
|
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||||
|
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||||
|
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# detached HEAD
|
||||||
|
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT HEAD_HASH)
|
||||||
|
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||||
|
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||||
|
endif()
|
||||||
38
cmake/nx/NXFunctions.cmake
Normal file
38
cmake/nx/NXFunctions.cmake
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
if(NOT COMMAND nx_generate_nacp)
|
||||||
|
message(FATAL_ERROR "The `nx_generate_nacp` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT COMMAND nx_create_nro)
|
||||||
|
message(FATAL_ERROR "The `nx_create_nro` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_EXECUTABLE_SUFFIX ".elf")
|
||||||
|
|
||||||
|
function(re3_platform_target TARGET)
|
||||||
|
cmake_parse_arguments(RPT "INSTALL" "" "" ${ARGN})
|
||||||
|
|
||||||
|
get_target_property(TARGET_TYPE "${TARGET}" TYPE)
|
||||||
|
if(TARGET_TYPE STREQUAL "EXECUTABLE")
|
||||||
|
nx_generate_nacp(${TARGET}.nacp
|
||||||
|
NAME "${TARGET}"
|
||||||
|
AUTHOR "${${PROJECT}_AUTHOR}"
|
||||||
|
VERSION "1.0.0-${GIT_SHA1}"
|
||||||
|
)
|
||||||
|
|
||||||
|
nx_create_nro(${TARGET}
|
||||||
|
NACP ${TARGET}.nacp
|
||||||
|
ICON "${PROJECT_SOURCE_DIR}/res/images/logo_256.jpg"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(${PROJECT}_INSTALL AND RPT_INSTALL)
|
||||||
|
get_target_property(TARGET_OUTPUT_NAME ${TARGET} OUTPUT_NAME)
|
||||||
|
if(NOT TARGET_OUTPUT_NAME)
|
||||||
|
set(TARGET_OUTPUT_NAME "${TARGET}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_OUTPUT_NAME}.nro"
|
||||||
|
DESTINATION "."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
0
codewarrior/Debug/gta3.txt
Normal file
0
codewarrior/Debug/gta3.txt
Normal file
0
codewarrior/Release/gta3.txt
Normal file
0
codewarrior/Release/gta3.txt
Normal file
15378
codewarrior/re3.mcp.xml
Normal file
15378
codewarrior/re3.mcp.xml
Normal file
File diff suppressed because it is too large
Load Diff
135
conanfile.py
Normal file
135
conanfile.py
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
from conans import ConanFile, CMake, tools
|
||||||
|
from conans.errors import ConanException, ConanInvalidConfiguration
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
|
||||||
|
class Re3Conan(ConanFile):
|
||||||
|
name = "re3"
|
||||||
|
version = "master"
|
||||||
|
license = "???" # FIXME: https://github.com/GTAmodding/re3/issues/794
|
||||||
|
settings = "os", "arch", "compiler", "build_type"
|
||||||
|
generators = "cmake", "cmake_find_package"
|
||||||
|
options = {
|
||||||
|
"audio": ["openal", "miles"],
|
||||||
|
"with_libsndfile": [True, False],
|
||||||
|
"with_opus": [True, False],
|
||||||
|
}
|
||||||
|
default_options = {
|
||||||
|
"audio": "openal",
|
||||||
|
"with_libsndfile": False,
|
||||||
|
"with_opus": False,
|
||||||
|
# "libsndfile:with_external_libs": False,
|
||||||
|
# "mpg123:flexible_resampling": False,
|
||||||
|
# "mpg123:network": False,
|
||||||
|
# "mpg123:icy": False,
|
||||||
|
# "mpg123:id3v2": False,
|
||||||
|
# "mpg123:ieeefloat": False,
|
||||||
|
# "mpg123:layer1": False,
|
||||||
|
# "mpg123:layer2": False,
|
||||||
|
# "mpg123:layer3": False,
|
||||||
|
# "mpg123:moreinfo": False,
|
||||||
|
# "sdl2:vulkan": False,
|
||||||
|
# "sdl2:opengl": True,
|
||||||
|
# "sdl2:sdl2main": True,
|
||||||
|
}
|
||||||
|
no_copy_source = True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _os_is_playstation2(self):
|
||||||
|
try:
|
||||||
|
return self.settings.os == "Playstation2"
|
||||||
|
except ConanException:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
if self.options.audio != "openal":
|
||||||
|
self.options.with_libsndfile = False
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires("librw/{}".format(self.version))
|
||||||
|
self.requires("mpg123/1.26.4")
|
||||||
|
if self.options.audio == "openal":
|
||||||
|
self.requires("openal/1.21.0")
|
||||||
|
elif self.options.audio == "miles":
|
||||||
|
self.requires("miles-sdk/{}".format(self.version))
|
||||||
|
if self.options.with_libsndfile:
|
||||||
|
self.requires("libsndfile/1.0.30")
|
||||||
|
if self.options.with_opus:
|
||||||
|
self.requires("opusfile/0.12")
|
||||||
|
|
||||||
|
def export_sources(self):
|
||||||
|
for d in ("cmake", "gamefiles", "src"):
|
||||||
|
shutil.copytree(src=d, dst=os.path.join(self.export_sources_folder, d))
|
||||||
|
self.copy("CMakeLists.txt")
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
if self.options["librw"].platform == "gl3" and self.options["librw"].gl3_gfxlib != "glfw":
|
||||||
|
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)")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _re3_audio(self):
|
||||||
|
return {
|
||||||
|
"miles": "MSS",
|
||||||
|
"openal": "OAL",
|
||||||
|
}[str(self.options.audio)]
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
if self.source_folder == self.build_folder:
|
||||||
|
raise Exception("cannot build with source_folder == build_folder")
|
||||||
|
try:
|
||||||
|
os.unlink(os.path.join(self.install_folder, "Findlibrw.cmake"))
|
||||||
|
tools.save("FindOpenAL.cmake",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
set(OPENAL_FOUND ON)
|
||||||
|
set(OPENAL_INCLUDE_DIR ${OpenAL_INCLUDE_DIRS})
|
||||||
|
set(OPENAL_LIBRARY ${OpenAL_LIBRARIES})
|
||||||
|
set(OPENAL_DEFINITIONS ${OpenAL_DEFINITIONS})
|
||||||
|
"""), append=True)
|
||||||
|
if self.options["librw"].platform == "gl3" and self.options["librw"].gl3_gfxlib == "glfw":
|
||||||
|
tools.save("Findglfw3.cmake",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
if(NOT TARGET glfw)
|
||||||
|
message(STATUS "Creating glfw TARGET")
|
||||||
|
add_library(glfw INTERFACE IMPORTED)
|
||||||
|
set_target_properties(glfw PROPERTIES
|
||||||
|
INTERFACE_LINK_LIBRARIES CONAN_PKG::glfw)
|
||||||
|
endif()
|
||||||
|
"""), append=True)
|
||||||
|
tools.save("CMakeLists.txt",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
project(cmake_wrapper)
|
||||||
|
|
||||||
|
include("{}/conanbuildinfo.cmake")
|
||||||
|
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
|
||||||
|
|
||||||
|
add_subdirectory("{}" re3)
|
||||||
|
""").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
|
||||||
|
env = {}
|
||||||
|
if self._os_is_playstation2:
|
||||||
|
cmake.definitions["CMAKE_TOOLCHAIN_FILE"] = self.deps_user_info["ps2dev-cmaketoolchain"].cmake_toolchain_file
|
||||||
|
env["PS2SDK"] = self.deps_cpp_info["ps2dev-ps2sdk"].rootpath
|
||||||
|
|
||||||
|
with tools.environment_append(env):
|
||||||
|
cmake.configure(source_folder=self.build_folder)
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.install()
|
||||||
Binary file not shown.
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.
BIN
gamefiles/TEXT/polish.gxt
Normal file → Executable file
BIN
gamefiles/TEXT/polish.gxt
Normal file → Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
gamefiles/models/frontend_ds3.txd
Normal file
BIN
gamefiles/models/frontend_ds3.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_ds4.txd
Normal file
BIN
gamefiles/models/frontend_ds4.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_nsw.txd
Normal file
BIN
gamefiles/models/frontend_nsw.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_x360.txd
Normal file
BIN
gamefiles/models/frontend_x360.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_xone.txd
Normal file
BIN
gamefiles/models/frontend_xone.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/generic.txd
Normal file
BIN
gamefiles/models/generic.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/nswbtns.txd
Normal file
BIN
gamefiles/models/nswbtns.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/particle.txd
Normal file
BIN
gamefiles/models/particle.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/ps3btns.txd
Normal file
BIN
gamefiles/models/ps3btns.txd
Normal file
Binary file not shown.
Binary file not shown.
BIN
premake5.exe
BIN
premake5.exe
Binary file not shown.
196
premake5.lua
196
premake5.lua
@@ -1,10 +1,3 @@
|
|||||||
newoption {
|
|
||||||
trigger = "glewdir",
|
|
||||||
value = "PATH",
|
|
||||||
description = "Directory of GLEW",
|
|
||||||
default = "vendor/glew-2.1.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
newoption {
|
newoption {
|
||||||
trigger = "glfwdir64",
|
trigger = "glfwdir64",
|
||||||
value = "PATH",
|
value = "PATH",
|
||||||
@@ -34,6 +27,23 @@ newoption {
|
|||||||
description = "Build 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
|
if(_OPTIONS["with-librw"]) then
|
||||||
Librw = "vendor/librw"
|
Librw = "vendor/librw"
|
||||||
else
|
else
|
||||||
@@ -61,6 +71,7 @@ end
|
|||||||
workspace "re3"
|
workspace "re3"
|
||||||
language "C++"
|
language "C++"
|
||||||
configurations { "Debug", "Release" }
|
configurations { "Debug", "Release" }
|
||||||
|
startproject "re3"
|
||||||
location "build"
|
location "build"
|
||||||
symbols "Full"
|
symbols "Full"
|
||||||
staticruntime "off"
|
staticruntime "off"
|
||||||
@@ -71,6 +82,7 @@ workspace "re3"
|
|||||||
end
|
end
|
||||||
|
|
||||||
filter { "system:windows" }
|
filter { "system:windows" }
|
||||||
|
configurations { "Vanilla" }
|
||||||
platforms {
|
platforms {
|
||||||
"win-x86-RW33_d3d8-mss",
|
"win-x86-RW33_d3d8-mss",
|
||||||
"win-x86-librw_d3d9-mss",
|
"win-x86-librw_d3d9-mss",
|
||||||
@@ -106,69 +118,71 @@ workspace "re3"
|
|||||||
|
|
||||||
filter "configurations:Debug"
|
filter "configurations:Debug"
|
||||||
defines { "DEBUG" }
|
defines { "DEBUG" }
|
||||||
|
|
||||||
filter "configurations:Release"
|
filter "configurations:not Debug"
|
||||||
defines { "NDEBUG" }
|
defines { "NDEBUG" }
|
||||||
optimize "On"
|
optimize "Speed"
|
||||||
|
if(_OPTIONS["with-lto"]) then
|
||||||
|
flags { "LinkTimeOptimization" }
|
||||||
|
end
|
||||||
|
|
||||||
filter { "platforms:win*" }
|
filter { "platforms:win*" }
|
||||||
system "windows"
|
system "windows"
|
||||||
|
|
||||||
filter { "platforms:linux*" }
|
filter { "platforms:linux*" }
|
||||||
system "linux"
|
system "linux"
|
||||||
|
|
||||||
filter { "platforms:bsd*" }
|
filter { "platforms:bsd*" }
|
||||||
system "bsd"
|
system "bsd"
|
||||||
|
|
||||||
filter { "platforms:macosx*" }
|
filter { "platforms:macosx*" }
|
||||||
system "macosx"
|
system "macosx"
|
||||||
|
|
||||||
filter { "platforms:*x86*" }
|
filter { "platforms:*x86*" }
|
||||||
architecture "x86"
|
architecture "x86"
|
||||||
floatingpoint "Fast"
|
|
||||||
|
|
||||||
filter { "platforms:*amd64*" }
|
filter { "platforms:*amd64*" }
|
||||||
architecture "amd64"
|
architecture "amd64"
|
||||||
floatingpoint "Fast"
|
|
||||||
|
|
||||||
filter { "platforms:*arm*" }
|
filter { "platforms:*arm*" }
|
||||||
architecture "ARM"
|
architecture "ARM"
|
||||||
|
|
||||||
filter { "platforms:macosx-arm64-*" }
|
filter { "platforms:macosx-arm64-*", "files:**.cpp"}
|
||||||
buildoptions { "-target", "arm64-apple-macos11", "-std=gnu++14" }
|
buildoptions { "-target", "arm64-apple-macos11", "-std=gnu++14" }
|
||||||
|
|
||||||
filter { "platforms:macosx-amd64-*" }
|
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" }
|
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*" }
|
filter { "platforms:*librw_d3d9*" }
|
||||||
defines { "RW_D3D9" }
|
defines { "RW_D3D9" }
|
||||||
if(not _OPTIONS["with-librw"]) then
|
if(not _OPTIONS["with-librw"]) then
|
||||||
libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") }
|
libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") }
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:*librw_gl3_glfw*"
|
filter "platforms:*librw_gl3_glfw*"
|
||||||
defines { "RW_GL3" }
|
defines { "RW_GL3" }
|
||||||
includedirs { path.join(_OPTIONS["glewdir"], "include") }
|
|
||||||
if(not _OPTIONS["with-librw"]) then
|
if(not _OPTIONS["with-librw"]) then
|
||||||
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:*x86-librw_gl3_glfw*"
|
filter "platforms:*x86-librw_gl3_glfw*"
|
||||||
includedirs { path.join(_OPTIONS["glfwdir32"], "include") }
|
includedirs { path.join(_OPTIONS["glfwdir32"], "include") }
|
||||||
|
|
||||||
filter "platforms:*amd64-librw_gl3_glfw*"
|
filter "platforms:*amd64-librw_gl3_glfw*"
|
||||||
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
||||||
|
|
||||||
filter "platforms:win*librw_gl3_glfw*"
|
|
||||||
defines { "GLEW_STATIC" }
|
|
||||||
|
|
||||||
filter {}
|
filter {}
|
||||||
|
|
||||||
function setpaths (gamepath, exepath, scriptspath)
|
function setpaths (gamepath, exepath)
|
||||||
scriptspath = scriptspath or ""
|
|
||||||
if (gamepath) then
|
if (gamepath) then
|
||||||
postbuildcommands {
|
postbuildcommands {
|
||||||
'{COPY} "%{cfg.buildtarget.abspath}" "' .. gamepath .. scriptspath .. '%{cfg.buildtarget.name}"'
|
'{COPYFILE} "%{cfg.buildtarget.abspath}" "' .. gamepath .. '%{cfg.buildtarget.name}"'
|
||||||
}
|
}
|
||||||
debugdir (gamepath)
|
debugdir (gamepath)
|
||||||
if (exepath) then
|
if (exepath) then
|
||||||
@@ -178,7 +192,6 @@ workspace "re3"
|
|||||||
debugdir (gamepath .. (dir or ""))
|
debugdir (gamepath .. (dir or ""))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--targetdir ("bin/%{prj.name}/" .. scriptspath)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if(_OPTIONS["with-librw"]) then
|
if(_OPTIONS["with-librw"]) then
|
||||||
@@ -188,16 +201,16 @@ project "librw"
|
|||||||
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
||||||
files { path.join(Librw, "src/*.*") }
|
files { path.join(Librw, "src/*.*") }
|
||||||
files { path.join(Librw, "src/*/*.*") }
|
files { path.join(Librw, "src/*/*.*") }
|
||||||
|
files { path.join(Librw, "src/gl/*/*.*") }
|
||||||
|
|
||||||
filter { "platforms:*x86*" }
|
filter { "platforms:*x86*" }
|
||||||
architecture "x86"
|
architecture "x86"
|
||||||
floatingpoint "Fast"
|
|
||||||
|
|
||||||
filter { "platforms:*amd64*" }
|
filter { "platforms:*amd64*" }
|
||||||
architecture "amd64"
|
architecture "amd64"
|
||||||
floatingpoint "Fast"
|
|
||||||
|
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
|
defines { "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE" }
|
||||||
staticruntime "on"
|
staticruntime "on"
|
||||||
buildoptions { "/Zc:sizedDealloc-" }
|
buildoptions { "/Zc:sizedDealloc-" }
|
||||||
|
|
||||||
@@ -205,16 +218,22 @@ project "librw"
|
|||||||
includedirs { "/usr/local/include" }
|
includedirs { "/usr/local/include" }
|
||||||
libdirs { "/usr/local/lib" }
|
libdirs { "/usr/local/lib" }
|
||||||
|
|
||||||
filter "platforms:macosx*"
|
-- Support MacPorts and Homebrew
|
||||||
-- 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 { "/opt/local/include" }
|
||||||
includedirs {"/usr/local/include" }
|
includedirs {"/usr/local/include" }
|
||||||
libdirs { "/opt/local/lib" }
|
libdirs { "/opt/local/lib" }
|
||||||
libdirs { "/usr/local/lib" }
|
libdirs { "/usr/local/lib" }
|
||||||
|
|
||||||
filter "platforms:*gl3_glfw*"
|
filter "platforms:*gl3_glfw*"
|
||||||
staticruntime "off"
|
staticruntime "off"
|
||||||
|
|
||||||
filter "platforms:*RW33*"
|
filter "platforms:*RW33*"
|
||||||
flags { "ExcludeFromBuild" }
|
flags { "ExcludeFromBuild" }
|
||||||
filter {}
|
filter {}
|
||||||
@@ -229,6 +248,10 @@ project "re3"
|
|||||||
targetname "re3"
|
targetname "re3"
|
||||||
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
||||||
|
|
||||||
|
if(_OPTIONS["with-librw"]) then
|
||||||
|
dependson "librw"
|
||||||
|
end
|
||||||
|
|
||||||
files { addSrcFiles("src") }
|
files { addSrcFiles("src") }
|
||||||
files { addSrcFiles("src/animation") }
|
files { addSrcFiles("src/animation") }
|
||||||
files { addSrcFiles("src/audio") }
|
files { addSrcFiles("src/audio") }
|
||||||
@@ -243,7 +266,7 @@ project "re3"
|
|||||||
files { addSrcFiles("src/modelinfo") }
|
files { addSrcFiles("src/modelinfo") }
|
||||||
files { addSrcFiles("src/objects") }
|
files { addSrcFiles("src/objects") }
|
||||||
files { addSrcFiles("src/peds") }
|
files { addSrcFiles("src/peds") }
|
||||||
files { addSrcFiles("src/render") }
|
files { addSrcFiles("src/renderer") }
|
||||||
files { addSrcFiles("src/rw") }
|
files { addSrcFiles("src/rw") }
|
||||||
files { addSrcFiles("src/save") }
|
files { addSrcFiles("src/save") }
|
||||||
files { addSrcFiles("src/skel") }
|
files { addSrcFiles("src/skel") }
|
||||||
@@ -252,6 +275,11 @@ project "re3"
|
|||||||
files { addSrcFiles("src/vehicles") }
|
files { addSrcFiles("src/vehicles") }
|
||||||
files { addSrcFiles("src/weapons") }
|
files { addSrcFiles("src/weapons") }
|
||||||
files { addSrcFiles("src/extras") }
|
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" }
|
||||||
includedirs { "src/animation" }
|
includedirs { "src/animation" }
|
||||||
@@ -267,7 +295,7 @@ project "re3"
|
|||||||
includedirs { "src/modelinfo" }
|
includedirs { "src/modelinfo" }
|
||||||
includedirs { "src/objects" }
|
includedirs { "src/objects" }
|
||||||
includedirs { "src/peds" }
|
includedirs { "src/peds" }
|
||||||
includedirs { "src/render" }
|
includedirs { "src/renderer" }
|
||||||
includedirs { "src/rw" }
|
includedirs { "src/rw" }
|
||||||
includedirs { "src/save/" }
|
includedirs { "src/save/" }
|
||||||
includedirs { "src/skel/" }
|
includedirs { "src/skel/" }
|
||||||
@@ -276,18 +304,25 @@ project "re3"
|
|||||||
includedirs { "src/vehicles" }
|
includedirs { "src/vehicles" }
|
||||||
includedirs { "src/weapons" }
|
includedirs { "src/weapons" }
|
||||||
includedirs { "src/extras" }
|
includedirs { "src/extras" }
|
||||||
|
|
||||||
|
if(not _OPTIONS["no-git-hash"]) then
|
||||||
|
defines { "USE_OUR_VERSIONING" }
|
||||||
|
end
|
||||||
|
|
||||||
if _OPTIONS["with-opus"] then
|
if _OPTIONS["with-opus"] then
|
||||||
includedirs { "vendor/ogg/include" }
|
includedirs { "vendor/ogg/include" }
|
||||||
includedirs { "vendor/opus/include" }
|
includedirs { "vendor/opus/include" }
|
||||||
includedirs { "vendor/opusfile/include" }
|
includedirs { "vendor/opusfile/include" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
filter "configurations:Vanilla"
|
||||||
|
defines { "VANILLA_DEFINES" }
|
||||||
|
|
||||||
filter "platforms:*mss"
|
filter "platforms:*mss"
|
||||||
defines { "AUDIO_MSS" }
|
defines { "AUDIO_MSS" }
|
||||||
includedirs { "vendor/milessdk/include" }
|
includedirs { "vendor/milessdk/include" }
|
||||||
libdirs { "vendor/milessdk/lib" }
|
libdirs { "vendor/milessdk/lib" }
|
||||||
|
|
||||||
if _OPTIONS["with-opus"] then
|
if _OPTIONS["with-opus"] then
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||||
@@ -296,15 +331,15 @@ project "re3"
|
|||||||
filter {}
|
filter {}
|
||||||
defines { "AUDIO_OPUS" }
|
defines { "AUDIO_OPUS" }
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:*oal"
|
filter "platforms:*oal"
|
||||||
defines { "AUDIO_OAL" }
|
defines { "AUDIO_OAL" }
|
||||||
|
|
||||||
filter {}
|
filter {}
|
||||||
if(os.getenv("GTA_III_RE_DIR")) then
|
if(os.getenv("GTA_III_RE_DIR")) then
|
||||||
setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "")
|
setpaths(os.getenv("GTA_III_RE_DIR") .. "/", "%(cfg.buildtarget.name)")
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
files { addSrcFiles("src/skel/win") }
|
files { addSrcFiles("src/skel/win") }
|
||||||
includedirs { "src/skel/win" }
|
includedirs { "src/skel/win" }
|
||||||
@@ -312,24 +347,49 @@ project "re3"
|
|||||||
linkoptions "/SAFESEH:NO"
|
linkoptions "/SAFESEH:NO"
|
||||||
characterset ("MBCS")
|
characterset ("MBCS")
|
||||||
targetextension ".exe"
|
targetextension ".exe"
|
||||||
|
if(_OPTIONS["no-full-paths"]) then
|
||||||
|
usefullpaths "off"
|
||||||
|
linkoptions "/PDBALTPATH:%_PDB%"
|
||||||
|
end
|
||||||
if(_OPTIONS["with-librw"]) then
|
if(_OPTIONS["with-librw"]) then
|
||||||
-- external librw is dynamic
|
-- external librw is dynamic
|
||||||
staticruntime "on"
|
staticruntime "on"
|
||||||
end
|
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*"
|
filter "platforms:win*glfw*"
|
||||||
staticruntime "off"
|
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"
|
filter "platforms:win*oal"
|
||||||
includedirs { "vendor/openal-soft/include" }
|
includedirs { "vendor/openal-soft/include" }
|
||||||
includedirs { "vendor/libsndfile/include" }
|
includedirs { "vendor/libsndfile/include" }
|
||||||
includedirs { "vendor/mpg123/include" }
|
includedirs { "vendor/mpg123/include" }
|
||||||
|
|
||||||
filter "platforms:win-x86*oal"
|
filter "platforms:win-x86*oal"
|
||||||
libdirs { "vendor/mpg123/lib/Win32" }
|
libdirs { "vendor/mpg123/lib/Win32" }
|
||||||
libdirs { "vendor/libsndfile/lib/Win32" }
|
libdirs { "vendor/libsndfile/lib/Win32" }
|
||||||
libdirs { "vendor/openal-soft/libs/Win32" }
|
libdirs { "vendor/openal-soft/libs/Win32" }
|
||||||
|
|
||||||
filter "platforms:win-amd64*oal"
|
filter "platforms:win-amd64*oal"
|
||||||
libdirs { "vendor/mpg123/lib/Win64" }
|
libdirs { "vendor/mpg123/lib/Win64" }
|
||||||
libdirs { "vendor/libsndfile/lib/Win64" }
|
libdirs { "vendor/libsndfile/lib/Win64" }
|
||||||
@@ -343,9 +403,15 @@ project "re3"
|
|||||||
|
|
||||||
filter "platforms:macosx*oal"
|
filter "platforms:macosx*oal"
|
||||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
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" }
|
includedirs { "/usr/local/opt/openal-soft/include" }
|
||||||
libdirs { "/usr/local/opt/openal-soft/lib" }
|
libdirs { "/usr/local/opt/openal-soft/lib" }
|
||||||
|
|
||||||
if _OPTIONS["with-opus"] then
|
if _OPTIONS["with-opus"] then
|
||||||
filter {}
|
filter {}
|
||||||
links { "libogg" }
|
links { "libogg" }
|
||||||
@@ -356,10 +422,10 @@ project "re3"
|
|||||||
filter "platforms:*RW33*"
|
filter "platforms:*RW33*"
|
||||||
includedirs { "sdk/rwsdk/include/d3d8" }
|
includedirs { "sdk/rwsdk/include/d3d8" }
|
||||||
libdirs { "sdk/rwsdk/lib/d3d8/release" }
|
libdirs { "sdk/rwsdk/lib/d3d8/release" }
|
||||||
links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse" }
|
links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse", "rpanisot" }
|
||||||
defines { "RWLIBS" }
|
defines { "RWLIBS" }
|
||||||
linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text"
|
linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text"
|
||||||
|
|
||||||
filter "platforms:*librw*"
|
filter "platforms:*librw*"
|
||||||
defines { "LIBRW" }
|
defines { "LIBRW" }
|
||||||
files { addSrcFiles("src/fakerw") }
|
files { addSrcFiles("src/fakerw") }
|
||||||
@@ -373,33 +439,39 @@ project "re3"
|
|||||||
filter "platforms:*d3d9*"
|
filter "platforms:*d3d9*"
|
||||||
defines { "USE_D3D9" }
|
defines { "USE_D3D9" }
|
||||||
links { "d3d9" }
|
links { "d3d9" }
|
||||||
|
|
||||||
filter "platforms:*x86*d3d*"
|
filter "platforms:*x86*d3d*"
|
||||||
includedirs { "sdk/dx8sdk/include" }
|
includedirs { "sdk/dx8sdk/include" }
|
||||||
libdirs { "sdk/dx8sdk/lib" }
|
libdirs { "sdk/dx8sdk/lib" }
|
||||||
|
|
||||||
filter "platforms:win-x86*gl3_glfw*"
|
filter "platforms:win-x86*gl3_glfw*"
|
||||||
libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") }
|
|
||||||
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||||
links { "opengl32", "glew32s", "glfw3" }
|
links { "opengl32", "glfw3" }
|
||||||
|
|
||||||
filter "platforms:win-amd64*gl3_glfw*"
|
filter "platforms:win-amd64*gl3_glfw*"
|
||||||
libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") }
|
|
||||||
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||||
links { "opengl32", "glew32s", "glfw3" }
|
links { "opengl32", "glfw3" }
|
||||||
|
|
||||||
filter "platforms:linux*gl3_glfw*"
|
filter "platforms:linux*gl3_glfw*"
|
||||||
links { "GL", "GLEW", "glfw" }
|
links { "GL", "glfw" }
|
||||||
|
|
||||||
filter "platforms:bsd*gl3_glfw*"
|
filter "platforms:bsd*gl3_glfw*"
|
||||||
links { "GL", "GLEW", "glfw", "sysinfo" }
|
links { "GL", "glfw", "sysinfo" }
|
||||||
includedirs { "/usr/local/include" }
|
includedirs { "/usr/local/include" }
|
||||||
libdirs { "/usr/local/lib" }
|
libdirs { "/usr/local/lib" }
|
||||||
|
|
||||||
filter "platforms:macosx*gl3_glfw*"
|
filter "platforms:macosx-arm64-*gl3_glfw*"
|
||||||
links { "GLEW", "glfw" }
|
links { "glfw" }
|
||||||
linkoptions { "-framework OpenGL" }
|
linkoptions { "-framework OpenGL" }
|
||||||
includedirs { "/opt/local/include" }
|
includedirs { "/opt/local/include" }
|
||||||
includedirs { "/usr/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 { "/opt/local/lib" }
|
||||||
libdirs { "/usr/local/lib" }
|
libdirs { "/usr/local/lib" }
|
||||||
|
|||||||
BIN
premake5Linux
BIN
premake5Linux
Binary file not shown.
26
printHash.bat
Normal file
26
printHash.bat
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
REM creates version.h with HEAD commit hash
|
||||||
|
REM params: $1=full path to output file (usually points version.h)
|
||||||
|
|
||||||
|
setlocal enableextensions enabledelayedexpansion
|
||||||
|
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
break> %1
|
||||||
|
|
||||||
|
<nul set /p=^"#define GIT_SHA1 ^"^"> %1
|
||||||
|
|
||||||
|
where git
|
||||||
|
if "%errorlevel%" == "0" ( goto :havegit ) else ( goto :writeending )
|
||||||
|
|
||||||
|
:havegit
|
||||||
|
for /f %%v in ('git rev-parse --short HEAD') do set version=%%v
|
||||||
|
<nul set /p="%version%" >> %1
|
||||||
|
|
||||||
|
:writeending
|
||||||
|
|
||||||
|
echo ^" >> %1
|
||||||
|
echo const char* g_GIT_SHA1 = GIT_SHA1; >> %1
|
||||||
|
|
||||||
|
EXIT /B
|
||||||
14
printHash.sh
Executable file
14
printHash.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
if [ -z "${1}" ]
|
||||||
|
then
|
||||||
|
printf "%s\n" "Input the path to the file for writing the commit hash to."
|
||||||
|
else
|
||||||
|
printf "%s" "#define GIT_SHA1 \"" > $1
|
||||||
|
|
||||||
|
if (command -v "git" >/dev/null) then
|
||||||
|
git rev-parse --short HEAD | tr -d '\n' >> $1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%s\n" "\"" >> $1
|
||||||
|
printf "%s\n" "const char* g_GIT_SHA1 = GIT_SHA1;" >> $1
|
||||||
|
fi
|
||||||
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
res/images/logo_256.jpg
Normal file
BIN
res/images/logo_256.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -1,113 +1,170 @@
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
|
||||||
if(${RE3_AUDIO} STREQUAL "OAL")
|
file(GLOB_RECURSE ${PROJECT}_SOURCES "*.cpp" "*.h" "*.rc")
|
||||||
find_package(OpenAL REQUIRED)
|
|
||||||
find_package(MPG123 REQUIRED)
|
|
||||||
find_package(SndFile REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(GLOB_RECURSE Sources "*.cpp" "*.h")
|
function(header_directories RETURN_LIST)
|
||||||
|
file(GLOB_RECURSE ALL_SRCS *.h *.cpp *.c)
|
||||||
|
set(RELDIRS)
|
||||||
|
foreach(SRC ${ALL_SRCS})
|
||||||
|
file(RELATIVE_PATH RELSRC "${CMAKE_CURRENT_SOURCE_DIR}" "${SRC}")
|
||||||
|
get_filename_component(RELDIR "${RELSRC}" DIRECTORY)
|
||||||
|
list(APPEND RELDIRS ${RELDIR})
|
||||||
|
endforeach()
|
||||||
|
list(REMOVE_DUPLICATES RELDIRS)
|
||||||
|
set(${RETURN_LIST} ${RELDIRS} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
MACRO(HEADER_DIRECTORIES return_list)
|
header_directories(${PROJECT}_INCLUDES)
|
||||||
FILE(GLOB_RECURSE new_list *.cpp)
|
|
||||||
SET(dir_list "animation"
|
|
||||||
"audio"
|
|
||||||
"collision"
|
|
||||||
"control"
|
|
||||||
"core"
|
|
||||||
"entities"
|
|
||||||
"extras"
|
|
||||||
"fakerw"
|
|
||||||
"math"
|
|
||||||
"modelinfo"
|
|
||||||
"objects"
|
|
||||||
"peds"
|
|
||||||
"render"
|
|
||||||
"rw"
|
|
||||||
"save"
|
|
||||||
"skel"
|
|
||||||
"text"
|
|
||||||
"vehicles"
|
|
||||||
"weapons")
|
|
||||||
FOREACH(file_path ${new_list})
|
|
||||||
GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
|
|
||||||
SET(dir_list ${dir_list} ${dir_path})
|
|
||||||
ENDFOREACH()
|
|
||||||
LIST(REMOVE_DUPLICATES dir_list)
|
|
||||||
SET(${return_list} ${dir_list})
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
HEADER_DIRECTORIES(header_list)
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/extras/GitSHA1.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp" @ONLY)
|
||||||
include_directories(${header_list})
|
list(APPEND ${PROJECT}_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp")
|
||||||
|
|
||||||
|
add_executable(${EXECUTABLE} WIN32
|
||||||
|
${${PROJECT}_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
add_executable(re3 ${Sources})
|
target_link_libraries(${EXECUTABLE} PRIVATE
|
||||||
target_link_libraries(re3 librw)
|
librw::librw
|
||||||
target_link_libraries(re3 Threads::Threads)
|
Threads::Threads
|
||||||
|
)
|
||||||
|
|
||||||
if(${RE3_AUDIO} STREQUAL "OAL")
|
target_include_directories(${EXECUTABLE}
|
||||||
target_link_libraries(re3 ${OPENAL_LIBRARY})
|
|
||||||
target_link_libraries(re3 ${MPG123_LIBRARIES})
|
|
||||||
target_link_libraries(re3 ${SNDFILE_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(re3
|
|
||||||
INTERFACE
|
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
|
|
||||||
)
|
|
||||||
|
|
||||||
target_compile_definitions(re3
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>"
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
|
||||||
PUBLIC
|
$<BUILD_INTERFACE:${${PROJECT}_INCLUDES}>
|
||||||
"RW_${RE3_PLATFORM}"
|
)
|
||||||
)
|
|
||||||
|
|
||||||
target_compile_definitions(re3 PRIVATE LIBRW=1 AUDIO_OAL=1)
|
target_compile_definitions(${EXECUTABLE}
|
||||||
|
PRIVATE
|
||||||
|
$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>
|
||||||
|
LIBRW
|
||||||
|
CMAKE_NO_AUTOLINK
|
||||||
|
)
|
||||||
|
|
||||||
|
if(LIBRW_PLATFORM_D3D9)
|
||||||
|
target_compile_definitions(${EXECUTABLE}
|
||||||
|
PUBLIC
|
||||||
|
USE_D3D9
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE CMAKE_BUILD)
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE USE_OUR_VERSIONING)
|
||||||
|
|
||||||
|
if(${PROJECT}_AUDIO STREQUAL "OAL")
|
||||||
|
find_package(OpenAL REQUIRED)
|
||||||
|
if(TARGET OpenAL::OpenAL)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE OpenAL::OpenAL)
|
||||||
|
else()
|
||||||
|
target_include_directories(${EXECUTABLE} PRIVATE ${OPENAL_INCLUDE_DIR})
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE ${OPENAL_LIBRARY})
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE ${OPENAL_DEFINITIONS})
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE AUDIO_OAL)
|
||||||
|
elseif(${PROJECT}_AUDIO STREQUAL "MSS")
|
||||||
|
find_package(MilesSDK REQUIRED)
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE AUDIO_MSS)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE MilesSDK::MilesSDK)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(mpg123 REQUIRED)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE
|
||||||
|
MPG123::libmpg123
|
||||||
|
)
|
||||||
|
if(${PROJECT}_WITH_OPUS)
|
||||||
|
find_package(opusfile REQUIRED)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE
|
||||||
|
opusfile::opusfile
|
||||||
|
)
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE AUDIO_OPUS)
|
||||||
|
endif()
|
||||||
|
if(${PROJECT}_WITH_LIBSNDFILE)
|
||||||
|
find_package(SndFile REQUIRED)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE
|
||||||
|
SndFile::SndFile
|
||||||
|
)
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE AUDIO_OAL_USE_SNDFILE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE )
|
||||||
|
|
||||||
|
option(${PROJECT}_WITH_SANITIZERS "Use UB sanitizers (better crash log)" OFF)
|
||||||
|
option(${PROJECT}_WITH_ASAN "Use Address sanitizer (better crash log)" OFF)
|
||||||
|
|
||||||
|
if(${PROJECT}_WITH_SANITIZERS)
|
||||||
|
target_compile_options(${EXECUTABLE} PUBLIC
|
||||||
|
-fsanitize=undefined,float-divide-by-zero,integer,implicit-conversion,implicit-integer-truncation,implicit-integer-arithmetic-value-change,local-bounds,nullability
|
||||||
|
-g3 -fno-omit-frame-pointer)
|
||||||
|
target_link_options(${EXECUTABLE} PUBLIC -fsanitize=undefined,float-divide-by-zero,integer,implicit-conversion,implicit-integer-truncation,implicit-integer-arithmetic-value-change,local-bounds,nullability)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${PROJECT}_WITH_ASAN)
|
||||||
|
target_compile_options(${EXECUTABLE} PUBLIC -fsanitize=address -g3 -fno-omit-frame-pointer)
|
||||||
|
target_link_options(${EXECUTABLE} PUBLIC -fsanitize=address)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
target_compile_options(re3
|
target_compile_options(${EXECUTABLE}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"-Wall"
|
"-Wall"
|
||||||
)
|
)
|
||||||
if (NOT RE3_PLATFORM_PS2)
|
if (NOT LIBRW_PLATFORM_PS2)
|
||||||
target_compile_options(re3
|
target_compile_options(${EXECUTABLE}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"-Wextra"
|
-Wextra
|
||||||
"-Wdouble-promotion"
|
-Wdouble-promotion
|
||||||
"-Wpedantic"
|
-Wpedantic
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
target_compile_options(re3
|
target_compile_options(${EXECUTABLE}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
/wd4996 /wd4244
|
/Zc:sizedDealloc-
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_target_properties(re3
|
if(NINTENDO_SWITCH)
|
||||||
|
set(${PROJECT}_C_CXX_EXTENSIONS ON)
|
||||||
|
else()
|
||||||
|
set(${PROJECT}_C_CXX_EXTENSIONS OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(LIBRW_PLATFORM_GL3 AND LIBRW_GL3_GFXLIB STREQUAL "GLFW")
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES glfw)
|
||||||
|
set(CMAKE_REQUIRED_DEFINITIONS -DGLFW_EXPOSE_NATIVE_X11)
|
||||||
|
check_symbol_exists(glfwGetX11Display "GLFW/glfw3.h;GLFW/glfw3native.h" GLFW_HAS_X11)
|
||||||
|
unset(CMAKE_REQUIRED_DEFINITIONS)
|
||||||
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
|
||||||
|
if (GLFW_HAS_X11)
|
||||||
|
find_package(X11 REQUIRED)
|
||||||
|
target_link_libraries(${EXECUTABLE} PRIVATE X11::X11)
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE GET_KEYBOARD_INPUT_FROM_X11)
|
||||||
|
endif (GLFW_HAS_X11)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(${EXECUTABLE}
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
C_STANDARD 11
|
C_STANDARD 11
|
||||||
C_EXTENSIONS OFF
|
C_EXTENSIONS ${${PROJECT}_C_CXX_EXTENSIONS}
|
||||||
C_STANDARD_REQUIRED ON
|
C_STANDARD_REQUIRED ON
|
||||||
CXX_STANDARD 11
|
CXX_STANDARD 11
|
||||||
CXX_EXTENSIONS OFF
|
CXX_EXTENSIONS ${${PROJECT}_C_CXX_EXTENSIONS}
|
||||||
CXX_STANDARD_REQUIRED ON
|
CXX_STANDARD_REQUIRED ON
|
||||||
PREFIX ""
|
)
|
||||||
)
|
|
||||||
|
|
||||||
if(RE3_INSTALL)
|
|
||||||
target_include_directories(re3
|
|
||||||
INTERFACE
|
|
||||||
$<INSTALL_INTERFACE:${RE3_INSTALL_INCLUDEDIR}>
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if(${PROJECT}_INSTALL)
|
||||||
install(
|
install(
|
||||||
TARGETS re3
|
TARGETS ${EXECUTABLE}
|
||||||
EXPORT re3-targets
|
EXPORT ${EXECUTABLE}-targets
|
||||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
RUNTIME DESTINATION "."
|
||||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
)
|
||||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
if(MSVC)
|
||||||
)
|
install(FILES $<TARGET_PDB_FILE:${EXECUTABLE}> DESTINATION "." OPTIONAL)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
re3_platform_target(${EXECUTABLE} INSTALL)
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#if defined _WIN32 && !defined __MINGW32__
|
#if defined _WIN32 && !defined __MINGW32__
|
||||||
|
#if defined __MWERKS__
|
||||||
|
#include <wctype.h>
|
||||||
|
#else
|
||||||
#include "ctype.h"
|
#include "ctype.h"
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <cwctype>
|
#include <cwctype>
|
||||||
#endif
|
#endif
|
||||||
@@ -83,18 +87,18 @@ strcmpIgnoringDigits(const char *s1, const char *s2)
|
|||||||
if(c1) s1++;
|
if(c1) s1++;
|
||||||
if(c2) s2++;
|
if(c2) s2++;
|
||||||
if(c1 == '\0' && c2 == '\0') return true;
|
if(c1 == '\0' && c2 == '\0') return true;
|
||||||
#if defined _WIN32 && !defined __MINGW32__
|
#ifndef ASCII_STRCMP
|
||||||
if(__ascii_iswdigit(c1) && __ascii_iswdigit(c2))
|
|
||||||
#else
|
|
||||||
if(iswdigit(c1) && iswdigit(c2))
|
if(iswdigit(c1) && iswdigit(c2))
|
||||||
|
#else
|
||||||
|
if(__ascii_iswdigit(c1) && __ascii_iswdigit(c2))
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
#if defined _WIN32 && !defined __MINGW32__
|
#ifndef ASCII_STRCMP
|
||||||
c1 = __ascii_toupper(c1);
|
|
||||||
c2 = __ascii_toupper(c2);
|
|
||||||
#else
|
|
||||||
c1 = toupper(c1);
|
c1 = toupper(c1);
|
||||||
c2 = toupper(c2);
|
c2 = toupper(c2);
|
||||||
|
#else
|
||||||
|
c1 = __ascii_toupper(c1);
|
||||||
|
c2 = __ascii_toupper(c2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(c1 != c2)
|
if(c1 != c2)
|
||||||
@@ -111,7 +115,7 @@ GetModelFromName(const char *name)
|
|||||||
for(i = 0; i < MODELINFOSIZE; i++){
|
for(i = 0; i < MODELINFOSIZE; i++){
|
||||||
mi = CModelInfo::GetModelInfo(i);
|
mi = CModelInfo::GetModelInfo(i);
|
||||||
if(mi && mi->GetRwObject() && RwObjectGetType(mi->GetRwObject()) == rpCLUMP &&
|
if(mi && mi->GetRwObject() && RwObjectGetType(mi->GetRwObject()) == rpCLUMP &&
|
||||||
strcmpIgnoringDigits(mi->GetName(), name))
|
strcmpIgnoringDigits(mi->GetModelName(), name))
|
||||||
return mi;
|
return mi;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
@@ -134,7 +138,7 @@ CAnimBlendAssocGroup::CreateAssociations(const char *name)
|
|||||||
CAnimBlendHierarchy *anim = CAnimManager::GetAnimation(animBlock->firstIndex + i);
|
CAnimBlendHierarchy *anim = CAnimManager::GetAnimation(animBlock->firstIndex + i);
|
||||||
CBaseModelInfo *model = GetModelFromName(anim->name);
|
CBaseModelInfo *model = GetModelFromName(anim->name);
|
||||||
assert(model);
|
assert(model);
|
||||||
printf("Associated anim %s with model %s\n", anim->name, model->GetName());
|
printf("Associated anim %s with model %s\n", anim->name, model->GetModelName());
|
||||||
RpClump *clump = (RpClump*)model->CreateInstance();
|
RpClump *clump = (RpClump*)model->CreateInstance();
|
||||||
#ifdef PED_SKIN
|
#ifdef PED_SKIN
|
||||||
if(IsClumpSkinned(clump))
|
if(IsClumpSkinned(clump))
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
|
|
||||||
CAnimBlendLink link;
|
CAnimBlendLink link;
|
||||||
|
|
||||||
int numNodes; // taken from CAnimBlendClumpData::numFrames
|
int32 numNodes; // taken from CAnimBlendClumpData::numFrames
|
||||||
// NB: Order of these depends on order of nodes in Clump this was built from
|
// NB: Order of these depends on order of nodes in Clump this was built from
|
||||||
CAnimBlendNode *nodes;
|
CAnimBlendNode *nodes;
|
||||||
CAnimBlendHierarchy *hierarchy;
|
CAnimBlendHierarchy *hierarchy;
|
||||||
|
|||||||
@@ -3,11 +3,10 @@
|
|||||||
#include "AnimBlendClumpData.h"
|
#include "AnimBlendClumpData.h"
|
||||||
#include "MemoryMgr.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
|
|
||||||
CAnimBlendClumpData::CAnimBlendClumpData(void)
|
CAnimBlendClumpData::CAnimBlendClumpData(void)
|
||||||
{
|
{
|
||||||
numFrames = 0;
|
numFrames = 0;
|
||||||
velocity = nil;
|
velocity2d = nil;
|
||||||
frames = nil;
|
frames = nil;
|
||||||
link.Init();
|
link.Init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include "AnimBlendList.h"
|
#include "AnimBlendList.h"
|
||||||
|
|
||||||
|
|
||||||
// TODO: put somewhere else
|
|
||||||
struct AnimBlendFrameData
|
struct AnimBlendFrameData
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
@@ -38,7 +37,10 @@ public:
|
|||||||
#ifdef PED_SKIN
|
#ifdef PED_SKIN
|
||||||
int32 modelNumber; // doesn't seem to be used
|
int32 modelNumber; // doesn't seem to be used
|
||||||
#endif
|
#endif
|
||||||
CVector *velocity;
|
union {
|
||||||
|
CVector2D *velocity2d;
|
||||||
|
CVector *velocity3d;
|
||||||
|
};
|
||||||
// order of frames is determined by RW hierarchy
|
// order of frames is determined by RW hierarchy
|
||||||
AnimBlendFrameData *frames;
|
AnimBlendFrameData *frames;
|
||||||
|
|
||||||
|
|||||||
@@ -19,68 +19,68 @@ CAnimBlendAssocGroup *CAnimManager::ms_aAnimAssocGroups;
|
|||||||
CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
|
CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
|
||||||
|
|
||||||
AnimAssocDesc aStdAnimDescs[] = {
|
AnimAssocDesc aStdAnimDescs[] = {
|
||||||
{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_RUN_STOP, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_RUNSTOP1, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_RUN_STOP_R, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_RUNSTOP2, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_TIRED, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE_TIRED, ASSOC_REPEAT },
|
||||||
{ ANIM_IDLE_ARMED, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_BIGGUN, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_TAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HAILTAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SHOT_FRONT1, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_FRONT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT2, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_LEFT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT3, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_BACK, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT4, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_RIGHT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_STOM, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_STOMACH, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KO_SHOT_ARML, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_ARM_L, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_ARMR, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_ARM_R, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_LEGL, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_LEG_L, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KO_SHOT_LEGR, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_LEG_R, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_SPINFORWARD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_SPINFORWARD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SKID_FRONT, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_FRONT, ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SPIN_R, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_LEFT, ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SKID_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_HIGHIMPACT_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SPIN_L, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_RIGHT, ASSOC_PARTIAL },
|
||||||
{ ANIM_SHOT_FRONT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_LEFT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_BACK_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_RIGHT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FLOOR_HIT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_FLOOR, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
#if GTA_VERSION <= GTA3_PS2_160
|
#if GTA_VERSION <= GTA3_PS2_160
|
||||||
{ ANIM_HIT_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
#endif
|
#endif
|
||||||
{ ANIM_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FLOOR_HIT_F, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_HIT_FLOOR_FRONT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_PUNCH_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_KICK_FLOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_KICKGROUND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_BAT_H, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_BAT_H, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_BAT_V, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_BAT_V, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_WEAPON_AK_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_AK_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_SNIPER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_SNIPER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_WEAPON_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_THROW_UNDER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_START_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_START_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_DETONATE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
#ifdef PC_PLAYER_CONTROLS
|
#ifdef PC_PLAYER_CONTROLS
|
||||||
// maybe wrong define, but unused anyway
|
// maybe wrong define, but unused anyway
|
||||||
{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
@@ -91,121 +91,121 @@ AnimAssocDesc aStdAnimDescs[] = {
|
|||||||
{ ANIM_FPS_M16, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_FPS_M16, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FPS_ROCKET, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_FPS_ROCKET, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
#endif
|
#endif
|
||||||
{ ANIM_FIGHT_IDLE, ASSOC_REPEAT },
|
{ ANIM_STD_FIGHT_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_FIGHT2_IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_2IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_SH_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_SHUFFLE_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_PPUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_PARTIAL_PUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_CAR_JACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LJACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LO_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_JACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LJACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LO_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_QJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_QUICKJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_QJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_QUICKJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGNHI_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGNHI_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_OPEN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_DOORLOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CARDOOR_LOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ROLLDOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ROLLDOOR_LOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGNHI_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGNHI_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_OPEN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_DOORLOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CARDOOR_LOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LSHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_SHUFFLE_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_SIT, ASSOC_DELETEFADEDOUT },
|
{ ANIM_STD_CAR_SIT, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_CAR_LSIT, ASSOC_DELETEFADEDOUT },
|
{ ANIM_STD_CAR_SIT_LO, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_CAR_SITP, ASSOC_DELETEFADEDOUT },
|
{ ANIM_STD_CAR_SIT_P, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_CAR_SITPLO, ASSOC_DELETEFADEDOUT },
|
{ ANIM_STD_CAR_SIT_P_LO, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_DRIVE_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVE_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVE_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVE_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVE_LOW_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVE_LEFT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVE_LOW_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVE_RIGHT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVEBY_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVEBY_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVEBY_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_DRIVEBY_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_LOOKBEHIND, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVE_BOAT, ASSOC_DELETEFADEDOUT },
|
{ ANIM_STD_BOAT_DRIVE, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_CAR_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_OPEN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_IN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_IN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_OUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_OUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_TRAIN_GETIN, ASSOC_PARTIAL },
|
{ ANIM_STD_TRAIN_GETIN, ASSOC_PARTIAL },
|
||||||
{ ANIM_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CRAWLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CRAWLOUT_RHS2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_OPEN_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETIN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_IN_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_CLOSE_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETOUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_OUT_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_OPEN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_OPEN_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETIN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_IN_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_CLOSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_OUT_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_GETUP1, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP3, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FALL_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_EV_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_EVADE_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_EV_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_EVADE_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
|
{ ANIM_STD_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
|
||||||
{ ANIM_ROAD_CROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_ROADCROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_TURN_180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_TURN180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_ARREST_GUN, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_ARREST, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_DROWN, ASSOC_PARTIAL },
|
{ ANIM_STD_DROWN, ASSOC_PARTIAL },
|
||||||
{ ANIM_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_MEDIC_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_RBLOCK_CSHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_RBLOCK_SHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_THROWU2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_THROW_UNDER2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_PARTIAL_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_PHONE_IN, ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_IN, ASSOC_PARTIAL },
|
||||||
{ ANIM_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
#ifdef PC_PLAYER_CONTROLS
|
#ifdef PC_PLAYER_CONTROLS
|
||||||
AnimAssocDesc aStdAnimDescsSide[] = {
|
AnimAssocDesc aStdAnimDescsSide[] = {
|
||||||
{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
char const *aStdAnimations[] = {
|
char const *aStdAnimations[] = {
|
||||||
|
|||||||
@@ -2,68 +2,82 @@
|
|||||||
|
|
||||||
enum AnimationId
|
enum AnimationId
|
||||||
{
|
{
|
||||||
ANIM_WALK,
|
ANIM_STD_WALK,
|
||||||
ANIM_RUN,
|
ANIM_STD_RUN,
|
||||||
ANIM_SPRINT,
|
ANIM_STD_RUNFAST,
|
||||||
ANIM_IDLE_STANCE,
|
ANIM_STD_IDLE,
|
||||||
ANIM_WALK_START,
|
ANIM_STD_STARTWALK,
|
||||||
ANIM_RUN_STOP,
|
ANIM_STD_RUNSTOP1,
|
||||||
ANIM_RUN_STOP_R,
|
ANIM_STD_RUNSTOP2,
|
||||||
ANIM_IDLE_CAM,
|
ANIM_STD_IDLE_CAM,
|
||||||
ANIM_IDLE_HBHB,
|
ANIM_STD_IDLE_HBHB,
|
||||||
ANIM_IDLE_TIRED,
|
ANIM_STD_IDLE_TIRED,
|
||||||
ANIM_IDLE_ARMED,
|
ANIM_STD_IDLE_BIGGUN,
|
||||||
ANIM_IDLE_CHAT,
|
ANIM_STD_CHAT,
|
||||||
ANIM_IDLE_TAXI,
|
ANIM_STD_HAILTAXI,
|
||||||
ANIM_KO_SHOT_FRONT1,
|
ANIM_STD_KO_FRONT,
|
||||||
ANIM_KO_SHOT_FRONT2,
|
ANIM_STD_KO_LEFT,
|
||||||
ANIM_KO_SHOT_FRONT3,
|
ANIM_STD_KO_BACK,
|
||||||
ANIM_KO_SHOT_FRONT4,
|
ANIM_STD_KO_RIGHT,
|
||||||
ANIM_KO_SHOT_FACE,
|
ANIM_STD_KO_SHOT_FACE,
|
||||||
ANIM_KO_SHOT_STOM,
|
ANIM_STD_KO_SHOT_STOMACH,
|
||||||
ANIM_KO_SHOT_ARML,
|
ANIM_STD_KO_SHOT_ARM_L,
|
||||||
ANIM_KO_SHOT_ARMR,
|
ANIM_STD_KO_SHOT_ARM_R,
|
||||||
ANIM_KO_SHOT_LEGL,
|
ANIM_STD_KO_SHOT_LEG_L,
|
||||||
ANIM_KO_SHOT_LEGR,
|
ANIM_STD_KO_SHOT_LEG_R,
|
||||||
ANIM_KD_LEFT,
|
ANIM_STD_SPINFORWARD_LEFT,
|
||||||
ANIM_KD_RIGHT,
|
ANIM_STD_SPINFORWARD_RIGHT,
|
||||||
ANIM_KO_SKID_FRONT,
|
ANIM_STD_HIGHIMPACT_FRONT,
|
||||||
ANIM_KO_SPIN_R, // named left in VC
|
ANIM_STD_HIGHIMPACT_LEFT,
|
||||||
ANIM_KO_SKID_BACK,
|
ANIM_STD_HIGHIMPACT_BACK,
|
||||||
ANIM_KO_SPIN_L, // named right in VC
|
ANIM_STD_HIGHIMPACT_RIGHT,
|
||||||
ANIM_SHOT_FRONT_PARTIAL,
|
ANIM_STD_HITBYGUN_FRONT,
|
||||||
ANIM_SHOT_LEFT_PARTIAL,
|
ANIM_STD_HITBYGUN_LEFT,
|
||||||
ANIM_SHOT_BACK_PARTIAL,
|
ANIM_STD_HITBYGUN_BACK,
|
||||||
ANIM_SHOT_RIGHT_PARTIAL,
|
ANIM_STD_HITBYGUN_RIGHT,
|
||||||
ANIM_HIT_FRONT,
|
ANIM_STD_HIT_FRONT,
|
||||||
ANIM_HIT_LEFT,
|
ANIM_STD_HIT_LEFT,
|
||||||
ANIM_HIT_BACK,
|
ANIM_STD_HIT_BACK,
|
||||||
ANIM_HIT_RIGHT,
|
ANIM_STD_HIT_RIGHT,
|
||||||
ANIM_FLOOR_HIT,
|
ANIM_STD_HIT_FLOOR,
|
||||||
|
|
||||||
|
/* names made up */
|
||||||
#if GTA_VERSION <= GTA3_PS2_160
|
#if GTA_VERSION <= GTA3_PS2_160
|
||||||
ANIM_HIT_BODY,
|
ANIM_STD_HIT_BODY,
|
||||||
#endif
|
#endif
|
||||||
ANIM_HIT_BODYBLOW,
|
ANIM_STD_HIT_BODYBLOW,
|
||||||
ANIM_HIT_CHEST,
|
ANIM_STD_HIT_CHEST,
|
||||||
ANIM_HIT_HEAD,
|
ANIM_STD_HIT_HEAD,
|
||||||
ANIM_HIT_WALK,
|
ANIM_STD_HIT_WALK,
|
||||||
ANIM_HIT_WALL,
|
/**/
|
||||||
ANIM_FLOOR_HIT_F,
|
|
||||||
ANIM_HIT_BEHIND,
|
ANIM_STD_HIT_WALL,
|
||||||
ANIM_PUNCH_R,
|
ANIM_STD_HIT_FLOOR_FRONT,
|
||||||
ANIM_KICK_FLOOR,
|
ANIM_STD_HIT_BEHIND,
|
||||||
ANIM_WEAPON_BAT_H,
|
ANIM_STD_PUNCH,
|
||||||
ANIM_WEAPON_BAT_V,
|
ANIM_STD_KICKGROUND,
|
||||||
ANIM_WEAPON_HGUN_BODY,
|
|
||||||
ANIM_WEAPON_AK_BODY,
|
/* names made up */
|
||||||
ANIM_WEAPON_PUMP,
|
ANIM_STD_WEAPON_BAT_H,
|
||||||
ANIM_WEAPON_SNIPER,
|
ANIM_STD_WEAPON_BAT_V,
|
||||||
ANIM_WEAPON_THROW,
|
ANIM_STD_WEAPON_HGUN_BODY,
|
||||||
ANIM_WEAPON_THROWU,
|
ANIM_STD_WEAPON_AK_BODY,
|
||||||
ANIM_WEAPON_START_THROW,
|
ANIM_STD_WEAPON_PUMP,
|
||||||
ANIM_BOMBER,
|
ANIM_STD_WEAPON_SNIPER,
|
||||||
ANIM_HGUN_RELOAD,
|
ANIM_STD_WEAPON_THROW,
|
||||||
ANIM_AK_RELOAD,
|
/**/
|
||||||
|
|
||||||
|
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
|
#ifdef PC_PLAYER_CONTROLS
|
||||||
// maybe wrong define, but unused anyway
|
// maybe wrong define, but unused anyway
|
||||||
ANIM_FPS_PUNCH,
|
ANIM_FPS_PUNCH,
|
||||||
@@ -74,113 +88,123 @@ enum AnimationId
|
|||||||
ANIM_FPS_M16,
|
ANIM_FPS_M16,
|
||||||
ANIM_FPS_ROCKET,
|
ANIM_FPS_ROCKET,
|
||||||
#endif
|
#endif
|
||||||
ANIM_FIGHT_IDLE,
|
/**/
|
||||||
ANIM_FIGHT2_IDLE,
|
|
||||||
ANIM_FIGHT_SH_F,
|
|
||||||
ANIM_FIGHT_BODYBLOW,
|
|
||||||
ANIM_FIGHT_HEAD,
|
|
||||||
ANIM_FIGHT_KICK,
|
|
||||||
ANIM_FIGHT_KNEE,
|
|
||||||
ANIM_FIGHT_LHOOK,
|
|
||||||
ANIM_FIGHT_PUNCH,
|
|
||||||
ANIM_FIGHT_ROUNDHOUSE,
|
|
||||||
ANIM_FIGHT_LONGKICK,
|
|
||||||
ANIM_FIGHT_PPUNCH,
|
|
||||||
ANIM_CAR_JACKED_RHS,
|
|
||||||
ANIM_CAR_LJACKED_RHS,
|
|
||||||
ANIM_CAR_JACKED_LHS,
|
|
||||||
ANIM_CAR_LJACKED_LHS,
|
|
||||||
ANIM_CAR_QJACK,
|
|
||||||
ANIM_CAR_QJACKED,
|
|
||||||
ANIM_CAR_ALIGN_LHS,
|
|
||||||
ANIM_CAR_ALIGNHI_LHS,
|
|
||||||
ANIM_CAR_OPEN_LHS,
|
|
||||||
ANIM_CAR_DOORLOCKED_LHS,
|
|
||||||
ANIM_CAR_PULLOUT_LHS,
|
|
||||||
ANIM_CAR_PULLOUT_LOW_LHS,
|
|
||||||
ANIM_CAR_GETIN_LHS,
|
|
||||||
ANIM_CAR_GETIN_LOW_LHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LOW_LHS,
|
|
||||||
ANIM_CAR_ROLLDOOR,
|
|
||||||
ANIM_CAR_ROLLDOOR_LOW,
|
|
||||||
ANIM_CAR_GETOUT_LHS,
|
|
||||||
ANIM_CAR_GETOUT_LOW_LHS,
|
|
||||||
ANIM_CAR_CLOSE_LHS,
|
|
||||||
ANIM_CAR_ALIGN_RHS,
|
|
||||||
ANIM_CAR_ALIGNHI_RHS,
|
|
||||||
ANIM_CAR_OPEN_RHS,
|
|
||||||
ANIM_CAR_DOORLOCKED_RHS,
|
|
||||||
ANIM_CAR_PULLOUT_RHS,
|
|
||||||
ANIM_CAR_PULLOUT_LOW_RHS,
|
|
||||||
ANIM_CAR_GETIN_RHS,
|
|
||||||
ANIM_CAR_GETIN_LOW_RHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_RHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LOW_RHS,
|
|
||||||
ANIM_CAR_SHUFFLE_RHS,
|
|
||||||
ANIM_CAR_LSHUFFLE_RHS,
|
|
||||||
ANIM_CAR_SIT,
|
|
||||||
ANIM_CAR_LSIT,
|
|
||||||
ANIM_CAR_SITP,
|
|
||||||
ANIM_CAR_SITPLO,
|
|
||||||
ANIM_DRIVE_L,
|
|
||||||
ANIM_DRIVE_R,
|
|
||||||
ANIM_DRIVE_LOW_L,
|
|
||||||
ANIM_DRIVE_LOW_R,
|
|
||||||
ANIM_DRIVEBY_L,
|
|
||||||
ANIM_DRIVEBY_R,
|
|
||||||
ANIM_CAR_LB,
|
|
||||||
ANIM_DRIVE_BOAT,
|
|
||||||
ANIM_CAR_GETOUT_RHS,
|
|
||||||
ANIM_CAR_GETOUT_LOW_RHS,
|
|
||||||
ANIM_CAR_CLOSE_RHS,
|
|
||||||
ANIM_CAR_HOOKERTALK,
|
|
||||||
ANIM_COACH_OPEN_L,
|
|
||||||
ANIM_COACH_OPEN_R,
|
|
||||||
ANIM_COACH_IN_L,
|
|
||||||
ANIM_COACH_IN_R,
|
|
||||||
ANIM_COACH_OUT_L,
|
|
||||||
ANIM_TRAIN_GETIN,
|
|
||||||
ANIM_TRAIN_GETOUT,
|
|
||||||
ANIM_CAR_CRAWLOUT_RHS,
|
|
||||||
ANIM_CAR_CRAWLOUT_RHS2,
|
|
||||||
ANIM_VAN_OPEN_L,
|
|
||||||
ANIM_VAN_GETIN_L,
|
|
||||||
ANIM_VAN_CLOSE_L,
|
|
||||||
ANIM_VAN_GETOUT_L,
|
|
||||||
ANIM_VAN_OPEN,
|
|
||||||
ANIM_VAN_GETIN,
|
|
||||||
ANIM_VAN_CLOSE,
|
|
||||||
ANIM_VAN_GETOUT,
|
|
||||||
ANIM_GETUP1,
|
|
||||||
ANIM_GETUP2,
|
|
||||||
ANIM_GETUP3,
|
|
||||||
ANIM_GETUP_FRONT,
|
|
||||||
ANIM_JUMP_LAUNCH,
|
|
||||||
ANIM_JUMP_GLIDE,
|
|
||||||
ANIM_JUMP_LAND,
|
|
||||||
ANIM_FALL_FALL,
|
|
||||||
ANIM_FALL_GLIDE,
|
|
||||||
ANIM_FALL_LAND,
|
|
||||||
ANIM_FALL_COLLAPSE,
|
|
||||||
ANIM_EV_STEP,
|
|
||||||
ANIM_EV_DIVE,
|
|
||||||
ANIM_XPRESS_SCRATCH,
|
|
||||||
ANIM_ROAD_CROSS,
|
|
||||||
ANIM_TURN_180,
|
|
||||||
ANIM_ARREST_GUN,
|
|
||||||
ANIM_DROWN,
|
|
||||||
ANIM_CPR,
|
|
||||||
ANIM_DUCK_DOWN,
|
|
||||||
ANIM_DUCK_LOW,
|
|
||||||
ANIM_RBLOCK_CSHOOT,
|
|
||||||
ANIM_WEAPON_THROWU2,
|
|
||||||
ANIM_HANDSUP,
|
|
||||||
ANIM_HANDSCOWER,
|
|
||||||
ANIM_FUCKU,
|
|
||||||
ANIM_PHONE_IN,
|
|
||||||
ANIM_PHONE_OUT,
|
|
||||||
ANIM_PHONE_TALK,
|
|
||||||
|
|
||||||
NUM_ANIMS
|
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_STD_JACKEDCAR_RHS,
|
||||||
|
ANIM_STD_JACKEDCAR_LO_RHS,
|
||||||
|
ANIM_STD_JACKEDCAR_LHS,
|
||||||
|
ANIM_STD_JACKEDCAR_LO_LHS,
|
||||||
|
ANIM_STD_QUICKJACK,
|
||||||
|
ANIM_STD_QUICKJACKED,
|
||||||
|
ANIM_STD_CAR_ALIGN_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_ALIGNHI_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_OPEN_DOOR_LHS,
|
||||||
|
ANIM_STD_CARDOOR_LOCKED_LHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LO_LHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS,
|
||||||
|
ANIM_STD_GETOUT_LHS,
|
||||||
|
ANIM_STD_GETOUT_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_LHS,
|
||||||
|
ANIM_STD_CAR_ALIGN_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_ALIGNHI_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_OPEN_DOOR_RHS,
|
||||||
|
ANIM_STD_CARDOOR_LOCKED_RHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_RHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LO_RHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_RHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LO_RHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LO_RHS,
|
||||||
|
ANIM_STD_CAR_SHUFFLE_RHS,
|
||||||
|
ANIM_STD_CAR_SHUFFLE_LO_RHS,
|
||||||
|
ANIM_STD_CAR_SIT,
|
||||||
|
ANIM_STD_CAR_SIT_LO,
|
||||||
|
ANIM_STD_CAR_SIT_P,
|
||||||
|
ANIM_STD_CAR_SIT_P_LO,
|
||||||
|
ANIM_STD_CAR_DRIVE_LEFT,
|
||||||
|
ANIM_STD_CAR_DRIVE_RIGHT,
|
||||||
|
ANIM_STD_CAR_DRIVE_LEFT_LO,
|
||||||
|
ANIM_STD_CAR_DRIVE_RIGHT_LO,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_LEFT,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_RIGHT,
|
||||||
|
ANIM_STD_CAR_LOOKBEHIND,
|
||||||
|
ANIM_STD_BOAT_DRIVE,
|
||||||
|
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_GET_UP,
|
||||||
|
ANIM_STD_GET_UP_LEFT,
|
||||||
|
ANIM_STD_GET_UP_RIGHT,
|
||||||
|
ANIM_STD_GET_UP_FRONT,
|
||||||
|
ANIM_STD_JUMP_LAUNCH,
|
||||||
|
ANIM_STD_JUMP_GLIDE,
|
||||||
|
ANIM_STD_JUMP_LAND,
|
||||||
|
ANIM_STD_FALL,
|
||||||
|
ANIM_STD_FALL_GLIDE,
|
||||||
|
ANIM_STD_FALL_LAND,
|
||||||
|
ANIM_STD_FALL_COLLAPSE,
|
||||||
|
ANIM_STD_EVADE_STEP,
|
||||||
|
ANIM_STD_EVADE_DIVE,
|
||||||
|
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_RBLOCK_SHOOT,
|
||||||
|
|
||||||
|
/* names made up */
|
||||||
|
ANIM_STD_THROW_UNDER2,
|
||||||
|
/**/
|
||||||
|
|
||||||
|
ANIM_STD_HANDSUP,
|
||||||
|
ANIM_STD_HANDSCOWER,
|
||||||
|
ANIM_STD_PARTIAL_FUCKU,
|
||||||
|
ANIM_STD_PHONE_IN,
|
||||||
|
ANIM_STD_PHONE_OUT,
|
||||||
|
ANIM_STD_PHONE_TALK,
|
||||||
|
|
||||||
|
ANIM_STD_NUM
|
||||||
};
|
};
|
||||||
@@ -29,7 +29,7 @@ FrameUpdateCallBackNonSkinned(AnimBlendFrameData *frame, void *arg)
|
|||||||
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
||||||
|
|
||||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
||||||
gpAnimBlendClump->velocity){
|
gpAnimBlendClump->velocity2d){
|
||||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION_3D)
|
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION_3D)
|
||||||
FrameUpdateCallBackWith3dVelocityExtractionNonSkinned(frame, arg);
|
FrameUpdateCallBackWith3dVelocityExtractionNonSkinned(frame, arg);
|
||||||
else
|
else
|
||||||
@@ -138,11 +138,11 @@ FrameUpdateCallBackWithVelocityExtractionNonSkinned(AnimBlendFrameData *frame, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||||
gpAnimBlendClump->velocity->x = transx - curx;
|
gpAnimBlendClump->velocity2d->x = transx - curx;
|
||||||
gpAnimBlendClump->velocity->y = transy - cury;
|
gpAnimBlendClump->velocity2d->y = transy - cury;
|
||||||
if(looped){
|
if(looped){
|
||||||
gpAnimBlendClump->velocity->x += endx;
|
gpAnimBlendClump->velocity2d->x += endx;
|
||||||
gpAnimBlendClump->velocity->y += endy;
|
gpAnimBlendClump->velocity2d->y += endy;
|
||||||
}
|
}
|
||||||
mat->pos.x = pos.x - transx;
|
mat->pos.x = pos.x - transx;
|
||||||
mat->pos.y = pos.y - transy;
|
mat->pos.y = pos.y - transy;
|
||||||
@@ -218,9 +218,9 @@ FrameUpdateCallBackWith3dVelocityExtractionNonSkinned(AnimBlendFrameData *frame,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||||
*gpAnimBlendClump->velocity = trans - cur;
|
*gpAnimBlendClump->velocity3d = trans - cur;
|
||||||
if(looped)
|
if(looped)
|
||||||
*gpAnimBlendClump->velocity += end;
|
*gpAnimBlendClump->velocity3d += end;
|
||||||
mat->pos.x = (pos - trans).x + frame->resetPos.x;
|
mat->pos.x = (pos - trans).x + frame->resetPos.x;
|
||||||
mat->pos.y = (pos - trans).y + frame->resetPos.y;
|
mat->pos.y = (pos - trans).y + frame->resetPos.y;
|
||||||
mat->pos.z = (pos - trans).z + frame->resetPos.z;
|
mat->pos.z = (pos - trans).z + frame->resetPos.z;
|
||||||
@@ -241,7 +241,7 @@ FrameUpdateCallBackSkinned(AnimBlendFrameData *frame, void *arg)
|
|||||||
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
AnimBlendFrameUpdateData *updateData = (AnimBlendFrameUpdateData*)arg;
|
||||||
|
|
||||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION &&
|
||||||
gpAnimBlendClump->velocity){
|
gpAnimBlendClump->velocity2d){
|
||||||
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION_3D)
|
if(frame->flag & AnimBlendFrameData::VELOCITY_EXTRACTION_3D)
|
||||||
FrameUpdateCallBackWith3dVelocityExtractionSkinned(frame, arg);
|
FrameUpdateCallBackWith3dVelocityExtractionSkinned(frame, arg);
|
||||||
else
|
else
|
||||||
@@ -353,11 +353,11 @@ FrameUpdateCallBackWithVelocityExtractionSkinned(AnimBlendFrameData *frame, void
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||||
gpAnimBlendClump->velocity->x = transx - curx;
|
gpAnimBlendClump->velocity2d->x = transx - curx;
|
||||||
gpAnimBlendClump->velocity->y = transy - cury;
|
gpAnimBlendClump->velocity2d->y = transy - cury;
|
||||||
if(looped){
|
if(looped){
|
||||||
gpAnimBlendClump->velocity->x += endx;
|
gpAnimBlendClump->velocity2d->x += endx;
|
||||||
gpAnimBlendClump->velocity->y += endy;
|
gpAnimBlendClump->velocity2d->y += endy;
|
||||||
}
|
}
|
||||||
xform->t.x = pos.x - transx;
|
xform->t.x = pos.x - transx;
|
||||||
xform->t.y = pos.y - transy;
|
xform->t.y = pos.y - transy;
|
||||||
@@ -433,9 +433,9 @@ FrameUpdateCallBackWith3dVelocityExtractionSkinned(AnimBlendFrameData *frame, vo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
if((frame->flag & AnimBlendFrameData::IGNORE_TRANSLATION) == 0){
|
||||||
*gpAnimBlendClump->velocity = trans - cur;
|
*gpAnimBlendClump->velocity3d = trans - cur;
|
||||||
if(looped)
|
if(looped)
|
||||||
*gpAnimBlendClump->velocity += end;
|
*gpAnimBlendClump->velocity3d += end;
|
||||||
xform->t.x = (pos - trans).x + frame->resetPos.x;
|
xform->t.x = (pos - trans).x + frame->resetPos.x;
|
||||||
xform->t.y = (pos - trans).y + frame->resetPos.y;
|
xform->t.y = (pos - trans).y + frame->resetPos.y;
|
||||||
xform->t.z = (pos - trans).z + frame->resetPos.z;
|
xform->t.z = (pos - trans).z + frame->resetPos.z;
|
||||||
|
|||||||
@@ -8,29 +8,46 @@
|
|||||||
#include "SurfaceTable.h"
|
#include "SurfaceTable.h"
|
||||||
#include "sampman.h"
|
#include "sampman.h"
|
||||||
|
|
||||||
const int CollisionSoundIntensity = 60;
|
void
|
||||||
|
cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower,
|
||||||
cAudioCollisionManager::cAudioCollisionManager()
|
float velocity)
|
||||||
{
|
{
|
||||||
m_sQueue.m_pEntity1 = nil;
|
float distSquared;
|
||||||
m_sQueue.m_pEntity2 = nil;
|
CVector v1;
|
||||||
m_sQueue.m_bSurface1 = SURFACE_DEFAULT;
|
CVector v2;
|
||||||
m_sQueue.m_bSurface2 = SURFACE_DEFAULT;
|
|
||||||
m_sQueue.m_fIntensity2 = 0.0f;
|
|
||||||
m_sQueue.m_fIntensity1 = 0.0f;
|
|
||||||
m_sQueue.m_vecPosition = CVector(0.0f, 0.0f, 0.0f);
|
|
||||||
|
|
||||||
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
if(!m_bIsInitialised || m_nCollisionEntity < 0 || m_bIsPaused ||
|
||||||
m_bIndicesTable[i] = NUMAUDIOCOLLISIONS;
|
(velocity < 0.0016f && collisionPower < 0.01f))
|
||||||
|
return;
|
||||||
|
|
||||||
m_bCollisionsInQueue = 0;
|
if(entity1->IsBuilding()) {
|
||||||
|
v1 = v2 = entity2->GetPosition();
|
||||||
|
} else if(entity2->IsBuilding()) {
|
||||||
|
v1 = v2 = entity1->GetPosition();
|
||||||
|
} else {
|
||||||
|
v1 = entity1->GetPosition();
|
||||||
|
v2 = entity2->GetPosition();
|
||||||
|
}
|
||||||
|
CVector pos = (v1 + v2) * 0.5f;
|
||||||
|
distSquared = GetDistanceSquared(pos);
|
||||||
|
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;
|
||||||
|
m_sCollisionManager.m_sQueue.m_bSurface2 = surface2;
|
||||||
|
m_sCollisionManager.m_sQueue.m_fIntensity1 = collisionPower;
|
||||||
|
m_sCollisionManager.m_sQueue.m_fIntensity2 = velocity;
|
||||||
|
m_sCollisionManager.m_sQueue.m_vecPosition = pos;
|
||||||
|
m_sCollisionManager.m_sQueue.m_fDistance = distSquared;
|
||||||
|
m_sCollisionManager.AddCollisionToRequestedQueue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioCollisionManager::AddCollisionToRequestedQueue()
|
cAudioCollisionManager::AddCollisionToRequestedQueue()
|
||||||
{
|
{
|
||||||
int32 collisionsIndex;
|
uint32 collisionsIndex;
|
||||||
int32 i;
|
uint32 i;
|
||||||
|
|
||||||
|
|
||||||
if (m_bCollisionsInQueue < NUMAUDIOCOLLISIONS)
|
if (m_bCollisionsInQueue < NUMAUDIOCOLLISIONS)
|
||||||
@@ -55,137 +72,72 @@ cAudioCollisionManager::AddCollisionToRequestedQueue()
|
|||||||
m_bIndicesTable[i] = collisionsIndex;
|
m_bIndicesTable[i] = collisionsIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
|
||||||
cAudioManager::GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const
|
|
||||||
{
|
|
||||||
return GetCollisionRatio(c, 0.0f, 0.02f, 0.02f);
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
cAudioManager::GetCollisionOneShotRatio(int32 a, float b) const
|
|
||||||
{
|
|
||||||
float result;
|
|
||||||
|
|
||||||
switch(a) {
|
|
||||||
case SURFACE_DEFAULT:
|
|
||||||
case SURFACE_TARMAC:
|
|
||||||
case SURFACE_PAVEMENT:
|
|
||||||
case SURFACE_STEEP_CLIFF:
|
|
||||||
case SURFACE_TRANSPARENT_STONE: result = GetCollisionRatio(b, 10.f, 60.f, 50.f); break;
|
|
||||||
case SURFACE_GRASS:
|
|
||||||
case SURFACE_CARDBOARDBOX: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
|
||||||
case SURFACE_GRAVEL: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
|
||||||
case SURFACE_MUD_DRY: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
|
||||||
case SURFACE_CAR: result = GetCollisionRatio(b, 6.f, 50.f, 44.f); break;
|
|
||||||
case SURFACE_GLASS: result = GetCollisionRatio(b, 0.1f, 10.f, 9.9f); break;
|
|
||||||
case SURFACE_TRANSPARENT_CLOTH:
|
|
||||||
case SURFACE_THICK_METAL_PLATE: result = GetCollisionRatio(b, 30.f, 130.f, 100.f); break;
|
|
||||||
case SURFACE_GARAGE_DOOR: result = GetCollisionRatio(b, 20.f, 100.f, 80.f); break;
|
|
||||||
case SURFACE_CAR_PANEL: result = GetCollisionRatio(b, 0.f, 4.f, 4.f); break;
|
|
||||||
case SURFACE_SCAFFOLD_POLE:
|
|
||||||
case SURFACE_METAL_GATE: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
|
||||||
case SURFACE_LAMP_POST: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
|
||||||
case SURFACE_FIRE_HYDRANT: result = GetCollisionRatio(b, 1.f, 15.f, 14.f); break;
|
|
||||||
case SURFACE_GIRDER: result = GetCollisionRatio(b, 8.f, 50.f, 42.f); break;
|
|
||||||
case SURFACE_METAL_CHAIN_FENCE: result = GetCollisionRatio(b, 0.1f, 10.f, 9.9f); break;
|
|
||||||
case SURFACE_PED: result = GetCollisionRatio(b, 0.f, 20.f, 20.f); break;
|
|
||||||
case SURFACE_SAND: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
|
||||||
case SURFACE_WATER: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
|
||||||
case SURFACE_WOOD_CRATES: result = GetCollisionRatio(b, 1.f, 4.f, 3.f); break;
|
|
||||||
case SURFACE_WOOD_BENCH: result = GetCollisionRatio(b, 0.1f, 5.f, 4.9f); break;
|
|
||||||
case SURFACE_WOOD_SOLID: result = GetCollisionRatio(b, 0.1f, 40.f, 39.9f); break;
|
|
||||||
case SURFACE_RUBBER:
|
|
||||||
case SURFACE_WHEELBASE: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
|
||||||
case SURFACE_PLASTIC: result = GetCollisionRatio(b, 0.1f, 4.f, 3.9f); break;
|
|
||||||
case SURFACE_HEDGE: result = GetCollisionRatio(b, 0.f, 0.5f, 0.5f); break;
|
|
||||||
case SURFACE_CONTAINER: result = GetCollisionRatio(b, 4.f, 40.f, 36.f); break;
|
|
||||||
case SURFACE_NEWS_VENDOR: result = GetCollisionRatio(b, 0.f, 5.f, 5.f); break;
|
|
||||||
default: result = 0.f; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
cAudioManager::GetCollisionRatio(float a, float b, float c, float d) const
|
|
||||||
{
|
|
||||||
float e;
|
|
||||||
e = a;
|
|
||||||
if(a <= b) return 0.0f;
|
|
||||||
if(c <= a) e = c;
|
|
||||||
return (e - b) / d;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32
|
|
||||||
cAudioManager::SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision)
|
|
||||||
{
|
|
||||||
uint8 surface1 = audioCollision.m_bSurface1;
|
|
||||||
uint8 surface2 = audioCollision.m_bSurface2;
|
|
||||||
int32 vol;
|
|
||||||
float ratio;
|
|
||||||
|
|
||||||
if(surface1 == SURFACE_GRASS || surface2 == SURFACE_GRASS || surface1 == SURFACE_HEDGE ||
|
|
||||||
surface2 == SURFACE_HEDGE) {
|
|
||||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_RAIN;
|
|
||||||
m_sQueueSample.m_nFrequency = 13000.f * ratio + 35000;
|
|
||||||
vol = 50.f * ratio;
|
|
||||||
} else if(surface1 == SURFACE_WATER || surface2 == SURFACE_WATER) {
|
|
||||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
|
||||||
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) {
|
|
||||||
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;
|
|
||||||
vol = 50.f * ratio;
|
|
||||||
} else if(surface1 == SURFACE_PED || surface2 == SURFACE_PED) {
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_SCRAPE_CAR_1;
|
|
||||||
m_sQueueSample.m_nFrequency = 10000.f * ratio + 10000;
|
|
||||||
vol = 40.f * ratio;
|
|
||||||
}
|
|
||||||
if(audioCollision.m_nBaseVolume < 2) vol = audioCollision.m_nBaseVolume * vol / 2;
|
|
||||||
return vol;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter)
|
cAudioManager::ServiceCollisions()
|
||||||
{
|
{
|
||||||
if(col.m_fIntensity2 > 0.0016f) {
|
int i, j;
|
||||||
uint8 emittingVol = SetLoopingCollisionRequestedSfxFreqAndGetVol(col);
|
bool8 abRepeatedCollision1[NUMAUDIOCOLLISIONS];
|
||||||
if(emittingVol) {
|
bool8 abRepeatedCollision2[NUMAUDIOCOLLISIONS];
|
||||||
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
|
||||||
m_sQueueSample.m_nVolume =
|
m_sQueueSample.m_nEntityIndex = m_nCollisionEntity;
|
||||||
ComputeVolume(emittingVol, CollisionSoundIntensity, m_sQueueSample.m_fDistance);
|
|
||||||
if(m_sQueueSample.m_nVolume) {
|
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
||||||
m_sQueueSample.m_nCounter = counter;
|
abRepeatedCollision1[i] = abRepeatedCollision2[i] = FALSE;
|
||||||
m_sQueueSample.m_vecPos = col.m_vecPosition;
|
|
||||||
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
for (i = 0; i < m_sCollisionManager.m_bCollisionsInQueue; i++) {
|
||||||
m_sQueueSample.m_bIs2D = false;
|
for (j = 0; j < NUMAUDIOCOLLISIONS; j++) {
|
||||||
m_sQueueSample.m_nReleasingVolumeModificator = 7;
|
int index = m_sCollisionManager.m_bIndicesTable[i];
|
||||||
m_sQueueSample.m_nLoopCount = 0;
|
if ((m_sCollisionManager.m_asCollisions1[index].m_pEntity1 == m_sCollisionManager.m_asCollisions2[j].m_pEntity1)
|
||||||
m_sQueueSample.m_nEmittingVolume = emittingVol;
|
&& (m_sCollisionManager.m_asCollisions1[index].m_pEntity2 == m_sCollisionManager.m_asCollisions2[j].m_pEntity2)
|
||||||
m_sQueueSample.m_nLoopStart =
|
&& (m_sCollisionManager.m_asCollisions1[index].m_bSurface1 == m_sCollisionManager.m_asCollisions2[j].m_bSurface1)
|
||||||
SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex);
|
&& (m_sCollisionManager.m_asCollisions1[index].m_bSurface2 == m_sCollisionManager.m_asCollisions2[j].m_bSurface2)
|
||||||
m_sQueueSample.m_nLoopEnd =
|
) {
|
||||||
SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex);
|
abRepeatedCollision1[index] = TRUE;
|
||||||
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
abRepeatedCollision2[j] = TRUE;
|
||||||
m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity;
|
m_sCollisionManager.m_asCollisions1[index].m_nBaseVolume = ++m_sCollisionManager.m_asCollisions2[j].m_nBaseVolume;
|
||||||
m_sQueueSample.m_bReleasingSoundFlag = false;
|
SetUpLoopingCollisionSound(m_sCollisionManager.m_asCollisions1[index], j);
|
||||||
m_sQueueSample.m_nReleasingVolumeDivider = 5;
|
break;
|
||||||
m_sQueueSample.m_bReverbFlag = true;
|
|
||||||
m_sQueueSample.m_bRequireReflection = false;
|
|
||||||
AddSampleToRequestedQueue();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < NUMAUDIOCOLLISIONS; i++) {
|
||||||
|
if (!abRepeatedCollision2[i]) {
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_pEntity1 = nil;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_pEntity2 = nil;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_bSurface1 = SURFACE_DEFAULT;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_bSurface2 = SURFACE_DEFAULT;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_fIntensity2 = 0.0f;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_fIntensity1 = 0.0f;
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_vecPosition = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
m_sCollisionManager.m_asCollisions2[i].m_fDistance = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < m_sCollisionManager.m_bCollisionsInQueue; i++) {
|
||||||
|
int index = m_sCollisionManager.m_bIndicesTable[i];
|
||||||
|
if (!abRepeatedCollision1[index]) {
|
||||||
|
for (j = 0; j < NUMAUDIOCOLLISIONS; j++) {
|
||||||
|
if (!abRepeatedCollision2[j]) {
|
||||||
|
m_sCollisionManager.m_asCollisions2[j].m_nBaseVolume = 1;
|
||||||
|
m_sCollisionManager.m_asCollisions2[j].m_pEntity1 = m_sCollisionManager.m_asCollisions1[index].m_pEntity1;
|
||||||
|
m_sCollisionManager.m_asCollisions2[j].m_pEntity2 = m_sCollisionManager.m_asCollisions1[index].m_pEntity2;
|
||||||
|
m_sCollisionManager.m_asCollisions2[j].m_bSurface1 = m_sCollisionManager.m_asCollisions1[index].m_bSurface1;
|
||||||
|
m_sCollisionManager.m_asCollisions2[j].m_bSurface2 = m_sCollisionManager.m_asCollisions1[index].m_bSurface2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetUpOneShotCollisionSound(m_sCollisionManager.m_asCollisions1[index]);
|
||||||
|
SetUpLoopingCollisionSound(m_sCollisionManager.m_asCollisions1[index], j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
||||||
|
m_sCollisionManager.m_bIndicesTable[i] = NUMAUDIOCOLLISIONS;
|
||||||
|
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_TARMAC_1,
|
||||||
SFX_COL_GRASS_1,
|
SFX_COL_GRASS_1,
|
||||||
SFX_COL_GRAVEL_1,
|
SFX_COL_GRAVEL_1,
|
||||||
@@ -222,11 +174,10 @@ static const int32 gOneShotCol[] = {SFX_COL_TARMAC_1,
|
|||||||
void
|
void
|
||||||
cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
||||||
{
|
{
|
||||||
|
uint16 s1;
|
||||||
|
uint16 s2;
|
||||||
|
|
||||||
int16 s1;
|
uint32 emittingVol;
|
||||||
int16 s2;
|
|
||||||
|
|
||||||
int32 emittingVol;
|
|
||||||
float ratio;
|
float ratio;
|
||||||
|
|
||||||
static uint16 counter = 28;
|
static uint16 counter = 28;
|
||||||
@@ -245,12 +196,12 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
|||||||
s1 = SURFACE_CAR_PANEL;
|
s1 = SURFACE_CAR_PANEL;
|
||||||
ratio = Min(1.f, 2.f * ratio);
|
ratio = Min(1.f, 2.f * ratio);
|
||||||
}
|
}
|
||||||
emittingVol = 40.f * ratio;
|
emittingVol = 40 * ratio;
|
||||||
if(emittingVol) {
|
if(emittingVol) {
|
||||||
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
||||||
m_sQueueSample.m_nVolume =
|
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) {
|
if(m_sQueueSample.m_nVolume > 0) {
|
||||||
m_sQueueSample.m_nSampleIndex = gOneShotCol[s1];
|
m_sQueueSample.m_nSampleIndex = gOneShotCol[s1];
|
||||||
switch(m_sQueueSample.m_nSampleIndex) {
|
switch(m_sQueueSample.m_nSampleIndex) {
|
||||||
case SFX_COL_TARMAC_1:
|
case SFX_COL_TARMAC_1:
|
||||||
@@ -307,17 +258,16 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
|||||||
if(counter >= 255) counter = 28;
|
if(counter >= 255) counter = 28;
|
||||||
m_sQueueSample.m_vecPos = col.m_vecPosition;
|
m_sQueueSample.m_vecPos = col.m_vecPosition;
|
||||||
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
||||||
m_sQueueSample.m_bIs2D = false;
|
m_sQueueSample.m_bIs2D = FALSE;
|
||||||
m_sQueueSample.m_nReleasingVolumeModificator = 11;
|
m_sQueueSample.m_nPriority = 11;
|
||||||
m_sQueueSample.m_nLoopCount = 1;
|
m_sQueueSample.m_nLoopCount = 1;
|
||||||
m_sQueueSample.m_nEmittingVolume = emittingVol;
|
SET_EMITTING_VOLUME(emittingVol);
|
||||||
m_sQueueSample.m_nLoopStart = 0;
|
RESET_LOOP_OFFSETS
|
||||||
m_sQueueSample.m_nLoopEnd = -1;
|
|
||||||
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
||||||
m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity;
|
m_sQueueSample.m_MaxDistance = COLLISION_MAX_DIST;
|
||||||
m_sQueueSample.m_bReleasingSoundFlag = true;
|
m_sQueueSample.m_bStatic = TRUE;
|
||||||
m_sQueueSample.m_bReverbFlag = true;
|
m_sQueueSample.m_bReverb = TRUE;
|
||||||
m_sQueueSample.m_bRequireReflection = false;
|
SET_SOUND_REFLECTION(FALSE);
|
||||||
AddSampleToRequestedQueue();
|
AddSampleToRequestedQueue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -325,101 +275,127 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::ServiceCollisions()
|
cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter)
|
||||||
{
|
{
|
||||||
int i, j;
|
if(col.m_fIntensity2 > 0.0016f) {
|
||||||
bool abRepeatedCollision1[NUMAUDIOCOLLISIONS];
|
uint8 emittingVol = SetLoopingCollisionRequestedSfxFreqAndGetVol(col);
|
||||||
bool abRepeatedCollision2[NUMAUDIOCOLLISIONS];
|
if(emittingVol) {
|
||||||
|
m_sQueueSample.m_fDistance = Sqrt(col.m_fDistance);
|
||||||
m_sQueueSample.m_nEntityIndex = m_nCollisionEntity;
|
m_sQueueSample.m_nVolume =
|
||||||
|
ComputeVolume(emittingVol, COLLISION_MAX_DIST, m_sQueueSample.m_fDistance);
|
||||||
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
if(m_sQueueSample.m_nVolume > 0) {
|
||||||
abRepeatedCollision1[i] = abRepeatedCollision2[i] = false;
|
m_sQueueSample.m_nCounter = counter;
|
||||||
|
m_sQueueSample.m_vecPos = col.m_vecPosition;
|
||||||
for (i = 0; i < m_sCollisionManager.m_bCollisionsInQueue; i++) {
|
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
||||||
for (j = 0; j < NUMAUDIOCOLLISIONS; j++) {
|
m_sQueueSample.m_bIs2D = FALSE;
|
||||||
int index = m_sCollisionManager.m_bIndicesTable[i];
|
m_sQueueSample.m_nPriority = 7;
|
||||||
if ((m_sCollisionManager.m_asCollisions1[index].m_pEntity1 == m_sCollisionManager.m_asCollisions2[j].m_pEntity1)
|
m_sQueueSample.m_nLoopCount = 0;
|
||||||
&& (m_sCollisionManager.m_asCollisions1[index].m_pEntity2 == m_sCollisionManager.m_asCollisions2[j].m_pEntity2)
|
SET_EMITTING_VOLUME(emittingVol);
|
||||||
&& (m_sCollisionManager.m_asCollisions1[index].m_bSurface1 == m_sCollisionManager.m_asCollisions2[j].m_bSurface1)
|
SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex);
|
||||||
&& (m_sCollisionManager.m_asCollisions1[index].m_bSurface2 == m_sCollisionManager.m_asCollisions2[j].m_bSurface2)
|
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
||||||
) {
|
m_sQueueSample.m_MaxDistance = COLLISION_MAX_DIST;
|
||||||
abRepeatedCollision1[index] = true;
|
m_sQueueSample.m_bStatic = FALSE;
|
||||||
abRepeatedCollision2[j] = true;
|
m_sQueueSample.m_nFramesToPlay = 5;
|
||||||
m_sCollisionManager.m_asCollisions1[index].m_nBaseVolume = ++m_sCollisionManager.m_asCollisions2[j].m_nBaseVolume;
|
m_sQueueSample.m_bReverb = TRUE;
|
||||||
SetUpLoopingCollisionSound(m_sCollisionManager.m_asCollisions1[index], j);
|
SET_SOUND_REFLECTION(FALSE);
|
||||||
break;
|
AddSampleToRequestedQueue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < NUMAUDIOCOLLISIONS; i++) {
|
|
||||||
if (!abRepeatedCollision2[i]) {
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_pEntity1 = nil;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_pEntity2 = nil;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_bSurface1 = SURFACE_DEFAULT;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_bSurface2 = SURFACE_DEFAULT;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_fIntensity2 = 0.0f;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_fIntensity1 = 0.0f;
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_vecPosition = CVector(0.0f, 0.0f, 0.0f);
|
|
||||||
m_sCollisionManager.m_asCollisions2[i].m_fDistance = 0.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < m_sCollisionManager.m_bCollisionsInQueue; i++) {
|
|
||||||
int index = m_sCollisionManager.m_bIndicesTable[i];
|
|
||||||
if (!abRepeatedCollision1[index]) {
|
|
||||||
for (j = 0; j < NUMAUDIOCOLLISIONS; j++) {
|
|
||||||
if (!abRepeatedCollision2[j]) {
|
|
||||||
m_sCollisionManager.m_asCollisions2[j].m_nBaseVolume = 1;
|
|
||||||
m_sCollisionManager.m_asCollisions2[j].m_pEntity1 = m_sCollisionManager.m_asCollisions1[index].m_pEntity1;
|
|
||||||
m_sCollisionManager.m_asCollisions2[j].m_pEntity2 = m_sCollisionManager.m_asCollisions1[index].m_pEntity2;
|
|
||||||
m_sCollisionManager.m_asCollisions2[j].m_bSurface1 = m_sCollisionManager.m_asCollisions1[index].m_bSurface1;
|
|
||||||
m_sCollisionManager.m_asCollisions2[j].m_bSurface2 = m_sCollisionManager.m_asCollisions1[index].m_bSurface2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SetUpOneShotCollisionSound(m_sCollisionManager.m_asCollisions1[index]);
|
|
||||||
SetUpLoopingCollisionSound(m_sCollisionManager.m_asCollisions1[index], j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
|
||||||
m_sCollisionManager.m_bIndicesTable[i] = NUMAUDIOCOLLISIONS;
|
|
||||||
m_sCollisionManager.m_bCollisionsInQueue = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
uint32
|
||||||
cAudioManager::ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower,
|
cAudioManager::SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision)
|
||||||
float velocity)
|
|
||||||
{
|
{
|
||||||
float distSquared;
|
uint8 surface1 = audioCollision.m_bSurface1;
|
||||||
CVector v1;
|
uint8 surface2 = audioCollision.m_bSurface2;
|
||||||
CVector v2;
|
int32 vol;
|
||||||
|
float ratio;
|
||||||
|
|
||||||
if(!m_bIsInitialised || m_nCollisionEntity < 0 || m_nUserPause ||
|
if(surface1 == SURFACE_GRASS || surface2 == SURFACE_GRASS || surface1 == SURFACE_HEDGE ||
|
||||||
(velocity < 0.0016f && collisionPower < 0.01f))
|
surface2 == SURFACE_HEDGE) {
|
||||||
return;
|
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||||
|
m_sQueueSample.m_nSampleIndex = SFX_RAIN;
|
||||||
if(entity1->IsBuilding()) {
|
m_sQueueSample.m_nFrequency = 13000.f * ratio + 35000;
|
||||||
v1 = v2 = entity2->GetPosition();
|
vol = 50.f * ratio;
|
||||||
} else if(entity2->IsBuilding()) {
|
} else if(surface1 == SURFACE_WATER || surface2 == SURFACE_WATER) {
|
||||||
v1 = v2 = entity1->GetPosition();
|
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||||
|
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) {
|
||||||
|
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;
|
||||||
|
vol = 50.f * ratio;
|
||||||
|
} else if(surface1 == SURFACE_PED || surface2 == SURFACE_PED) {
|
||||||
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
v1 = entity1->GetPosition();
|
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||||
v2 = entity2->GetPosition();
|
m_sQueueSample.m_nSampleIndex = SFX_SCRAPE_CAR_1;
|
||||||
}
|
m_sQueueSample.m_nFrequency = 10000.f * ratio + 10000;
|
||||||
CVector pos = (v1 + v2) * 0.5f;
|
vol = 40.f * ratio;
|
||||||
distSquared = GetDistanceSquared(pos);
|
|
||||||
if(distSquared < SQR(CollisionSoundIntensity)) {
|
|
||||||
m_sCollisionManager.m_sQueue.m_pEntity1 = entity1;
|
|
||||||
m_sCollisionManager.m_sQueue.m_pEntity2 = entity2;
|
|
||||||
m_sCollisionManager.m_sQueue.m_bSurface1 = surface1;
|
|
||||||
m_sCollisionManager.m_sQueue.m_bSurface2 = surface2;
|
|
||||||
m_sCollisionManager.m_sQueue.m_fIntensity1 = collisionPower;
|
|
||||||
m_sCollisionManager.m_sQueue.m_fIntensity2 = velocity;
|
|
||||||
m_sCollisionManager.m_sQueue.m_vecPosition = pos;
|
|
||||||
m_sCollisionManager.m_sQueue.m_fDistance = distSquared;
|
|
||||||
m_sCollisionManager.AddCollisionToRequestedQueue();
|
|
||||||
}
|
}
|
||||||
|
if(audioCollision.m_nBaseVolume < 2) vol = audioCollision.m_nBaseVolume * vol / 2;
|
||||||
|
return vol;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
cAudioManager::GetCollisionOneShotRatio(uint32 a, float b)
|
||||||
|
{
|
||||||
|
switch(a) {
|
||||||
|
case SURFACE_DEFAULT:
|
||||||
|
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_GRASS:
|
||||||
|
case SURFACE_CARDBOARDBOX:
|
||||||
|
case SURFACE_GRAVEL:
|
||||||
|
case SURFACE_MUD_DRY: 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);
|
||||||
|
case SURFACE_TRANSPARENT_CLOTH:
|
||||||
|
case SURFACE_THICK_METAL_PLATE: return GetCollisionRatio(b, 30.f, 130.f, 100.f);
|
||||||
|
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_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);
|
||||||
|
case SURFACE_PED: return GetCollisionRatio(b, 0.f, 20.f, 20.f);
|
||||||
|
case SURFACE_SAND:
|
||||||
|
case SURFACE_WATER:
|
||||||
|
case SURFACE_RUBBER:
|
||||||
|
case SURFACE_WHEELBASE: 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);
|
||||||
|
case SURFACE_PLASTIC: return GetCollisionRatio(b, 0.1f, 4.f, 3.9f);
|
||||||
|
case SURFACE_HEDGE: return GetCollisionRatio(b, 0.f, 0.5f, 0.5f);
|
||||||
|
case SURFACE_CONTAINER: return GetCollisionRatio(b, 4.f, 40.f, 36.f);
|
||||||
|
case SURFACE_NEWS_VENDOR: return GetCollisionRatio(b, 0.f, 5.f, 5.f);
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
cAudioManager::GetCollisionLoopingRatio(uint32 a, uint32 b, float c)
|
||||||
|
{
|
||||||
|
return GetCollisionRatio(c, 0.0f, 0.02f, 0.02f);
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
cAudioManager::GetCollisionRatio(float a, float b, float c, float d)
|
||||||
|
{
|
||||||
|
float e;
|
||||||
|
e = a;
|
||||||
|
if(a <= b) return 0.0f;
|
||||||
|
if(c <= a) e = c;
|
||||||
|
return (e - b) / d;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,18 @@ public:
|
|||||||
float m_fDistance;
|
float m_fDistance;
|
||||||
int32 m_nBaseVolume;
|
int32 m_nBaseVolume;
|
||||||
|
|
||||||
// no methods
|
cAudioCollision() { Reset(); }
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
m_pEntity1 = nil;
|
||||||
|
m_pEntity2 = nil;
|
||||||
|
m_bSurface1 = 0;
|
||||||
|
m_bSurface2 = 0;
|
||||||
|
m_fIntensity1 = m_fIntensity2 = 0.0f;
|
||||||
|
m_vecPosition = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
m_fDistance = 0.0f;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
VALIDATE_SIZE(cAudioCollision, 40);
|
VALIDATE_SIZE(cAudioCollision, 40);
|
||||||
@@ -31,7 +42,15 @@ public:
|
|||||||
uint8 m_bCollisionsInQueue;
|
uint8 m_bCollisionsInQueue;
|
||||||
cAudioCollision m_sQueue;
|
cAudioCollision m_sQueue;
|
||||||
|
|
||||||
cAudioCollisionManager();
|
cAudioCollisionManager()
|
||||||
|
{
|
||||||
|
m_sQueue.Reset();
|
||||||
|
|
||||||
|
for(int i = 0; i < NUMAUDIOCOLLISIONS; i++)
|
||||||
|
m_bIndicesTable[i] = NUMAUDIOCOLLISIONS;
|
||||||
|
|
||||||
|
m_bCollisionsInQueue = 0;
|
||||||
|
}
|
||||||
void AddCollisionToRequestedQueue();
|
void AddCollisionToRequestedQueue();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2,37 +2,71 @@
|
|||||||
|
|
||||||
#include "audio_enums.h"
|
#include "audio_enums.h"
|
||||||
#include "AudioCollision.h"
|
#include "AudioCollision.h"
|
||||||
#include "PoliceRadio.h"
|
#include "PolRadio.h"
|
||||||
|
|
||||||
class tSound
|
class tSound
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int32 m_nEntityIndex;
|
int32 m_nEntityIndex; // audio entity index
|
||||||
int32 m_nCounter;
|
#if GTA_VERSION >= GTA3_PC_10
|
||||||
int32 m_nSampleIndex;
|
uint32 m_nCounter; // I'm not sure what this is but it looks like a virtual counter to determine the same sound in queue
|
||||||
uint8 m_nBankIndex;
|
// Values higher than 255 are used by reflections
|
||||||
bool m_bIs2D;
|
#else
|
||||||
int32 m_nReleasingVolumeModificator;
|
uint8 m_nCounter;
|
||||||
uint32 m_nFrequency;
|
#endif
|
||||||
uint8 m_nVolume;
|
uint32 m_nSampleIndex; // An index of sample from AudioSamples.h
|
||||||
float m_fDistance;
|
uint8 m_nBankIndex; // A sound bank index. IDK what's the point of it here since samples are hardcoded anyway
|
||||||
int32 m_nLoopCount;
|
bool8 m_bIs2D; // If TRUE then sound is played in 2D space (such as frontend or police radio)
|
||||||
int32 m_nLoopStart;
|
uint32 m_nPriority; // The multiplier for the sound priority (see m_nFinalPriority below). Lesser value means higher priority
|
||||||
|
uint32 m_nFrequency; // Sound frequency, plain and simple
|
||||||
|
uint8 m_nVolume; // Sound volume (0..127), only used as an actual volume without EXTERNAL_3D_SOUND (see m_nEmittingVolume)
|
||||||
|
float m_fDistance; // Distance to camera (useless if m_bIs2D == TRUE)
|
||||||
|
uint32 m_nLoopCount; // 0 - always loop, 1 - don't loop, other values never seen
|
||||||
|
#ifndef GTA_PS2
|
||||||
|
// Loop offsets
|
||||||
|
uint32 m_nLoopStart;
|
||||||
int32 m_nLoopEnd;
|
int32 m_nLoopEnd;
|
||||||
uint8 m_nEmittingVolume;
|
#endif
|
||||||
float m_fSpeedMultiplier;
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
float m_fSoundIntensity;
|
uint8 m_nEmittingVolume; // The volume in 3D space, provided to 3D audio engine
|
||||||
bool m_bReleasingSoundFlag;
|
#endif
|
||||||
CVector m_vecPos;
|
float m_fSpeedMultiplier; // Used for doppler effect. 0.0f - unaffected by doppler
|
||||||
bool m_bReverbFlag;
|
#if GTA_VERSION >= GTA3_PC_10
|
||||||
uint8 m_nLoopsRemaining;
|
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)
|
||||||
bool m_bRequireReflection; // Used for oneshots
|
#else
|
||||||
uint8 m_nOffset;
|
uint32 m_MaxDistance;
|
||||||
int32 m_nReleasingVolumeDivider;
|
#endif
|
||||||
bool m_bIsProcessed;
|
bool8 m_bStatic; // If TRUE then sound parameters cannot be changed during playback (frequency, position, etc.)
|
||||||
bool m_bLoopEnded;
|
CVector m_vecPos; // Position of sound in 3D space. Unused if m_bIs2D == TRUE
|
||||||
int32 m_nCalculatedVolume;
|
bool8 m_bReverb; // Toggles reverb effect
|
||||||
int8 m_nVolumeChange;
|
#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
|
||||||
|
#endif
|
||||||
|
uint8 m_nPan; // Sound panning (0-127). Controls the volume of the playback coming from left and right speaker. Calculated internally unless m_bIs2D==TRUE.
|
||||||
|
// 0 = L 100% R 0%
|
||||||
|
// 63 = L 100% R 100%
|
||||||
|
// 127 = L 0% R 100%
|
||||||
|
#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
|
||||||
|
#else
|
||||||
|
float m_nFramesToPlay; // Made into float for high fps fix
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 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; // (inherited from GTA 2) 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
|
||||||
};
|
};
|
||||||
|
|
||||||
VALIDATE_SIZE(tSound, 92);
|
VALIDATE_SIZE(tSound, 92);
|
||||||
@@ -45,8 +79,8 @@ class tAudioEntity
|
|||||||
public:
|
public:
|
||||||
eAudioType m_nType;
|
eAudioType m_nType;
|
||||||
void *m_pEntity;
|
void *m_pEntity;
|
||||||
bool m_bIsUsed;
|
bool8 m_bIsUsed;
|
||||||
uint8 m_bStatus;
|
bool8 m_bStatus;
|
||||||
int16 m_awAudioEvent[NUM_AUDIOENTITY_EVENTS];
|
int16 m_awAudioEvent[NUM_AUDIOENTITY_EVENTS];
|
||||||
float m_afVolume[NUM_AUDIOENTITY_EVENTS];
|
float m_afVolume[NUM_AUDIOENTITY_EVENTS];
|
||||||
uint8 m_AudioEvents;
|
uint8 m_AudioEvents;
|
||||||
@@ -57,12 +91,15 @@ VALIDATE_SIZE(tAudioEntity, 40);
|
|||||||
class tPedComment
|
class tPedComment
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int32 m_nSampleIndex;
|
uint32 m_nSampleIndex;
|
||||||
int32 m_nEntityIndex;
|
int32 m_nEntityIndex;
|
||||||
CVector m_vecPos;
|
CVector m_vecPos;
|
||||||
float m_fDistance;
|
float m_fDistance;
|
||||||
uint8 m_bVolume;
|
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
|
||||||
};
|
};
|
||||||
|
|
||||||
VALIDATE_SIZE(tPedComment, 28);
|
VALIDATE_SIZE(tPedComment, 28);
|
||||||
@@ -70,22 +107,22 @@ VALIDATE_SIZE(tPedComment, 28);
|
|||||||
class cPedComments
|
class cPedComments
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tPedComment m_asPedComments[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
|
tPedComment m_aPedCommentQueue[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
|
||||||
uint8 m_nIndexMap[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
|
uint8 m_aPedCommentOrderList[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
|
||||||
uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS];
|
uint8 m_nPedCommentCount[NUM_SOUND_QUEUES];
|
||||||
uint8 m_nActiveBank;
|
uint8 m_nActiveQueue;
|
||||||
|
|
||||||
cPedComments()
|
cPedComments()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
|
for (int i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
|
||||||
for (int j = 0; j < NUM_PED_COMMENTS_BANKS; j++) {
|
for (int j = 0; j < NUM_SOUND_QUEUES; j++) {
|
||||||
m_asPedComments[j][i].m_nProcess = -1;
|
m_aPedCommentQueue[j][i].m_nLoadingTimeout = -1;
|
||||||
m_nIndexMap[j][i] = NUM_PED_COMMENTS_SLOTS;
|
m_aPedCommentOrderList[j][i] = NUM_PED_COMMENTS_SLOTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < NUM_PED_COMMENTS_BANKS; i++)
|
for (int i = 0; i < NUM_SOUND_QUEUES; i++)
|
||||||
m_nCommentsInBank[i] = 0;
|
m_nPedCommentCount[i] = 0;
|
||||||
m_nActiveBank = 0;
|
m_nActiveQueue = 0;
|
||||||
}
|
}
|
||||||
void Add(tPedComment *com);
|
void Add(tPedComment *com);
|
||||||
void Process();
|
void Process();
|
||||||
@@ -93,22 +130,6 @@ public:
|
|||||||
|
|
||||||
VALIDATE_SIZE(cPedComments, 1164);
|
VALIDATE_SIZE(cPedComments, 1164);
|
||||||
|
|
||||||
class CEntity;
|
|
||||||
|
|
||||||
class cMissionAudio
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CVector m_vecPos;
|
|
||||||
bool m_bPredefinedProperties;
|
|
||||||
int32 m_nSampleIndex;
|
|
||||||
uint8 m_nLoadingStatus;
|
|
||||||
uint8 m_nPlayStatus;
|
|
||||||
bool m_bIsPlaying;
|
|
||||||
int32 m_nMissionAudioCounter;
|
|
||||||
bool m_bIsPlayed;
|
|
||||||
};
|
|
||||||
VALIDATE_SIZE(cMissionAudio, 32);
|
|
||||||
|
|
||||||
// name made up
|
// name made up
|
||||||
class cAudioScriptObjectManager
|
class cAudioScriptObjectManager
|
||||||
{
|
{
|
||||||
@@ -122,6 +143,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
class cTransmission;
|
class cTransmission;
|
||||||
|
class CEntity;
|
||||||
class CPlane;
|
class CPlane;
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
class CPed;
|
class CPed;
|
||||||
@@ -129,7 +151,7 @@ class CPed;
|
|||||||
class cPedParams
|
class cPedParams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool m_bDistanceCalculated;
|
bool8 m_bDistanceCalculated;
|
||||||
float m_fDistance;
|
float m_fDistance;
|
||||||
CPed *m_pPed;
|
CPed *m_pPed;
|
||||||
|
|
||||||
@@ -144,11 +166,11 @@ public:
|
|||||||
class cVehicleParams
|
class cVehicleParams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool m_bDistanceCalculated;
|
bool8 m_bDistanceCalculated;
|
||||||
float m_fDistance;
|
float m_fDistance;
|
||||||
CVehicle *m_pVehicle;
|
CVehicle *m_pVehicle;
|
||||||
cTransmission *m_pTransmission;
|
cTransmission *m_pTransmission;
|
||||||
int32 m_nIndex;
|
uint32 m_nIndex;
|
||||||
float m_fVelocityChange;
|
float m_fVelocityChange;
|
||||||
|
|
||||||
cVehicleParams()
|
cVehicleParams()
|
||||||
@@ -181,325 +203,385 @@ enum {
|
|||||||
MAX_REFLECTIONS,
|
MAX_REFLECTIONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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_LOADING };
|
||||||
|
|
||||||
class cAudioManager
|
class cAudioManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool m_bIsInitialised;
|
bool8 m_bIsInitialised;
|
||||||
uint8 field_1; // unused
|
bool8 m_bIsSurround; // unused until VC
|
||||||
bool m_bFifthFrameFlag;
|
bool8 m_bReduceReleasingPriority;
|
||||||
uint8 m_nActiveSamples;
|
uint8 m_nActiveSamples;
|
||||||
uint8 field_4; // unused
|
bool8 m_bDoubleVolume; // unused
|
||||||
bool m_bDynamicAcousticModelingStatus;
|
#if GTA_VERSION >= GTA3_PC_10
|
||||||
|
bool8 m_bDynamicAcousticModelingStatus;
|
||||||
|
#endif
|
||||||
float m_fSpeedOfSound;
|
float m_fSpeedOfSound;
|
||||||
bool m_bTimerJustReset;
|
bool8 m_bTimerJustReset;
|
||||||
int32 m_nTimer;
|
uint32 m_nTimer;
|
||||||
tSound m_sQueueSample;
|
tSound m_sQueueSample;
|
||||||
uint8 m_nActiveSampleQueue;
|
uint8 m_nActiveQueue;
|
||||||
tSound m_asSamples[NUM_SOUNDS_SAMPLES_BANKS][NUM_SOUNDS_SAMPLES_SLOTS];
|
tSound m_aRequestedQueue[NUM_SOUND_QUEUES][NUM_CHANNELS_GENERIC];
|
||||||
uint8 m_abSampleQueueIndexTable[NUM_SOUNDS_SAMPLES_BANKS][NUM_SOUNDS_SAMPLES_SLOTS];
|
uint8 m_aRequestedOrderList[NUM_SOUND_QUEUES][NUM_CHANNELS_GENERIC];
|
||||||
uint8 m_SampleRequestQueuesStatus[NUM_SOUNDS_SAMPLES_BANKS];
|
uint8 m_nRequestedCount[NUM_SOUND_QUEUES];
|
||||||
tSound m_asActiveSamples[NUM_SOUNDS_SAMPLES_SLOTS];
|
tSound m_asActiveSamples[NUM_CHANNELS_GENERIC];
|
||||||
tAudioEntity m_asAudioEntities[NUM_AUDIOENTITIES];
|
tAudioEntity m_asAudioEntities[NUM_AUDIOENTITIES];
|
||||||
int32 m_anAudioEntityIndices[NUM_AUDIOENTITIES];
|
uint32 m_aAudioEntityOrderList[NUM_AUDIOENTITIES];
|
||||||
int32 m_nAudioEntitiesTotal;
|
uint32 m_nAudioEntitiesCount;
|
||||||
CVector m_avecReflectionsPos[NUM_AUDIO_REFLECTIONS];
|
#ifdef AUDIO_REFLECTIONS
|
||||||
float m_afReflectionsDistances[NUM_AUDIO_REFLECTIONS];
|
CVector m_avecReflectionsPos[MAX_REFLECTIONS];
|
||||||
|
float m_afReflectionsDistances[MAX_REFLECTIONS];
|
||||||
|
#endif
|
||||||
cAudioScriptObjectManager m_sAudioScriptObjectManager;
|
cAudioScriptObjectManager m_sAudioScriptObjectManager;
|
||||||
cPedComments m_sPedComments;
|
cPedComments m_sPedComments;
|
||||||
int32 m_nFireAudioEntity;
|
int32 m_nFireAudioEntity;
|
||||||
int32 m_nWaterCannonEntity;
|
int32 m_nWaterCannonEntity;
|
||||||
int32 m_nPoliceChannelEntity;
|
int32 m_nPoliceChannelEntity;
|
||||||
cPoliceRadioQueue m_sPoliceRadioQueue;
|
cPoliceRadioQueue m_sPoliceRadioQueue;
|
||||||
|
cAMCrime m_aCrimes[10];
|
||||||
int32 m_nFrontEndEntity;
|
int32 m_nFrontEndEntity;
|
||||||
int32 m_nCollisionEntity;
|
int32 m_nCollisionEntity;
|
||||||
cAudioCollisionManager m_sCollisionManager;
|
cAudioCollisionManager m_sCollisionManager;
|
||||||
int32 m_nProjectileEntity;
|
int32 m_nProjectileEntity;
|
||||||
int32 m_nBridgeEntity;
|
int32 m_nBridgeEntity;
|
||||||
cMissionAudio m_sMissionAudio;
|
|
||||||
|
// Mission audio stuff
|
||||||
|
CVector m_vecMissionAudioPosition;
|
||||||
|
bool8 m_bIsMissionAudio2D;
|
||||||
|
uint32 m_nMissionAudioSampleIndex;
|
||||||
|
uint8 m_nMissionAudioLoadingStatus;
|
||||||
|
uint8 m_nMissionAudioPlayStatus;
|
||||||
|
bool8 m_bIsMissionAudioPlaying;
|
||||||
|
int32 m_nMissionAudioFramesToPlay; // possibly unsigned
|
||||||
|
bool8 m_bIsMissionAudioAllowedToPlay;
|
||||||
|
|
||||||
int32 m_anRandomTable[5];
|
int32 m_anRandomTable[5];
|
||||||
uint8 m_nTimeSpent;
|
uint8 m_nTimeSpent;
|
||||||
uint8 m_nUserPause;
|
bool8 m_bIsPaused;
|
||||||
uint8 m_nPreviousUserPause;
|
bool8 m_bWasPaused;
|
||||||
uint32 m_FrameCounter;
|
uint32 m_FrameCounter;
|
||||||
|
|
||||||
cAudioManager();
|
cAudioManager();
|
||||||
~cAudioManager();
|
~cAudioManager();
|
||||||
|
|
||||||
// getters
|
|
||||||
uint32 GetFrameCounter() const { return m_FrameCounter; }
|
|
||||||
float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; }
|
|
||||||
int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; }
|
|
||||||
int32 GetRandomNumberInRange(int32 idx, int32 low, int32 high) const { return (m_anRandomTable[idx] % (high - low + 1)) + low; }
|
|
||||||
bool ShouldDuckMissionAudio() const { return m_sMissionAudio.m_nPlayStatus == 1; }
|
|
||||||
|
|
||||||
// "Should" be in alphabetic order, except "getXTalkSfx"
|
|
||||||
void AddDetailsToRequestedOrderList(uint8 sample);
|
|
||||||
void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank,
|
|
||||||
uint8 counter, bool notLooping);
|
|
||||||
void AddReflectionsToRequestedQueue();
|
|
||||||
void AddReleasingSounds();
|
|
||||||
void AddSampleToRequestedQueue();
|
|
||||||
void AgeCrimes();
|
|
||||||
|
|
||||||
void CalculateDistance(bool &condition, float dist);
|
|
||||||
bool CheckForAnAudioFileOnCD() const;
|
|
||||||
void ClearActiveSamples();
|
|
||||||
void ClearMissionAudio();
|
|
||||||
void ClearRequestedQueue();
|
|
||||||
int32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2,
|
|
||||||
float speedMultiplier) const;
|
|
||||||
int32 ComputePan(float, CVector *);
|
|
||||||
uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const;
|
|
||||||
int32 CreateEntity(eAudioType type, void *entity);
|
|
||||||
|
|
||||||
void DestroyAllGameCreatedEntities();
|
|
||||||
void DestroyEntity(int32 id);
|
|
||||||
void DoPoliceRadioCrackle();
|
|
||||||
|
|
||||||
// functions returning talk sfx,
|
|
||||||
// order from GetPedCommentSfx
|
|
||||||
uint32 GetPlayerTalkSfx(int16 sound);
|
|
||||||
uint32 GetCopTalkSfx(int16 sound);
|
|
||||||
uint32 GetSwatTalkSfx(int16 sound);
|
|
||||||
uint32 GetFBITalkSfx(int16 sound);
|
|
||||||
uint32 GetArmyTalkSfx(int16 sound);
|
|
||||||
uint32 GetMedicTalkSfx(int16 sound);
|
|
||||||
uint32 GetFiremanTalkSfx(int16 sound);
|
|
||||||
uint32 GetNormalMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetTaxiDriverTalkSfx(int16 sound);
|
|
||||||
uint32 GetPimpTalkSfx(int16 sound);
|
|
||||||
uint32 GetMafiaTalkSfx(int16 sound);
|
|
||||||
uint32 GetTriadTalkSfx(int16 sound);
|
|
||||||
uint32 GetDiabloTalkSfx(int16 sound);
|
|
||||||
uint32 GetYakuzaTalkSfx(int16 sound);
|
|
||||||
uint32 GetYardieTalkSfx(int16 sound);
|
|
||||||
uint32 GetColumbianTalkSfx(int16 sound);
|
|
||||||
uint32 GetHoodTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackCriminalTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteCriminalTalkSfx(int16 sound);
|
|
||||||
uint32 GetMaleNo2TalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackProjectMaleTalkSfx(int16 sound, int32 model);
|
|
||||||
uint32 GetWhiteFatMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackFatMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackCasualFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteCasualFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetFemaleNo3TalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackFatFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteFatFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackFemaleProstituteTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteFemaleProstituteTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackProjectFemaleOldTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackProjectFemaleYoungTalkSfx(int16 sound);
|
|
||||||
uint32 GetChinatownMaleOldTalkSfx(int16 sound);
|
|
||||||
uint32 GetChinatownMaleYoungTalkSfx(int16 sound);
|
|
||||||
uint32 GetChinatownFemaleOldTalkSfx(int16 sound);
|
|
||||||
uint32 GetChinatownFemaleYoungTalkSfx(int16 sound);
|
|
||||||
uint32 GetLittleItalyMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetLittleItalyFemaleOldTalkSfx(int16 sound);
|
|
||||||
uint32 GetLittleItalyFemaleYoungTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteDockerMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackDockerMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetScumMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetScumFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteWorkerMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackWorkerMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetBusinessMaleYoungTalkSfx(int16 sound, int32 model);
|
|
||||||
uint32 GetBusinessMaleOldTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteBusinessFemaleTalkSfx(int16 sound, int32 model);
|
|
||||||
uint32 GetBlackBusinessFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetSupermodelMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetSupermodelFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetStewardMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetStewardFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetFanMaleTalkSfx(int16 sound, int32 model);
|
|
||||||
uint32 GetFanFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetHospitalMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetHospitalFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetWhiteConstructionWorkerTalkSfx(int16 sound);
|
|
||||||
uint32 GetBlackConstructionWorkerTalkSfx(int16 sound);
|
|
||||||
uint32 GetShopperFemaleTalkSfx(int16 sound, int32 model);
|
|
||||||
uint32 GetStudentMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetStudentFemaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetCasualMaleOldTalkSfx(int16 sound);
|
|
||||||
|
|
||||||
uint32 GetSpecialCharacterTalkSfx(int32 modelIndex, int32 sound);
|
|
||||||
uint32 GetEightTalkSfx(int16 sound);
|
|
||||||
uint32 GetFrankieTalkSfx(int16 sound);
|
|
||||||
uint32 GetMistyTalkSfx(int16 sound);
|
|
||||||
uint32 GetOJGTalkSfx(int16 sound);
|
|
||||||
uint32 GetCatatalinaTalkSfx(int16 sound);
|
|
||||||
uint32 GetBomberTalkSfx(int16 sound);
|
|
||||||
uint32 GetSecurityGuardTalkSfx(int16 sound);
|
|
||||||
uint32 GetChunkyTalkSfx(int16 sound);
|
|
||||||
|
|
||||||
uint32 GetGenericMaleTalkSfx(int16 sound);
|
|
||||||
uint32 GetGenericFemaleTalkSfx(int16 sound);
|
|
||||||
// end of functions returning talk sfx
|
|
||||||
|
|
||||||
void GenerateIntegerRandomNumberTable();
|
|
||||||
char *Get3DProviderName(uint8 id) const;
|
|
||||||
uint8 GetCDAudioDriveLetter() const;
|
|
||||||
int8 GetCurrent3DProviderIndex() const;
|
|
||||||
float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // not used
|
|
||||||
float GetCollisionOneShotRatio(int32 a, float b) const;
|
|
||||||
float GetCollisionRatio(float a, float b, float c, float d) const;
|
|
||||||
float GetDistanceSquared(const CVector &v) const;
|
|
||||||
int32 GetJumboTaxiFreq() const;
|
|
||||||
uint8 GetMissionAudioLoadingStatus() const;
|
|
||||||
int8 GetMissionScriptPoliceAudioPlayingStatus() const;
|
|
||||||
uint8 GetNum3DProvidersAvailable() const;
|
|
||||||
int32 GetPedCommentSfx(CPed *ped, int32 sound);
|
|
||||||
void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset) const;
|
|
||||||
float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile,
|
|
||||||
cTransmission *transmission, float velocityChange);
|
|
||||||
float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile,
|
|
||||||
cTransmission *transmission, float velocityChange);
|
|
||||||
|
|
||||||
bool HasAirBrakes(int32 model) const;
|
|
||||||
|
|
||||||
void Initialise();
|
void Initialise();
|
||||||
void InitialisePoliceRadio();
|
|
||||||
void InitialisePoliceRadioZones();
|
|
||||||
void InterrogateAudioEntities();
|
|
||||||
bool IsAudioInitialised() const;
|
|
||||||
bool IsMissionAudioSampleFinished();
|
|
||||||
bool IsMP3RadioChannelAvailable() const;
|
|
||||||
|
|
||||||
bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const;
|
|
||||||
|
|
||||||
void PlayLoadedMissionAudio();
|
|
||||||
void PlayOneShot(int32 index, uint16 sound, float vol);
|
|
||||||
void PlaySuspectLastSeen(float x, float y, float z);
|
|
||||||
void PlayerJustGotInCar() const;
|
|
||||||
void PlayerJustLeftCar() const;
|
|
||||||
void PostInitialiseGameSpecificSetup();
|
|
||||||
void PostTerminateGameSpecificShutdown();
|
|
||||||
void PreInitialiseGameSpecificSetup() const;
|
|
||||||
void PreloadMissionAudio(Const char *name);
|
|
||||||
void PreTerminateGameSpecificShutdown();
|
|
||||||
/// processX - main logic of adding new sounds
|
|
||||||
void ProcessActiveQueues();
|
|
||||||
bool ProcessAirBrakes(cVehicleParams& params);
|
|
||||||
void ProcessAirportScriptObject(uint8 sound);
|
|
||||||
bool ProcessBoatEngine(cVehicleParams& params);
|
|
||||||
bool ProcessBoatMovingOverWater(cVehicleParams& params);
|
|
||||||
void ProcessBridge();
|
|
||||||
void ProcessBridgeMotor();
|
|
||||||
void ProcessBridgeOneShots();
|
|
||||||
void ProcessBridgeWarning();
|
|
||||||
bool ProcessCarBombTick(cVehicleParams& params);
|
|
||||||
void ProcessCesna(cVehicleParams& params);
|
|
||||||
void ProcessCinemaScriptObject(uint8 sound);
|
|
||||||
void ProcessCrane();
|
|
||||||
void ProcessDocksScriptObject(uint8 sound);
|
|
||||||
bool ProcessEngineDamage(cVehicleParams& params);
|
|
||||||
void ProcessEntity(int32 sound);
|
|
||||||
void ProcessExplosions(int32 explosion);
|
|
||||||
void ProcessFireHydrant();
|
|
||||||
void ProcessFires(int32 entity);
|
|
||||||
void ProcessFrontEnd();
|
|
||||||
void ProcessGarages();
|
|
||||||
bool ProcessHelicopter(cVehicleParams& params);
|
|
||||||
void ProcessHomeScriptObject(uint8 sound);
|
|
||||||
void ProcessJumbo(cVehicleParams& params);
|
|
||||||
void ProcessJumboAccel(CPlane *plane);
|
|
||||||
void ProcessJumboDecel(CPlane *plane);
|
|
||||||
void ProcessJumboFlying();
|
|
||||||
void ProcessJumboLanding(CPlane *plane);
|
|
||||||
void ProcessJumboTakeOff(CPlane *plane);
|
|
||||||
void ProcessJumboTaxi();
|
|
||||||
void ProcessLaunderetteScriptObject(uint8 sound);
|
|
||||||
void ProcessLoopingScriptObject(uint8 sound);
|
|
||||||
void ProcessMissionAudio();
|
|
||||||
void ProcessModelCarEngine(cVehicleParams& params);
|
|
||||||
void ProcessOneShotScriptObject(uint8 sound);
|
|
||||||
void ProcessPed(CPhysical *ped);
|
|
||||||
void ProcessPedHeadphones(cPedParams ¶ms);
|
|
||||||
void ProcessPedOneShots(cPedParams ¶ms);
|
|
||||||
void ProcessPhysical(int32 id);
|
|
||||||
void ProcessPlane(cVehicleParams& params);
|
|
||||||
void ProcessPlayersVehicleEngine(cVehicleParams& params, CAutomobile *automobile);
|
|
||||||
void ProcessPoliceCellBeatingScriptObject(uint8 sound);
|
|
||||||
void ProcessPornCinema(uint8 sound);
|
|
||||||
void ProcessProjectiles();
|
|
||||||
void ProcessRainOnVehicle(cVehicleParams& params);
|
|
||||||
void ProcessReverb() const;
|
|
||||||
bool ProcessReverseGear(cVehicleParams& params);
|
|
||||||
void ProcessSawMillScriptObject(uint8 sound);
|
|
||||||
void ProcessScriptObject(int32 id);
|
|
||||||
void ProcessShopScriptObject(uint8 sound);
|
|
||||||
void ProcessSpecial();
|
|
||||||
bool ProcessTrainNoise(cVehicleParams& params);
|
|
||||||
void ProcessVehicle(CVehicle *vehicle);
|
|
||||||
bool ProcessVehicleDoors(cVehicleParams& params);
|
|
||||||
void ProcessVehicleEngine(cVehicleParams& params);
|
|
||||||
void ProcessVehicleHorn(cVehicleParams& params);
|
|
||||||
void ProcessVehicleOneShots(cVehicleParams& params);
|
|
||||||
bool ProcessVehicleReverseWarning(cVehicleParams& params);
|
|
||||||
bool ProcessVehicleRoadNoise(cVehicleParams& params);
|
|
||||||
bool ProcessVehicleSirenOrAlarm(cVehicleParams& params);
|
|
||||||
bool ProcessVehicleSkidding(cVehicleParams& params);
|
|
||||||
void ProcessWaterCannon(int32);
|
|
||||||
void ProcessWeather(int32 id);
|
|
||||||
bool ProcessWetRoadNoise(cVehicleParams& params);
|
|
||||||
void ProcessWorkShopScriptObject(uint8 sound);
|
|
||||||
|
|
||||||
int32 RandomDisplacement(uint32 seed) const;
|
|
||||||
void ReacquireDigitalHandle() const;
|
|
||||||
void ReleaseDigitalHandle() const;
|
|
||||||
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2,
|
|
||||||
float collisionPower, float intensity2);
|
|
||||||
void ReportCrime(eCrimeType crime, const CVector &pos);
|
|
||||||
void ResetAudioLogicTimers(uint32 timer);
|
|
||||||
void ResetPoliceRadio();
|
|
||||||
void ResetTimers(uint32 time);
|
|
||||||
|
|
||||||
void Service();
|
|
||||||
void ServiceCollisions();
|
|
||||||
void ServicePoliceRadio();
|
|
||||||
void ServicePoliceRadioChannel(uint8 wantedLevel);
|
|
||||||
void ServiceSoundEffects();
|
|
||||||
int8 SetCurrent3DProvider(uint8 which);
|
|
||||||
void SetDynamicAcousticModelingStatus(uint8 status);
|
|
||||||
void SetEffectsFadeVol(uint8 volume) const;
|
|
||||||
void SetEffectsMasterVolume(uint8 volume) const;
|
|
||||||
void SetEntityStatus(int32 id, uint8 status);
|
|
||||||
uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision);
|
|
||||||
void SetMissionAudioLocation(float x, float y, float z);
|
|
||||||
void SetMissionScriptPoliceAudio(int32 sfx) const;
|
|
||||||
void SetMonoMode(uint8 mono);
|
|
||||||
void SetMusicFadeVol(uint8 volume) const;
|
|
||||||
void SetMusicMasterVolume(uint8 volume) const;
|
|
||||||
void SetSpeakerConfig(int32 conf) const;
|
|
||||||
void SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter);
|
|
||||||
void SetUpOneShotCollisionSound(const cAudioCollision &col);
|
|
||||||
bool SetupCrimeReport();
|
|
||||||
bool SetupJumboEngineSound(uint8 vol, uint32 freq);
|
|
||||||
bool SetupJumboFlySound(uint8 emittingVol);
|
|
||||||
bool SetupJumboRumbleSound(uint8 emittingVol);
|
|
||||||
bool SetupJumboTaxiSound(uint8 vol);
|
|
||||||
bool SetupJumboWhineSound(uint8 emittingVol, uint32 freq);
|
|
||||||
void SetupPedComments(cPedParams ¶ms, uint16 sound);
|
|
||||||
void SetupSuspectLastSeenReport();
|
|
||||||
|
|
||||||
void Terminate();
|
void Terminate();
|
||||||
void TranslateEntity(Const CVector *v1, CVector *v2) const;
|
void Service();
|
||||||
|
int32 CreateEntity(eAudioType type, void *entity);
|
||||||
void UpdateGasPedalAudio(CAutomobile *automobile);
|
void DestroyEntity(int32 id);
|
||||||
void UpdateReflections();
|
bool8 GetEntityStatus(int32 id);
|
||||||
bool UsesReverseWarning(int32 model) const;
|
void SetEntityStatus(int32 id, bool8 status);
|
||||||
bool UsesSiren(int32 model) const;
|
void *GetEntityPointer(int32 id);
|
||||||
bool UsesSirenSwitching(int32 model) const;
|
void PlayOneShot(int32 index, uint16 sound, float vol);
|
||||||
|
void SetEffectsMasterVolume(uint8 volume);
|
||||||
|
void SetMusicMasterVolume(uint8 volume);
|
||||||
|
void SetEffectsFadeVol(uint8 volume);
|
||||||
|
void SetMusicFadeVol(uint8 volume);
|
||||||
|
void SetMonoMode(bool8 mono);
|
||||||
|
void ResetTimers(uint32 time);
|
||||||
|
void DestroyAllGameCreatedEntities();
|
||||||
|
|
||||||
#ifdef GTA_PC
|
#ifdef GTA_PC
|
||||||
// only used in pc
|
uint8 GetNum3DProvidersAvailable();
|
||||||
void AdjustSamplesVolume();
|
char *Get3DProviderName(uint8 id);
|
||||||
uint8 ComputeEmittingVolume(uint8 emittingVolume, float intensity, float dist);
|
int8 GetCurrent3DProviderIndex();
|
||||||
|
int8 SetCurrent3DProvider(uint8 which);
|
||||||
|
void SetSpeakerConfig(int32 conf);
|
||||||
|
bool8 IsMP3RadioChannelAvailable();
|
||||||
|
void ReleaseDigitalHandle();
|
||||||
|
void ReacquireDigitalHandle();
|
||||||
|
#ifdef AUDIO_REFLECTIONS
|
||||||
|
void SetDynamicAcousticModelingStatus(bool8 status);
|
||||||
#endif
|
#endif
|
||||||
|
bool8 CheckForAnAudioFileOnCD();
|
||||||
|
char GetCDAudioDriveLetter();
|
||||||
|
bool8 IsAudioInitialised();
|
||||||
|
#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 ComputePan(float, CVector *);
|
||||||
|
uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier); // inlined on PS2
|
||||||
|
int32 RandomDisplacement(uint32 seed);
|
||||||
|
void InterrogateAudioEntities(); // inlined on PS2
|
||||||
|
void AddSampleToRequestedQueue();
|
||||||
|
void AddDetailsToRequestedOrderList(uint8 sample); // inlined on PS2
|
||||||
|
#ifdef AUDIO_REFLECTIONS
|
||||||
|
void AddReflectionsToRequestedQueue();
|
||||||
|
void UpdateReflections();
|
||||||
|
#endif
|
||||||
|
void AddReleasingSounds();
|
||||||
|
void ProcessActiveQueues();
|
||||||
|
void ClearRequestedQueue(); // inlined on PS2
|
||||||
|
void ClearActiveSamples();
|
||||||
|
void GenerateIntegerRandomNumberTable(); // inlined on PS2
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
bool8 LoadBankIfNecessary(uint8 bank); // this is used only on PS2 but technically not a platform code
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef EXTERNAL_3D_SOUND // actually must have been && AUDIO_MSS as well
|
||||||
|
void AdjustSamplesVolume();
|
||||||
|
uint8 ComputeEmittingVolume(uint8 emittingVolume, float maxDistance, float distance);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// audio logic
|
||||||
|
void PreInitialiseGameSpecificSetup();
|
||||||
|
void PostInitialiseGameSpecificSetup();
|
||||||
|
void PreTerminateGameSpecificShutdown();
|
||||||
|
void PostTerminateGameSpecificShutdown();
|
||||||
|
void ResetAudioLogicTimers(uint32 timer);
|
||||||
|
void ProcessReverb();
|
||||||
|
float GetDistanceSquared(const CVector &v);
|
||||||
|
void CalculateDistance(bool8 &condition, float dist);
|
||||||
|
void ProcessSpecial();
|
||||||
|
void ProcessEntity(int32 id);
|
||||||
|
void ProcessPhysical(int32 id);
|
||||||
|
|
||||||
|
// vehicles
|
||||||
|
void ProcessVehicle(CVehicle *vehicle);
|
||||||
|
void ProcessRainOnVehicle(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessReverseGear(cVehicleParams ¶ms);
|
||||||
|
void ProcessModelCarEngine(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessVehicleRoadNoise(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessWetRoadNoise(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessVehicleEngine(cVehicleParams ¶ms);
|
||||||
|
void UpdateGasPedalAudio(CAutomobile *automobile); // inlined on PS2
|
||||||
|
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);
|
||||||
|
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
|
||||||
|
bool8 ProcessVehicleHorn(cVehicleParams ¶ms);
|
||||||
|
bool8 UsesSiren(uint32 model); // inlined on PS2
|
||||||
|
bool8 UsesSirenSwitching(uint32 model); // inlined on PS2
|
||||||
|
bool8 ProcessVehicleSirenOrAlarm(cVehicleParams ¶ms);
|
||||||
|
bool8 UsesReverseWarning(uint32 model); // inlined on PS2
|
||||||
|
bool8 ProcessVehicleReverseWarning(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessVehicleDoors(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessAirBrakes(cVehicleParams ¶ms);
|
||||||
|
bool8 HasAirBrakes(uint32 model); // inlined on PS2
|
||||||
|
bool8 ProcessEngineDamage(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessCarBombTick(cVehicleParams ¶ms);
|
||||||
|
void ProcessVehicleOneShots(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessTrainNoise(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessBoatEngine(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessBoatMovingOverWater(cVehicleParams ¶ms);
|
||||||
|
bool8 ProcessHelicopter(cVehicleParams ¶ms);
|
||||||
|
void ProcessPlane(cVehicleParams ¶ms); // inlined on PS2
|
||||||
|
void ProcessJumbo(cVehicleParams ¶ms);
|
||||||
|
void ProcessJumboTaxi(); // inlined on PS2
|
||||||
|
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
|
||||||
|
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
|
||||||
|
|
||||||
|
// peds
|
||||||
|
void ProcessPed(CPhysical *ped); // inlined on PS2
|
||||||
|
void ProcessPedHeadphones(cPedParams ¶ms);
|
||||||
|
void ProcessPedOneShots(cPedParams ¶ms);
|
||||||
|
|
||||||
|
// 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 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);
|
||||||
|
|
||||||
|
// particles
|
||||||
|
void ProcessExplosions(int32 id);
|
||||||
|
void ProcessFires(int32 id);
|
||||||
|
void ProcessWaterCannon(int32 id);
|
||||||
|
|
||||||
|
// script objects
|
||||||
|
void ProcessScriptObject(int32 id); // inlined on PS2
|
||||||
|
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 ProcessProjectiles();
|
||||||
|
void ProcessGarages();
|
||||||
|
void ProcessFireHydrant();
|
||||||
|
|
||||||
|
// bridge
|
||||||
|
void ProcessBridge(); // inlined on PS2
|
||||||
|
void ProcessBridgeWarning();
|
||||||
|
void ProcessBridgeMotor();
|
||||||
|
void ProcessBridgeOneShots();
|
||||||
|
|
||||||
|
// mission audio
|
||||||
|
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 ProcessMissionAudio();
|
||||||
|
|
||||||
|
// police radio
|
||||||
|
void InitialisePoliceRadioZones();
|
||||||
|
void InitialisePoliceRadio();
|
||||||
|
void ResetPoliceRadio();
|
||||||
|
void SetMissionScriptPoliceAudio(uint32 sfx);
|
||||||
|
int8 GetMissionScriptPoliceAudioPlayingStatus();
|
||||||
|
void DoPoliceRadioCrackle();
|
||||||
|
void ServicePoliceRadio();
|
||||||
|
void ServicePoliceRadioChannel(uint8 wantedLevel);
|
||||||
|
bool8 SetupCrimeReport();
|
||||||
|
void SetupSuspectLastSeenReport();
|
||||||
|
void ReportCrime(eCrimeType crime, const CVector &pos);
|
||||||
|
void PlaySuspectLastSeen(float x, float y, float z);
|
||||||
|
void AgeCrimes(); // inlined on PS2
|
||||||
|
|
||||||
|
// collision stuff
|
||||||
|
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2);
|
||||||
|
void ServiceCollisions();
|
||||||
|
void SetUpOneShotCollisionSound(const cAudioCollision &col);
|
||||||
|
void SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter);
|
||||||
|
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
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef AUDIO_MSS
|
/*
|
||||||
|
Manual loop points are not on PS2 so let's have these macros to avoid massive ifndefs.
|
||||||
|
Setting these manually was pointless anyway since they never change from sdt values.
|
||||||
|
What were they thinking?
|
||||||
|
*/
|
||||||
|
#ifndef GTA_PS2
|
||||||
|
#define RESET_LOOP_OFFSETS \
|
||||||
|
m_sQueueSample.m_nLoopStart = 0; \
|
||||||
|
m_sQueueSample.m_nLoopEnd = -1;
|
||||||
|
#define SET_LOOP_OFFSETS(sample) \
|
||||||
|
m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(sample); \
|
||||||
|
m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(sample);
|
||||||
|
#else
|
||||||
|
#define RESET_LOOP_OFFSETS
|
||||||
|
#define SET_LOOP_OFFSETS(sample)
|
||||||
|
#endif
|
||||||
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
|
#define SET_EMITTING_VOLUME(vol) m_sQueueSample.m_nEmittingVolume = vol
|
||||||
|
#else
|
||||||
|
#define SET_EMITTING_VOLUME(vol)
|
||||||
|
#endif
|
||||||
|
#ifdef AUDIO_REFLECTIONS
|
||||||
|
#define SET_SOUND_REFLECTION(b) m_sQueueSample.m_bReflections = b
|
||||||
|
#else
|
||||||
|
#define SET_SOUND_REFLECTION(b)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(AUDIO_MSS) && !defined(PS2_AUDIO_CHANNELS)
|
||||||
static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error");
|
static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern cAudioManager AudioManager;
|
extern cAudioManager AudioManager;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PED_COMMENT_VOLUME = 127,
|
||||||
|
PED_COMMENT_VOLUME_BEHIND_WALL = 31,
|
||||||
|
COLLISION_MAX_DIST = 60,
|
||||||
|
};
|
||||||
|
|||||||
@@ -564,8 +564,9 @@ enum eSfxSample
|
|||||||
// bank 59
|
// bank 59
|
||||||
SFX_EXPLOSION_1,
|
SFX_EXPLOSION_1,
|
||||||
SFX_BRIDGE_OPEN_WARNING,
|
SFX_BRIDGE_OPEN_WARNING,
|
||||||
|
#ifndef GTA_PS2
|
||||||
SFX_PAGER, // used to be ped comment on PS2
|
SFX_PAGER, // used to be ped comment on PS2
|
||||||
|
#endif
|
||||||
|
|
||||||
SFX_COP_VOICE_1_ARREST_1,
|
SFX_COP_VOICE_1_ARREST_1,
|
||||||
SFX_COP_VOICE_1_ARREST_2,
|
SFX_COP_VOICE_1_ARREST_2,
|
||||||
@@ -703,6 +704,9 @@ enum eSfxSample
|
|||||||
SFX_POLICE_HELI_27,
|
SFX_POLICE_HELI_27,
|
||||||
SFX_POLICE_HELI_28,
|
SFX_POLICE_HELI_28,
|
||||||
SFX_POLICE_HELI_29,
|
SFX_POLICE_HELI_29,
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SFX_MISSION_CAT1,
|
||||||
|
#endif
|
||||||
SFX_CHUNKY_DEATH,
|
SFX_CHUNKY_DEATH,
|
||||||
SFX_BLACK_DOCKER_VOICE_1_DRIVER_ABUSE_1,
|
SFX_BLACK_DOCKER_VOICE_1_DRIVER_ABUSE_1,
|
||||||
SFX_BLACK_DOCKER_VOICE_1_DRIVER_ABUSE_2,
|
SFX_BLACK_DOCKER_VOICE_1_DRIVER_ABUSE_2,
|
||||||
@@ -761,6 +765,9 @@ enum eSfxSample
|
|||||||
SFX_ARMY_VOICE_2_CHASE_13,
|
SFX_ARMY_VOICE_2_CHASE_13,
|
||||||
SFX_ARMY_VOICE_2_CHASE_14,
|
SFX_ARMY_VOICE_2_CHASE_14,
|
||||||
SFX_ARMY_VOICE_2_CHASE_15,
|
SFX_ARMY_VOICE_2_CHASE_15,
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SFX_PAGER,
|
||||||
|
#endif
|
||||||
SFX_CLAUDE_LOW_DAMAGE_GRUNT_1,
|
SFX_CLAUDE_LOW_DAMAGE_GRUNT_1,
|
||||||
SFX_CLAUDE_LOW_DAMAGE_GRUNT_2,
|
SFX_CLAUDE_LOW_DAMAGE_GRUNT_2,
|
||||||
SFX_CLAUDE_LOW_DAMAGE_GRUNT_3,
|
SFX_CLAUDE_LOW_DAMAGE_GRUNT_3,
|
||||||
@@ -3140,14 +3147,127 @@ enum eSfxSample
|
|||||||
SFX_AMMU_D,
|
SFX_AMMU_D,
|
||||||
SFX_AMMU_E,
|
SFX_AMMU_E,
|
||||||
SFX_AMMU_F,
|
SFX_AMMU_F,
|
||||||
|
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SFX_MISSION_LIB_A1,
|
||||||
|
SFX_MISSION_LIB_A2,
|
||||||
|
SFX_MISSION_LIB_A,
|
||||||
|
SFX_MISSION_LIB_B,
|
||||||
|
SFX_MISSION_LIB_C,
|
||||||
|
SFX_MISSION_LIB_D,
|
||||||
|
SFX_MISSION_L2_A,
|
||||||
|
SFX_MISSION_J4T_1,
|
||||||
|
SFX_MISSION_J4T_2,
|
||||||
|
SFX_MISSION_J4T_3,
|
||||||
|
SFX_MISSION_J4T_4,
|
||||||
|
SFX_MISSION_J4_A,
|
||||||
|
SFX_MISSION_J4_B,
|
||||||
|
SFX_MISSION_J4_C,
|
||||||
|
SFX_MISSION_J4_D,
|
||||||
|
SFX_MISSION_J4_E,
|
||||||
|
SFX_MISSION_J4_F,
|
||||||
|
SFX_MISSION_J6_1,
|
||||||
|
SFX_MISSION_J6_A,
|
||||||
|
SFX_MISSION_J6_B,
|
||||||
|
SFX_MISSION_J6_C,
|
||||||
|
SFX_MISSION_J6_D,
|
||||||
|
SFX_MISSION_T4_A,
|
||||||
|
SFX_MISSION_S1_A,
|
||||||
|
SFX_MISSION_S1_A1,
|
||||||
|
SFX_MISSION_S1_B,
|
||||||
|
SFX_MISSION_S1_C,
|
||||||
|
SFX_MISSION_S1_C1,
|
||||||
|
SFX_MISSION_S1_D,
|
||||||
|
SFX_MISSION_S1_E,
|
||||||
|
SFX_MISSION_S1_F,
|
||||||
|
SFX_MISSION_S1_G,
|
||||||
|
SFX_MISSION_S1_H,
|
||||||
|
SFX_MISSION_S1_I,
|
||||||
|
SFX_MISSION_S1_J,
|
||||||
|
SFX_MISSION_S1_K,
|
||||||
|
SFX_MISSION_S1_L,
|
||||||
|
SFX_MISSION_S3_A,
|
||||||
|
SFX_MISSION_S3_B,
|
||||||
|
SFX_MISSION_EL3_A,
|
||||||
|
SFX_MISSION_MF1_A,
|
||||||
|
SFX_MISSION_MF2_A,
|
||||||
|
SFX_MISSION_MF3_A,
|
||||||
|
SFX_MISSION_MF3_B,
|
||||||
|
SFX_MISSION_MF3_B1,
|
||||||
|
SFX_MISSION_MF3_C,
|
||||||
|
SFX_MISSION_MF4_A,
|
||||||
|
SFX_MISSION_MF4_B,
|
||||||
|
SFX_MISSION_MF4_C,
|
||||||
|
SFX_MISSION_A1_A,
|
||||||
|
SFX_MISSION_A3_A,
|
||||||
|
SFX_MISSION_A5_A,
|
||||||
|
SFX_MISSION_A4_A,
|
||||||
|
SFX_MISSION_A4_B,
|
||||||
|
SFX_MISSION_A4_C,
|
||||||
|
SFX_MISSION_A4_D,
|
||||||
|
SFX_MISSION_K1_A,
|
||||||
|
SFX_MISSION_K3_A,
|
||||||
|
SFX_MISSION_R1_A,
|
||||||
|
SFX_MISSION_R2_A,
|
||||||
|
SFX_MISSION_R2_B,
|
||||||
|
SFX_MISSION_R2_C,
|
||||||
|
SFX_MISSION_R2_D,
|
||||||
|
SFX_MISSION_R2_E,
|
||||||
|
SFX_MISSION_R2_F,
|
||||||
|
SFX_MISSION_R2_G,
|
||||||
|
SFX_MISSION_R2_H,
|
||||||
|
SFX_MISSION_R5_A,
|
||||||
|
SFX_MISSION_R6_A,
|
||||||
|
SFX_MISSION_R6_A1,
|
||||||
|
SFX_MISSION_R6_B,
|
||||||
|
SFX_MISSION_LO2_A,
|
||||||
|
SFX_MISSION_LO6_A,
|
||||||
|
SFX_MISSION_YD2_A,
|
||||||
|
SFX_MISSION_YD2_B,
|
||||||
|
SFX_MISSION_YD2_C,
|
||||||
|
SFX_MISSION_YD2_C1,
|
||||||
|
SFX_MISSION_YD2_D,
|
||||||
|
SFX_MISSION_YD2_E,
|
||||||
|
SFX_MISSION_YD2_F,
|
||||||
|
SFX_MISSION_YD2_G,
|
||||||
|
SFX_MISSION_YD2_H,
|
||||||
|
SFX_MISSION_YD2_ASS,
|
||||||
|
SFX_MISSION_YD2_OK,
|
||||||
|
SFX_MISSION_H5_A,
|
||||||
|
SFX_MISSION_H5_B,
|
||||||
|
SFX_MISSION_H5_C,
|
||||||
|
SFX_MISSION_DOOR_1,
|
||||||
|
SFX_MISSION_DOOR_2,
|
||||||
|
SFX_MISSION_DOOR_3,
|
||||||
|
SFX_MISSION_DOOR_4,
|
||||||
|
SFX_MISSION_DOOR_5,
|
||||||
|
SFX_MISSION_DOOR_6,
|
||||||
|
SFX_MISSION_T3_A,
|
||||||
|
SFX_MISSION_T3_B,
|
||||||
|
SFX_MISSION_T3_C,
|
||||||
|
SFX_MISSION_K1_B,
|
||||||
|
SFX_MISSION_AMMU_A,
|
||||||
|
SFX_MISSION_AMMU_B,
|
||||||
|
SFX_MISSION_AMMU_C,
|
||||||
|
#endif
|
||||||
TOTAL_AUDIO_SAMPLES,
|
TOTAL_AUDIO_SAMPLES,
|
||||||
NO_SAMPLE,
|
NO_SAMPLE,
|
||||||
|
|
||||||
// shorthands
|
// shorthands
|
||||||
SAMPLEBANK_START = SFX_CAR_HORN_JEEP,
|
SAMPLEBANK_START = SFX_CAR_HORN_JEEP,
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SAMPLEBANK_END = SFX_INFO,
|
||||||
|
SAMPLEBANK_MAX = SFX_INFO + 1,
|
||||||
|
#else
|
||||||
SAMPLEBANK_END = SFX_PAGER,
|
SAMPLEBANK_END = SFX_PAGER,
|
||||||
SAMPLEBANK_MAX = SFX_PAGER + 1,
|
SAMPLEBANK_MAX = SFX_PAGER + 1,
|
||||||
|
#endif
|
||||||
SAMPLEBANK_PED_START = SFX_COP_VOICE_1_ARREST_1,
|
SAMPLEBANK_PED_START = SFX_COP_VOICE_1_ARREST_1,
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SAMPLEBANK_PED_END = SFX_MISSION_AMMU_C,
|
||||||
|
SAMPLEBANK_PED_MAX = SFX_MISSION_AMMU_C + 1,
|
||||||
|
#else
|
||||||
SAMPLEBANK_PED_END = SFX_AMMU_F,
|
SAMPLEBANK_PED_END = SFX_AMMU_F,
|
||||||
SAMPLEBANK_PED_MAX = SFX_AMMU_F + 1,
|
SAMPLEBANK_PED_MAX = SFX_AMMU_F + 1,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "AudioScriptObject.h"
|
#include "AudioScriptObject.h"
|
||||||
#include "Pools.h"
|
#include "Pools.h"
|
||||||
#include "DMAudio.h"
|
#include "DMAudio.h"
|
||||||
|
#include "SaveBuf.h"
|
||||||
|
|
||||||
cAudioScriptObject::cAudioScriptObject()
|
cAudioScriptObject::cAudioScriptObject()
|
||||||
{
|
{
|
||||||
@@ -23,25 +24,25 @@ cAudioScriptObject::Reset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
cAudioScriptObject::operator new(size_t sz)
|
cAudioScriptObject::operator new(size_t sz) throw()
|
||||||
{
|
{
|
||||||
return CPools::GetAudioScriptObjectPool()->New();
|
return CPools::GetAudioScriptObjectPool()->New();
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
cAudioScriptObject::operator new(size_t sz, int handle)
|
cAudioScriptObject::operator new(size_t sz, int handle) throw()
|
||||||
{
|
{
|
||||||
return CPools::GetAudioScriptObjectPool()->New(handle);
|
return CPools::GetAudioScriptObjectPool()->New(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioScriptObject::operator delete(void *p, size_t sz)
|
cAudioScriptObject::operator delete(void *p, size_t sz) throw()
|
||||||
{
|
{
|
||||||
CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p);
|
CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioScriptObject::operator delete(void *p, int handle)
|
cAudioScriptObject::operator delete(void *p, int handle) throw()
|
||||||
{
|
{
|
||||||
CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p);
|
CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p);
|
||||||
}
|
}
|
||||||
@@ -53,12 +54,14 @@ cAudioScriptObject::LoadAllAudioScriptObjects(uint8 *buf, uint32 size)
|
|||||||
|
|
||||||
CheckSaveHeader(buf, 'A', 'U', 'D', '\0', size - SAVE_HEADER_SIZE);
|
CheckSaveHeader(buf, 'A', 'U', 'D', '\0', size - SAVE_HEADER_SIZE);
|
||||||
|
|
||||||
int32 pool_size = ReadSaveBuf<int32>(buf);
|
int32 pool_size;
|
||||||
|
ReadSaveBuf(&pool_size, buf);
|
||||||
for (int32 i = 0; i < pool_size; i++) {
|
for (int32 i = 0; i < pool_size; i++) {
|
||||||
int handle = ReadSaveBuf<int32>(buf);
|
int32 handle;
|
||||||
|
ReadSaveBuf(&handle, buf);
|
||||||
cAudioScriptObject *p = new(handle) cAudioScriptObject;
|
cAudioScriptObject *p = new(handle) cAudioScriptObject;
|
||||||
assert(p != nil);
|
assert(p != nil);
|
||||||
*p = ReadSaveBuf<cAudioScriptObject>(buf);
|
ReadSaveBuf(p, buf);
|
||||||
p->AudioEntity = DMAudio.CreateLoopingScriptObject(p);
|
p->AudioEntity = DMAudio.CreateLoopingScriptObject(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ public:
|
|||||||
|
|
||||||
void Reset(); /// ok
|
void Reset(); /// ok
|
||||||
|
|
||||||
static void* operator new(size_t);
|
static void* operator new(size_t) throw();
|
||||||
static void* operator new(size_t, int);
|
static void* operator new(size_t, int) throw();
|
||||||
static void operator delete(void*, size_t);
|
static void operator delete(void*, size_t) throw();
|
||||||
static void operator delete(void*, int);
|
static void operator delete(void*, int) throw();
|
||||||
|
|
||||||
static void LoadAllAudioScriptObjects(uint8 *buf, uint32 size);
|
static void LoadAllAudioScriptObjects(uint8 *buf, uint32 size);
|
||||||
static void SaveAllAudioScriptObjects(uint8 *buf, uint32 *size);
|
static void SaveAllAudioScriptObjects(uint8 *buf, uint32 *size);
|
||||||
|
|||||||
@@ -38,8 +38,14 @@ cDMAudio::DestroyEntity(int32 audioEntity)
|
|||||||
AudioManager.DestroyEntity(audioEntity);
|
AudioManager.DestroyEntity(audioEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool8
|
||||||
|
cDMAudio::GetEntityStatus(int32 audioEntity)
|
||||||
|
{
|
||||||
|
return AudioManager.GetEntityStatus(audioEntity);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cDMAudio::SetEntityStatus(int32 audioEntity, uint8 status)
|
cDMAudio::SetEntityStatus(int32 audioEntity, bool8 status)
|
||||||
{
|
{
|
||||||
AudioManager.SetEntityStatus(audioEntity, status);
|
AudioManager.SetEntityStatus(audioEntity, status);
|
||||||
}
|
}
|
||||||
@@ -57,7 +63,7 @@ cDMAudio::DestroyAllGameCreatedEntities(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cDMAudio::SetMonoMode(uint8 mono)
|
cDMAudio::SetMonoMode(bool8 mono)
|
||||||
{
|
{
|
||||||
AudioManager.SetMonoMode(mono);
|
AudioManager.SetMonoMode(mono);
|
||||||
}
|
}
|
||||||
@@ -128,7 +134,7 @@ cDMAudio::SetSpeakerConfig(int32 config)
|
|||||||
AudioManager.SetSpeakerConfig(config);
|
AudioManager.SetSpeakerConfig(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cDMAudio::IsMP3RadioChannelAvailable(void)
|
cDMAudio::IsMP3RadioChannelAvailable(void)
|
||||||
{
|
{
|
||||||
return AudioManager.IsMP3RadioChannelAvailable();
|
return AudioManager.IsMP3RadioChannelAvailable();
|
||||||
@@ -147,12 +153,14 @@ cDMAudio::ReacquireDigitalHandle(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cDMAudio::SetDynamicAcousticModelingStatus(uint8 status)
|
cDMAudio::SetDynamicAcousticModelingStatus(bool8 status)
|
||||||
{
|
{
|
||||||
|
#ifdef AUDIO_REFLECTIONS
|
||||||
AudioManager.SetDynamicAcousticModelingStatus(status);
|
AudioManager.SetDynamicAcousticModelingStatus(status);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cDMAudio::CheckForAnAudioFileOnCD(void)
|
cDMAudio::CheckForAnAudioFileOnCD(void)
|
||||||
{
|
{
|
||||||
return AudioManager.CheckForAnAudioFileOnCD();
|
return AudioManager.CheckForAnAudioFileOnCD();
|
||||||
@@ -164,12 +172,18 @@ cDMAudio::GetCDAudioDriveLetter(void)
|
|||||||
return AudioManager.GetCDAudioDriveLetter();
|
return AudioManager.GetCDAudioDriveLetter();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cDMAudio::IsAudioInitialised(void)
|
cDMAudio::IsAudioInitialised(void)
|
||||||
{
|
{
|
||||||
return AudioManager.IsAudioInitialised();
|
return AudioManager.IsAudioInitialised();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cDMAudio::ResetPoliceRadio()
|
||||||
|
{
|
||||||
|
AudioManager.ResetPoliceRadio();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cDMAudio::ReportCrime(eCrimeType crime, const CVector &pos)
|
cDMAudio::ReportCrime(eCrimeType crime, const CVector &pos)
|
||||||
{
|
{
|
||||||
@@ -182,7 +196,7 @@ cDMAudio::CreateLoopingScriptObject(cAudioScriptObject *scriptObject)
|
|||||||
int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, scriptObject);
|
int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, scriptObject);
|
||||||
|
|
||||||
if ( AEHANDLE_IS_OK(audioEntity) )
|
if ( AEHANDLE_IS_OK(audioEntity) )
|
||||||
AudioManager.SetEntityStatus(audioEntity, true);
|
AudioManager.SetEntityStatus(audioEntity, TRUE);
|
||||||
|
|
||||||
return audioEntity;
|
return audioEntity;
|
||||||
}
|
}
|
||||||
@@ -200,7 +214,7 @@ cDMAudio::CreateOneShotScriptObject(cAudioScriptObject *scriptObject)
|
|||||||
|
|
||||||
if ( AEHANDLE_IS_OK(audioEntity) )
|
if ( AEHANDLE_IS_OK(audioEntity) )
|
||||||
{
|
{
|
||||||
AudioManager.SetEntityStatus(audioEntity, true);
|
AudioManager.SetEntityStatus(audioEntity, TRUE);
|
||||||
AudioManager.PlayOneShot(audioEntity, scriptObject->AudioId, 0.0f);
|
AudioManager.PlayOneShot(audioEntity, scriptObject->AudioId, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -230,7 +244,7 @@ cDMAudio::PlayRadioAnnouncement(uint8 announcement)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cDMAudio::PlayFrontEndTrack(uint8 track, uint8 frontendFlag)
|
cDMAudio::PlayFrontEndTrack(uint8 track, bool8 frontendFlag)
|
||||||
{
|
{
|
||||||
MusicManager.PlayFrontEndTrack(track, frontendFlag);
|
MusicManager.PlayFrontEndTrack(track, frontendFlag);
|
||||||
}
|
}
|
||||||
@@ -295,7 +309,7 @@ cDMAudio::PlayLoadedMissionAudio(void)
|
|||||||
AudioManager.PlayLoadedMissionAudio();
|
AudioManager.PlayLoadedMissionAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cDMAudio::IsMissionAudioSampleFinished(void)
|
cDMAudio::IsMissionAudioSampleFinished(void)
|
||||||
{
|
{
|
||||||
return AudioManager.IsMissionAudioSampleFinished();
|
return AudioManager.IsMissionAudioSampleFinished();
|
||||||
|
|||||||
@@ -22,11 +22,12 @@ public:
|
|||||||
|
|
||||||
int32 CreateEntity(eAudioType type, void *UID);
|
int32 CreateEntity(eAudioType type, void *UID);
|
||||||
void DestroyEntity(int32 audioEntity);
|
void DestroyEntity(int32 audioEntity);
|
||||||
void SetEntityStatus(int32 audioEntity, uint8 status);
|
bool8 GetEntityStatus(int32 audioEntity);
|
||||||
|
void SetEntityStatus(int32 audioEntity, bool8 status);
|
||||||
void PlayOneShot(int32 audioEntity, uint16 oneShot, float volume);
|
void PlayOneShot(int32 audioEntity, uint16 oneShot, float volume);
|
||||||
void DestroyAllGameCreatedEntities(void);
|
void DestroyAllGameCreatedEntities(void);
|
||||||
|
|
||||||
void SetMonoMode(uint8 mono);
|
void SetMonoMode(bool8 mono);
|
||||||
void SetEffectsMasterVolume(uint8 volume);
|
void SetEffectsMasterVolume(uint8 volume);
|
||||||
void SetMusicMasterVolume(uint8 volume);
|
void SetMusicMasterVolume(uint8 volume);
|
||||||
void SetEffectsFadeVol(uint8 volume);
|
void SetEffectsFadeVol(uint8 volume);
|
||||||
@@ -40,18 +41,19 @@ public:
|
|||||||
|
|
||||||
void SetSpeakerConfig(int32 config);
|
void SetSpeakerConfig(int32 config);
|
||||||
|
|
||||||
bool IsMP3RadioChannelAvailable(void);
|
bool8 IsMP3RadioChannelAvailable(void);
|
||||||
|
|
||||||
void ReleaseDigitalHandle(void);
|
void ReleaseDigitalHandle(void);
|
||||||
void ReacquireDigitalHandle(void);
|
void ReacquireDigitalHandle(void);
|
||||||
|
|
||||||
void SetDynamicAcousticModelingStatus(uint8 status);
|
void SetDynamicAcousticModelingStatus(bool8 status);
|
||||||
|
|
||||||
bool CheckForAnAudioFileOnCD(void);
|
bool8 CheckForAnAudioFileOnCD(void);
|
||||||
|
|
||||||
char GetCDAudioDriveLetter(void);
|
char GetCDAudioDriveLetter(void);
|
||||||
bool IsAudioInitialised(void);
|
bool8 IsAudioInitialised(void);
|
||||||
|
|
||||||
|
void ResetPoliceRadio();
|
||||||
void ReportCrime(eCrimeType crime, CVector const &pos);
|
void ReportCrime(eCrimeType crime, CVector const &pos);
|
||||||
|
|
||||||
int32 CreateLoopingScriptObject(cAudioScriptObject *scriptObject);
|
int32 CreateLoopingScriptObject(cAudioScriptObject *scriptObject);
|
||||||
@@ -64,7 +66,7 @@ public:
|
|||||||
|
|
||||||
void PlayFrontEndSound(uint16 frontend, uint32 volume);
|
void PlayFrontEndSound(uint16 frontend, uint32 volume);
|
||||||
void PlayRadioAnnouncement(uint8 announcement);
|
void PlayRadioAnnouncement(uint8 announcement);
|
||||||
void PlayFrontEndTrack(uint8 track, uint8 frontendFlag);
|
void PlayFrontEndTrack(uint8 track, bool8 frontendFlag);
|
||||||
void StopFrontEndTrack(void);
|
void StopFrontEndTrack(void);
|
||||||
|
|
||||||
void ResetTimers(uint32 time);
|
void ResetTimers(uint32 time);
|
||||||
@@ -79,7 +81,7 @@ public:
|
|||||||
uint8 GetMissionAudioLoadingStatus(void);
|
uint8 GetMissionAudioLoadingStatus(void);
|
||||||
void SetMissionAudioLocation(float x, float y, float z);
|
void SetMissionAudioLocation(float x, float y, float z);
|
||||||
void PlayLoadedMissionAudio(void);
|
void PlayLoadedMissionAudio(void);
|
||||||
bool IsMissionAudioSampleFinished(void);
|
bool8 IsMissionAudioSampleFinished(void);
|
||||||
void ClearMissionAudio(void);
|
void ClearMissionAudio(void);
|
||||||
|
|
||||||
uint8 GetRadioInCar(void);
|
uint8 GetRadioInCar(void);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -15,48 +15,48 @@ class CVehicle;
|
|||||||
class cMusicManager
|
class cMusicManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool m_bIsInitialised;
|
bool8 m_bIsInitialised;
|
||||||
bool m_bDisabled;
|
bool8 m_bDisabled;
|
||||||
uint8 m_nMusicMode;
|
uint8 m_nMusicMode;
|
||||||
uint8 m_nCurrentStreamedSound;
|
uint8 m_nNextTrack;
|
||||||
uint8 m_nPreviousStreamedSound;
|
uint8 m_nPlayingTrack;
|
||||||
bool m_bFrontendTrackFinished;
|
bool8 m_bFrontendTrackFinished;
|
||||||
bool m_bPlayInFrontend;
|
bool8 m_bPlayInFrontend;
|
||||||
bool m_bSetNextStation;
|
bool8 m_bSetNextStation;
|
||||||
uint8 m_nAnnouncement;
|
uint8 m_nAnnouncement;
|
||||||
bool m_bPreviousPlayerInCar;
|
bool8 m_bPreviousPlayerInCar;
|
||||||
bool m_bPlayerInCar;
|
bool8 m_bPlayerInCar;
|
||||||
bool m_bAnnouncementInProgress;
|
bool8 m_bAnnouncementInProgress;
|
||||||
tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS];
|
tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS];
|
||||||
bool m_bResetTimers;
|
bool8 m_bResetTimers;
|
||||||
uint32 m_nResetTime;
|
uint32 m_nResetTime;
|
||||||
uint32 m_nLastTrackServiceTime;
|
uint32 m_nLastTrackServiceTime;
|
||||||
uint32 m_nTimer;
|
uint32 m_nTimer;
|
||||||
bool m_bDoTrackService;
|
bool8 m_bDoTrackService;
|
||||||
bool m_bIgnoreTimeDelay;
|
bool8 m_bIgnoreTimeDelay;
|
||||||
bool m_bDontServiceAmbienceTrack;
|
bool8 m_bVerifyAmbienceTrackStartedToPlay;
|
||||||
bool m_bRadioSetByScript;
|
bool8 m_bRadioSetByScript;
|
||||||
uint8 m_nRadioStation;
|
uint8 m_nRadioStationScript;
|
||||||
int32 m_nRadioPosition;
|
int32 m_nRadioPosition;
|
||||||
uint8 m_nRadioInCar;
|
uint8 m_nRadioInCar;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cMusicManager();
|
cMusicManager();
|
||||||
bool IsInitialised() { return m_bIsInitialised; }
|
bool8 IsInitialised() { return m_bIsInitialised; }
|
||||||
uint32 GetMusicMode() { return m_nMusicMode; }
|
uint32 GetMusicMode() { return m_nMusicMode; }
|
||||||
uint8 GetCurrentTrack() { return m_nCurrentStreamedSound; }
|
uint8 GetNextTrack() { return m_nNextTrack; }
|
||||||
|
|
||||||
bool Initialise();
|
bool8 Initialise();
|
||||||
void Terminate();
|
void Terminate();
|
||||||
|
|
||||||
void ChangeMusicMode(uint8 mode);
|
void ChangeMusicMode(uint8 mode);
|
||||||
void StopFrontEndTrack();
|
void StopFrontEndTrack();
|
||||||
|
|
||||||
bool PlayerInCar();
|
bool8 PlayerInCar();
|
||||||
void DisplayRadioStationName();
|
void DisplayRadioStationName();
|
||||||
|
|
||||||
void PlayAnnouncement(uint8);
|
void PlayAnnouncement(uint8);
|
||||||
void PlayFrontEndTrack(uint8, uint8);
|
void PlayFrontEndTrack(uint8, bool8);
|
||||||
void PreloadCutSceneMusic(uint8);
|
void PreloadCutSceneMusic(uint8);
|
||||||
void PlayPreloadedCutSceneMusic(void);
|
void PlayPreloadedCutSceneMusic(void);
|
||||||
void StopCutSceneMusic(void);
|
void StopCutSceneMusic(void);
|
||||||
@@ -66,22 +66,22 @@ public:
|
|||||||
|
|
||||||
void ResetMusicAfterReload();
|
void ResetMusicAfterReload();
|
||||||
|
|
||||||
void ResetTimers(int32);
|
void ResetTimers(uint32);
|
||||||
void Service();
|
void Service();
|
||||||
void ServiceFrontEndMode();
|
void ServiceFrontEndMode();
|
||||||
void ServiceGameMode();
|
void ServiceGameMode();
|
||||||
void ServiceAmbience();
|
void ServiceAmbience();
|
||||||
void ServiceTrack();
|
void ServiceTrack();
|
||||||
|
|
||||||
bool UsesPoliceRadio(CVehicle *veh);
|
bool8 UsesPoliceRadio(CVehicle *veh);
|
||||||
uint32 GetTrackStartPos(uint8);
|
uint32 GetTrackStartPos(uint8);
|
||||||
|
|
||||||
void ComputeAmbienceVol(uint8 reset, uint8& outVolume);
|
void ComputeAmbienceVol(bool8 reset, uint8& outVolume);
|
||||||
bool ServiceAnnouncement();
|
bool8 ServiceAnnouncement();
|
||||||
|
|
||||||
uint8 GetCarTuning();
|
uint8 GetCarTuning();
|
||||||
uint8 GetNextCarTuning();
|
uint8 GetNextCarTuning();
|
||||||
bool ChangeRadioChannel();
|
bool8 ChangeRadioChannel();
|
||||||
};
|
};
|
||||||
|
|
||||||
VALIDATE_SIZE(cMusicManager, 0x95C);
|
VALIDATE_SIZE(cMusicManager, 0x95C);
|
||||||
|
|||||||
@@ -7,15 +7,13 @@
|
|||||||
#include "AudioSamples.h"
|
#include "AudioSamples.h"
|
||||||
#include "MusicManager.h"
|
#include "MusicManager.h"
|
||||||
#include "PlayerPed.h"
|
#include "PlayerPed.h"
|
||||||
#include "PoliceRadio.h"
|
#include "PolRadio.h"
|
||||||
#include "Replay.h"
|
#include "Replay.h"
|
||||||
#include "Vehicle.h"
|
#include "Vehicle.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "Zones.h"
|
#include "Zones.h"
|
||||||
#include "sampman.h"
|
#include "sampman.h"
|
||||||
|
#include "Wanted.h"
|
||||||
const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples);
|
|
||||||
const int policeChannel = channels + 1;
|
|
||||||
|
|
||||||
struct tPoliceRadioZone {
|
struct tPoliceRadioZone {
|
||||||
char m_aName[8];
|
char m_aName[8];
|
||||||
@@ -27,9 +25,9 @@ tPoliceRadioZone ZoneSfx[NUMAUDIOZONES];
|
|||||||
char SubZo2Label[8];
|
char SubZo2Label[8];
|
||||||
char SubZo3Label[8];
|
char SubZo3Label[8];
|
||||||
|
|
||||||
int32 g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
uint32 g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
||||||
int8 g_nMissionAudioPlayingStatus = 2;
|
int8 g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
|
||||||
uint8 gSpecialSuspectLastSeenReport;
|
bool8 gSpecialSuspectLastSeenReport;
|
||||||
uint32 gMinTimeToNextReport[NUM_CRIME_TYPES];
|
uint32 gMinTimeToNextReport[NUM_CRIME_TYPES];
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -87,14 +85,12 @@ cAudioManager::InitialisePoliceRadioZones()
|
|||||||
void
|
void
|
||||||
cAudioManager::InitialisePoliceRadio()
|
cAudioManager::InitialisePoliceRadio()
|
||||||
{
|
{
|
||||||
m_sPoliceRadioQueue.policeChannelTimer = 0;
|
m_sPoliceRadioQueue.Reset();
|
||||||
m_sPoliceRadioQueue.policeChannelTimerSeconds = 0;
|
for (int32 i = 0; i < ARRAY_SIZE(m_aCrimes); i++)
|
||||||
m_sPoliceRadioQueue.policeChannelCounterSeconds = 0;
|
m_aCrimes[i].type = CRIME_NONE;
|
||||||
for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++)
|
|
||||||
m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
|
|
||||||
|
|
||||||
SampleManager.SetChannelReverbFlag(policeChannel, false);
|
SampleManager.SetChannelReverbFlag(CHANNEL_POLICE_RADIO, FALSE);
|
||||||
gSpecialSuspectLastSeenReport = false;
|
gSpecialSuspectLastSeenReport = FALSE;
|
||||||
for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
|
for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
|
||||||
gMinTimeToNextReport[i] = m_FrameCounter;
|
gMinTimeToNextReport[i] = m_FrameCounter;
|
||||||
}
|
}
|
||||||
@@ -103,22 +99,22 @@ void
|
|||||||
cAudioManager::ResetPoliceRadio()
|
cAudioManager::ResetPoliceRadio()
|
||||||
{
|
{
|
||||||
if (!m_bIsInitialised) return;
|
if (!m_bIsInitialised) return;
|
||||||
if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel);
|
if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO);
|
||||||
InitialisePoliceRadio();
|
InitialisePoliceRadio();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) const
|
cAudioManager::SetMissionScriptPoliceAudio(uint32 sfx)
|
||||||
{
|
{
|
||||||
if (!m_bIsInitialised) return;
|
if (!m_bIsInitialised) return;
|
||||||
if (g_nMissionAudioPlayingStatus != 1) {
|
if (g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) {
|
||||||
g_nMissionAudioPlayingStatus = 0;
|
g_nMissionAudioPlayingStatus = PLAY_STATUS_STOPPED;
|
||||||
g_nMissionAudioSfx = sfx;
|
g_nMissionAudioSfx = sfx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int8
|
int8
|
||||||
cAudioManager::GetMissionScriptPoliceAudioPlayingStatus() const
|
cAudioManager::GetMissionScriptPoliceAudioPlayingStatus()
|
||||||
{
|
{
|
||||||
return g_nMissionAudioPlayingStatus;
|
return g_nMissionAudioPlayingStatus;
|
||||||
}
|
}
|
||||||
@@ -130,19 +126,18 @@ cAudioManager::DoPoliceRadioCrackle()
|
|||||||
m_sQueueSample.m_nCounter = 0;
|
m_sQueueSample.m_nCounter = 0;
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_POLICE_RADIO_CRACKLE;
|
m_sQueueSample.m_nSampleIndex = SFX_POLICE_RADIO_CRACKLE;
|
||||||
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
||||||
m_sQueueSample.m_bIs2D = true;
|
m_sQueueSample.m_bIs2D = TRUE;
|
||||||
m_sQueueSample.m_nReleasingVolumeModificator = 10;
|
m_sQueueSample.m_nPriority = 10;
|
||||||
m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_POLICE_RADIO_CRACKLE);
|
m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_POLICE_RADIO_CRACKLE);
|
||||||
m_sQueueSample.m_nVolume = m_anRandomTable[2] % 20 + 15;
|
m_sQueueSample.m_nVolume = m_anRandomTable[2] % 20 + 15;
|
||||||
m_sQueueSample.m_nLoopCount = 0;
|
m_sQueueSample.m_nLoopCount = 0;
|
||||||
m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume;
|
SET_EMITTING_VOLUME(m_sQueueSample.m_nVolume);
|
||||||
m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_POLICE_RADIO_CRACKLE);
|
SET_LOOP_OFFSETS(SFX_POLICE_RADIO_CRACKLE)
|
||||||
m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_POLICE_RADIO_CRACKLE);
|
m_sQueueSample.m_bStatic = FALSE;
|
||||||
m_sQueueSample.m_bReleasingSoundFlag = false;
|
m_sQueueSample.m_bReverb = FALSE;
|
||||||
m_sQueueSample.m_bReverbFlag = false;
|
m_sQueueSample.m_nPan = 63;
|
||||||
m_sQueueSample.m_nOffset = 63;
|
m_sQueueSample.m_nFramesToPlay = 3;
|
||||||
m_sQueueSample.m_nReleasingVolumeDivider = 3;
|
SET_SOUND_REFLECTION(FALSE);
|
||||||
m_sQueueSample.m_bRequireReflection = false;
|
|
||||||
AddSampleToRequestedQueue();
|
AddSampleToRequestedQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,17 +149,21 @@ cAudioManager::ServicePoliceRadio()
|
|||||||
|
|
||||||
if(!m_bIsInitialised) return;
|
if(!m_bIsInitialised) return;
|
||||||
|
|
||||||
if(m_nUserPause == 0) {
|
if(!m_bIsPaused) {
|
||||||
bool crimeReport = SetupCrimeReport();
|
bool8 crimeReport = SetupCrimeReport();
|
||||||
#ifdef FIX_BUGS // Crash at 0x5fe6ef
|
#ifdef FIX_BUGS // Crash at 0x5fe6ef
|
||||||
if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
|
if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
wantedLevel = FindPlayerPed()->m_pWanted->m_nWantedLevel;
|
wantedLevel = FindPlayerPed()->m_pWanted->GetWantedLevel();
|
||||||
if(!crimeReport) {
|
if (!crimeReport) {
|
||||||
if(wantedLevel != 0) {
|
if (wantedLevel != 0) {
|
||||||
if(nLastSeen != 0) {
|
if (nLastSeen != 0) {
|
||||||
--nLastSeen;
|
#ifdef FIX_BUGS
|
||||||
|
nLastSeen -= CTimer::GetLogicalFramesPassed();
|
||||||
|
#else
|
||||||
|
nLastSeen--;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
nLastSeen = m_anRandomTable[1] % 1000 + 2000;
|
nLastSeen = m_anRandomTable[1] % 1000 + 2000;
|
||||||
SetupSuspectLastSeenReport();
|
SetupSuspectLastSeenReport();
|
||||||
@@ -178,104 +177,133 @@ cAudioManager::ServicePoliceRadio()
|
|||||||
void
|
void
|
||||||
cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
|
||||||
{
|
{
|
||||||
bool processed = false;
|
bool8 processed = FALSE;
|
||||||
uint32 sample;
|
uint32 sample;
|
||||||
int32 freq;
|
uint32 freq;
|
||||||
|
|
||||||
static int cWait = 0;
|
static int cWait = 0;
|
||||||
static bool bChannelOpen = false;
|
static bool8 bChannelOpen = FALSE;
|
||||||
static uint8 bMissionAudioPhysicalPlayingStatus = 0;
|
static uint8 bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_STOPPED;
|
||||||
static int32 PoliceChannelFreq = 5500;
|
static uint32 PoliceChannelFreq = 5500;
|
||||||
|
|
||||||
if (!m_bIsInitialised) return;
|
if (!m_bIsInitialised) return;
|
||||||
|
|
||||||
if (m_nUserPause != 0) {
|
if (m_bIsPaused) {
|
||||||
if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel);
|
#ifdef GTA_PS2
|
||||||
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && bMissionAudioPhysicalPlayingStatus == 1 &&
|
if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO))
|
||||||
SampleManager.IsStreamPlaying(1)) {
|
SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, 0);
|
||||||
SampleManager.PauseStream(1, 1);
|
#else
|
||||||
}
|
if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO);
|
||||||
|
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING &&
|
||||||
|
SampleManager.IsStreamPlaying(1))
|
||||||
|
SampleManager.PauseStream(TRUE, 1);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
if (m_nPreviousUserPause && g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES &&
|
#ifdef GTA_PS2
|
||||||
bMissionAudioPhysicalPlayingStatus == 1) {
|
if (m_bWasPaused)
|
||||||
SampleManager.PauseStream(0, 1);
|
SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, PoliceChannelFreq);
|
||||||
}
|
#else
|
||||||
if (m_sPoliceRadioQueue.policeChannelTimer == 0) bChannelOpen = false;
|
if (m_bWasPaused && g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES &&
|
||||||
|
bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING)
|
||||||
|
SampleManager.PauseStream(FALSE, 1);
|
||||||
|
#endif
|
||||||
|
if (m_sPoliceRadioQueue.m_nSamplesInQueue == 0) bChannelOpen = FALSE;
|
||||||
if (cWait) {
|
if (cWait) {
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
cWait -= CTimer::GetLogicalFramesPassed();
|
||||||
|
#else
|
||||||
--cWait;
|
--cWait;
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && !bChannelOpen) {
|
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && !bChannelOpen) {
|
||||||
if (g_nMissionAudioPlayingStatus) {
|
if (g_nMissionAudioPlayingStatus != PLAY_STATUS_STOPPED) {
|
||||||
if (g_nMissionAudioPlayingStatus == 1 && !bMissionAudioPhysicalPlayingStatus &&
|
if (g_nMissionAudioPlayingStatus == PLAY_STATUS_PLAYING && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_STOPPED &&
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
|
||||||
|
#else
|
||||||
SampleManager.IsStreamPlaying(1)) {
|
SampleManager.IsStreamPlaying(1)) {
|
||||||
bMissionAudioPhysicalPlayingStatus = 1;
|
#endif
|
||||||
|
bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_PLAYING;
|
||||||
}
|
}
|
||||||
if (bMissionAudioPhysicalPlayingStatus == 1) {
|
if (bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING) {
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
|
||||||
|
#else
|
||||||
if (SampleManager.IsStreamPlaying(1)) {
|
if (SampleManager.IsStreamPlaying(1)) {
|
||||||
|
#endif
|
||||||
DoPoliceRadioCrackle();
|
DoPoliceRadioCrackle();
|
||||||
} else {
|
} else {
|
||||||
bMissionAudioPhysicalPlayingStatus = 2;
|
bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_FINISHED;
|
||||||
g_nMissionAudioPlayingStatus = 2;
|
g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
|
||||||
g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
|
||||||
cWait = 30;
|
cWait = 30;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (!SampleManager.GetChannelUsedFlag(policeChannel)) {
|
} else if (!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, g_nMissionAudioSfx, SFX_BANK_PED_COMMENTS);
|
||||||
|
PoliceChannelFreq = SampleManager.GetSampleBaseFrequency(g_nMissionAudioSfx);
|
||||||
|
SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, PoliceChannelFreq);
|
||||||
|
SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, MAX_VOLUME);
|
||||||
|
SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63);
|
||||||
|
SampleManager.StartChannel(CHANNEL_POLICE_RADIO);
|
||||||
|
#else
|
||||||
SampleManager.PreloadStreamedFile(g_nMissionAudioSfx, 1);
|
SampleManager.PreloadStreamedFile(g_nMissionAudioSfx, 1);
|
||||||
SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 1);
|
SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, TRUE, 1);
|
||||||
SampleManager.StartPreloadedStreamedFile(1);
|
SampleManager.StartPreloadedStreamedFile(1);
|
||||||
g_nMissionAudioPlayingStatus = 1;
|
#endif
|
||||||
bMissionAudioPhysicalPlayingStatus = 0;
|
g_nMissionAudioPlayingStatus = PLAY_STATUS_PLAYING;
|
||||||
|
bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_STOPPED;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bChannelOpen) DoPoliceRadioCrackle();
|
if (bChannelOpen) DoPoliceRadioCrackle();
|
||||||
if ((g_nMissionAudioSfx == TOTAL_AUDIO_SAMPLES || g_nMissionAudioPlayingStatus != 1) &&
|
if ((g_nMissionAudioSfx == TOTAL_AUDIO_SAMPLES || g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) &&
|
||||||
!SampleManager.GetChannelUsedFlag(policeChannel) && m_sPoliceRadioQueue.policeChannelTimer) {
|
!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO) && m_sPoliceRadioQueue.m_nSamplesInQueue != 0) {
|
||||||
if (m_sPoliceRadioQueue.policeChannelTimer) {
|
sample = m_sPoliceRadioQueue.Remove();
|
||||||
sample = m_sPoliceRadioQueue.crimesSamples[m_sPoliceRadioQueue.policeChannelCounterSeconds];
|
|
||||||
m_sPoliceRadioQueue.policeChannelTimer--;
|
|
||||||
m_sPoliceRadioQueue.policeChannelCounterSeconds = (m_sPoliceRadioQueue.policeChannelCounterSeconds + 1) % 60;
|
|
||||||
} else {
|
|
||||||
sample = TOTAL_AUDIO_SAMPLES;
|
|
||||||
}
|
|
||||||
if (wantedLevel == 0) {
|
if (wantedLevel == 0) {
|
||||||
if (gSpecialSuspectLastSeenReport) {
|
if (gSpecialSuspectLastSeenReport) {
|
||||||
gSpecialSuspectLastSeenReport = 0;
|
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) && (sample <= SFX_POLICE_RADIO_MESSAGE_NOISE_3)) || sample == TOTAL_AUDIO_SAMPLES) {
|
||||||
bChannelOpen = false;
|
bChannelOpen = FALSE;
|
||||||
processed = true;
|
processed = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sample == TOTAL_AUDIO_SAMPLES) {
|
if (sample == TOTAL_AUDIO_SAMPLES) {
|
||||||
if (!processed) cWait = 30;
|
if (!processed) cWait = 30;
|
||||||
} else {
|
} else {
|
||||||
SampleManager.InitialiseChannel(policeChannel, sample, 0);
|
SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, sample, SFX_BANK_0);
|
||||||
switch (sample) {
|
switch (sample) {
|
||||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_1:
|
case SFX_POLICE_RADIO_MESSAGE_NOISE_1:
|
||||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_2:
|
case SFX_POLICE_RADIO_MESSAGE_NOISE_2:
|
||||||
case SFX_POLICE_RADIO_MESSAGE_NOISE_3:
|
case SFX_POLICE_RADIO_MESSAGE_NOISE_3:
|
||||||
freq = m_anRandomTable[4] % 2000 + 10025;
|
freq = m_anRandomTable[4] % 2000 + 10025;
|
||||||
bChannelOpen = bChannelOpen == false;
|
bChannelOpen = bChannelOpen == FALSE;
|
||||||
break;
|
break;
|
||||||
default: freq = SampleManager.GetSampleBaseFrequency(sample); break;
|
default: freq = SampleManager.GetSampleBaseFrequency(sample); break;
|
||||||
}
|
}
|
||||||
PoliceChannelFreq = freq;
|
PoliceChannelFreq = freq;
|
||||||
SampleManager.SetChannelFrequency(policeChannel, freq);
|
#ifdef USE_TIME_SCALE_FOR_AUDIO
|
||||||
SampleManager.SetChannelVolume(policeChannel, 100);
|
SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, freq * CTimer::GetTimeScale());
|
||||||
SampleManager.SetChannelPan(policeChannel, 63);
|
#else
|
||||||
SampleManager.SetChannelLoopCount(policeChannel, 1);
|
SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, freq);
|
||||||
SampleManager.SetChannelLoopPoints(policeChannel, 0, -1);
|
#endif
|
||||||
SampleManager.StartChannel(policeChannel);
|
SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, 100);
|
||||||
|
SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63);
|
||||||
|
SampleManager.SetChannelLoopCount(CHANNEL_POLICE_RADIO, 1);
|
||||||
|
#ifndef GTA_PS2
|
||||||
|
SampleManager.SetChannelLoopPoints(CHANNEL_POLICE_RADIO, 0, -1);
|
||||||
|
#endif
|
||||||
|
SampleManager.StartChannel(CHANNEL_POLICE_RADIO);
|
||||||
}
|
}
|
||||||
if (processed) ResetPoliceRadio();
|
if (processed) ResetPoliceRadio();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cAudioManager::SetupCrimeReport()
|
cAudioManager::SetupCrimeReport()
|
||||||
{
|
{
|
||||||
int16 audioZoneId;
|
int16 audioZoneId;
|
||||||
@@ -287,23 +315,23 @@ cAudioManager::SetupCrimeReport()
|
|||||||
float quarterX;
|
float quarterX;
|
||||||
float quarterY;
|
float quarterY;
|
||||||
int i;
|
int i;
|
||||||
int32 sampleIndex;
|
uint32 sampleIndex;
|
||||||
bool processed = false;
|
bool8 processed = FALSE;
|
||||||
|
|
||||||
if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return false;
|
if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return FALSE;
|
||||||
|
|
||||||
if (60 - m_sPoliceRadioQueue.policeChannelTimer <= 9) {
|
if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue <= 9) {
|
||||||
AgeCrimes();
|
AgeCrimes();
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
for (i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
|
||||||
if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE)
|
if (m_aCrimes[i].type != CRIME_NONE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) return false;
|
if (i == ARRAY_SIZE(m_aCrimes)) return FALSE;
|
||||||
audioZoneId = CTheZones::FindAudioZone(&m_sPoliceRadioQueue.crimes[i].position);
|
audioZoneId = CTheZones::FindAudioZone(&m_aCrimes[i].position);
|
||||||
if (audioZoneId >= 0 && audioZoneId < NUMAUDIOZONES) {
|
if (audioZoneId >= 0 && audioZoneId < NUMAUDIOZONES) {
|
||||||
zone = CTheZones::GetAudioZone(audioZoneId);
|
zone = CTheZones::GetAudioZone(audioZoneId);
|
||||||
for (int j = 0; j < NUMAUDIOZONES; j++) {
|
for (int j = 0; j < NUMAUDIOZONES; j++) {
|
||||||
@@ -312,14 +340,14 @@ cAudioManager::SetupCrimeReport()
|
|||||||
m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||||
m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_WEVE_GOT);
|
m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_WEVE_GOT);
|
||||||
m_sPoliceRadioQueue.Add(m_anRandomTable[1] % 2 + SFX_A_10_1);
|
m_sPoliceRadioQueue.Add(m_anRandomTable[1] % 2 + SFX_A_10_1);
|
||||||
switch (m_sPoliceRadioQueue.crimes[i].type) {
|
switch (m_aCrimes[i].type) {
|
||||||
case CRIME_PED_BURNED: m_sPoliceRadioQueue.crimes[i].type = CRIME_HIT_PED; break;
|
case CRIME_PED_BURNED: m_aCrimes[i].type = CRIME_HIT_PED; break;
|
||||||
case CRIME_COP_BURNED: m_sPoliceRadioQueue.crimes[i].type = CRIME_HIT_COP; break;
|
case CRIME_COP_BURNED: m_aCrimes[i].type = CRIME_HIT_COP; break;
|
||||||
case CRIME_VEHICLE_BURNED: m_sPoliceRadioQueue.crimes[i].type = CRIME_STEAL_CAR; break;
|
case CRIME_VEHICLE_BURNED: m_aCrimes[i].type = CRIME_STEAL_CAR; break;
|
||||||
case CRIME_DESTROYED_CESSNA: m_sPoliceRadioQueue.crimes[i].type = CRIME_SHOOT_HELI; break;
|
case CRIME_DESTROYED_CESSNA: m_aCrimes[i].type = CRIME_SHOOT_HELI; break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
m_sPoliceRadioQueue.Add(m_sPoliceRadioQueue.crimes[i].type + SFX_CRIME_1 - 1);
|
m_sPoliceRadioQueue.Add(m_aCrimes[i].type + SFX_CRIME_1 - 1);
|
||||||
m_sPoliceRadioQueue.Add(SFX_IN);
|
m_sPoliceRadioQueue.Add(SFX_IN);
|
||||||
if (sampleIndex == SFX_POLICE_RADIO_SHORESIDE_VALE &&
|
if (sampleIndex == SFX_POLICE_RADIO_SHORESIDE_VALE &&
|
||||||
(strcmp(zone->name, SubZo2Label) == 0 || strcmp(zone->name, SubZo3Label) == 0)) {
|
(strcmp(zone->name, SubZo2Label) == 0 || strcmp(zone->name, SubZo3Label) == 0)) {
|
||||||
@@ -333,17 +361,17 @@ cAudioManager::SetupCrimeReport()
|
|||||||
quarterX = 0.25f * rangeX;
|
quarterX = 0.25f * rangeX;
|
||||||
quarterY = 0.25f * rangeY;
|
quarterY = 0.25f * rangeY;
|
||||||
|
|
||||||
if (m_sPoliceRadioQueue.crimes[i].position.y > halfY + quarterY) {
|
if (m_aCrimes[i].position.y > halfY + quarterY) {
|
||||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||||
processed = true;
|
processed = TRUE;
|
||||||
} else if (m_sPoliceRadioQueue.crimes[i].position.y < halfY - quarterY) {
|
} else if (m_aCrimes[i].position.y < halfY - quarterY) {
|
||||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||||
processed = true;
|
processed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_sPoliceRadioQueue.crimes[i].position.x > halfX + quarterX)
|
if (m_aCrimes[i].position.x > halfX + quarterX)
|
||||||
m_sPoliceRadioQueue.Add(SFX_EAST);
|
m_sPoliceRadioQueue.Add(SFX_EAST);
|
||||||
else if (m_sPoliceRadioQueue.crimes[i].position.x < halfX - quarterX)
|
else if (m_aCrimes[i].position.x < halfX - quarterX)
|
||||||
m_sPoliceRadioQueue.Add(SFX_WEST);
|
m_sPoliceRadioQueue.Add(SFX_WEST);
|
||||||
else if (!processed)
|
else if (!processed)
|
||||||
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
m_sPoliceRadioQueue.Add(SFX_CENTRAL);
|
||||||
@@ -356,180 +384,180 @@ cAudioManager::SetupCrimeReport()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
|
m_aCrimes[i].type = CRIME_NONE;
|
||||||
AgeCrimes();
|
AgeCrimes();
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Const uint32 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}
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::SetupSuspectLastSeenReport()
|
cAudioManager::SetupSuspectLastSeenReport()
|
||||||
{
|
{
|
||||||
CVehicle *veh;
|
CVehicle *veh;
|
||||||
uint8 color1;
|
uint8 color1;
|
||||||
int32 main_color;
|
uint32 main_color;
|
||||||
int32 sample;
|
uint32 sample;
|
||||||
|
|
||||||
int32 color_pre_modifier;
|
uint32 color_pre_modifier;
|
||||||
int32 color_post_modifier;
|
uint32 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}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) {
|
if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) {
|
||||||
veh = FindPlayerVehicle();
|
veh = FindPlayerVehicle();
|
||||||
if (veh != nil) {
|
if (veh != nil) {
|
||||||
if (60 - m_sPoliceRadioQueue.policeChannelTimer > 9) {
|
if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 9) {
|
||||||
color1 = veh->m_currentColour1;
|
color1 = veh->m_currentColour1;
|
||||||
if (color1 >= ARRAY_SIZE(gCarColourTable)) {
|
if (color1 >= ARRAY_SIZE(gCarColourTable)) {
|
||||||
debug("\n *** UNKNOWN CAR COLOUR %d *** ", color1);
|
debug("\n *** UNKNOWN CAR COLOUR %d *** ", color1);
|
||||||
@@ -662,7 +690,7 @@ cAudioManager::SetupSuspectLastSeenReport()
|
|||||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (60 - m_sPoliceRadioQueue.policeChannelTimer > 4) {
|
} 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_MESSAGE_NOISE_1);
|
||||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
|
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
|
||||||
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_ON_FOOT);
|
m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_ON_FOOT);
|
||||||
@@ -672,19 +700,17 @@ cAudioManager::SetupSuspectLastSeenReport()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
|
cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
|
||||||
{
|
{
|
||||||
int32 lastCrime = ARRAY_SIZE(m_sPoliceRadioQueue.crimes);
|
int32 lastCrime = ARRAY_SIZE(m_aCrimes);
|
||||||
if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 &&
|
if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0 &&
|
||||||
(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
|
(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
|
||||||
for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
for (int32 i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
|
||||||
if (m_sPoliceRadioQueue.crimes[i].type) {
|
if (m_aCrimes[i].type != CRIME_NONE) {
|
||||||
if (m_sPoliceRadioQueue.crimes[i].type == type) {
|
if (m_aCrimes[i].type == type) {
|
||||||
m_sPoliceRadioQueue.crimes[i].position = pos;
|
m_aCrimes[i].position = pos;
|
||||||
m_sPoliceRadioQueue.crimes[i].timer = 0;
|
m_aCrimes[i].timer = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -692,10 +718,10 @@ cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastCrime < ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) {
|
if (lastCrime < ARRAY_SIZE(m_aCrimes)) {
|
||||||
m_sPoliceRadioQueue.crimes[lastCrime].type = type;
|
m_aCrimes[lastCrime].type = type;
|
||||||
m_sPoliceRadioQueue.crimes[lastCrime].position = pos;
|
m_aCrimes[lastCrime].position = pos;
|
||||||
m_sPoliceRadioQueue.crimes[lastCrime].timer = 0;
|
m_aCrimes[lastCrime].timer = 0;
|
||||||
gMinTimeToNextReport[type] = m_FrameCounter + 500;
|
gMinTimeToNextReport[type] = m_FrameCounter + 500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -712,13 +738,13 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
|||||||
float halfY;
|
float halfY;
|
||||||
float quarterX;
|
float quarterX;
|
||||||
float quarterY;
|
float quarterY;
|
||||||
int32 sample;
|
uint32 sample;
|
||||||
bool processed = false;
|
bool8 processed = FALSE;
|
||||||
CVector vec = CVector(x, y, z);
|
CVector vec = CVector(x, y, z);
|
||||||
|
|
||||||
if (!m_bIsInitialised) return;
|
if (!m_bIsInitialised) return;
|
||||||
|
|
||||||
if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && 60 - m_sPoliceRadioQueue.policeChannelTimer > 9) {
|
if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 9) {
|
||||||
audioZone = CTheZones::FindAudioZone(&vec);
|
audioZone = CTheZones::FindAudioZone(&vec);
|
||||||
if (audioZone >= 0 && audioZone < NUMAUDIOZONES) {
|
if (audioZone >= 0 && audioZone < NUMAUDIOZONES) {
|
||||||
zone = CTheZones::GetAudioZone(audioZone);
|
zone = CTheZones::GetAudioZone(audioZone);
|
||||||
@@ -744,10 +770,10 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
|||||||
|
|
||||||
if (vec.y > halfY + quarterY) {
|
if (vec.y > halfY + quarterY) {
|
||||||
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
m_sPoliceRadioQueue.Add(SFX_NORTH);
|
||||||
processed = true;
|
processed = TRUE;
|
||||||
} else if (vec.y < halfY - quarterY) {
|
} else if (vec.y < halfY - quarterY) {
|
||||||
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
m_sPoliceRadioQueue.Add(SFX_SOUTH);
|
||||||
processed = true;
|
processed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vec.x > halfX + quarterX)
|
if (vec.x > halfX + quarterX)
|
||||||
@@ -760,7 +786,7 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
|||||||
m_sPoliceRadioQueue.Add(sample);
|
m_sPoliceRadioQueue.Add(sample);
|
||||||
m_sPoliceRadioQueue.Add(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
m_sPoliceRadioQueue.Add(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
|
||||||
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
|
||||||
gSpecialSuspectLastSeenReport = true;
|
gSpecialSuspectLastSeenReport = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -771,9 +797,9 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
|
|||||||
void
|
void
|
||||||
cAudioManager::AgeCrimes()
|
cAudioManager::AgeCrimes()
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
for (uint8 i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
|
||||||
if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE) {
|
if (m_aCrimes[i].type != CRIME_NONE) {
|
||||||
if (++m_sPoliceRadioQueue.crimes[i].timer > 1500) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
|
if (++m_aCrimes[i].timer > 1500) m_aCrimes[i].type = CRIME_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
66
src/audio/PolRadio.h
Normal file
66
src/audio/PolRadio.h
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Crime.h"
|
||||||
|
#include "AudioSamples.h"
|
||||||
|
|
||||||
|
struct cAMCrime {
|
||||||
|
int32 type;
|
||||||
|
CVector position;
|
||||||
|
uint16 timer;
|
||||||
|
|
||||||
|
cAMCrime()
|
||||||
|
{
|
||||||
|
type = CRIME_NONE;
|
||||||
|
position = CVector(0.0f, 0.0f, 0.0f);
|
||||||
|
timer = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
VALIDATE_SIZE(cAMCrime, 20);
|
||||||
|
|
||||||
|
#define POLICE_RADIO_QUEUE_MAX_SAMPLES 60
|
||||||
|
|
||||||
|
class cPoliceRadioQueue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint32 m_aSamples[POLICE_RADIO_QUEUE_MAX_SAMPLES];
|
||||||
|
uint8 m_nSamplesInQueue;
|
||||||
|
uint8 m_nAddOffset;
|
||||||
|
uint8 m_nRemoveOffset;
|
||||||
|
|
||||||
|
cPoliceRadioQueue()
|
||||||
|
{
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
m_nAddOffset = 0;
|
||||||
|
m_nRemoveOffset = 0;
|
||||||
|
m_nSamplesInQueue = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 Add(uint32 sample)
|
||||||
|
{
|
||||||
|
if (m_nSamplesInQueue != POLICE_RADIO_QUEUE_MAX_SAMPLES) {
|
||||||
|
m_aSamples[m_nAddOffset] = sample;
|
||||||
|
m_nSamplesInQueue++;
|
||||||
|
m_nAddOffset = (m_nAddOffset + 1) % POLICE_RADIO_QUEUE_MAX_SAMPLES;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 Remove()
|
||||||
|
{
|
||||||
|
if (m_nSamplesInQueue != 0) {
|
||||||
|
uint32 sample = m_aSamples[m_nRemoveOffset];
|
||||||
|
m_nSamplesInQueue--;
|
||||||
|
m_nRemoveOffset = (m_nRemoveOffset + 1) % POLICE_RADIO_QUEUE_MAX_SAMPLES;
|
||||||
|
return sample;
|
||||||
|
}
|
||||||
|
return TOTAL_AUDIO_SAMPLES;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
VALIDATE_SIZE(cPoliceRadioQueue, 244);
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Wanted.h"
|
|
||||||
|
|
||||||
struct cAMCrime {
|
|
||||||
int32 type;
|
|
||||||
CVector position;
|
|
||||||
uint16 timer;
|
|
||||||
|
|
||||||
cAMCrime()
|
|
||||||
{
|
|
||||||
type = CRIME_NONE;
|
|
||||||
position = CVector(0.0f, 0.0f, 0.0f);
|
|
||||||
timer = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VALIDATE_SIZE(cAMCrime, 20);
|
|
||||||
|
|
||||||
class cPoliceRadioQueue
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int32 crimesSamples[60];
|
|
||||||
uint8 policeChannelTimer;
|
|
||||||
uint8 policeChannelTimerSeconds;
|
|
||||||
uint8 policeChannelCounterSeconds;
|
|
||||||
cAMCrime crimes[10];
|
|
||||||
|
|
||||||
cPoliceRadioQueue()
|
|
||||||
{
|
|
||||||
policeChannelTimerSeconds = 0;
|
|
||||||
policeChannelCounterSeconds = 0;
|
|
||||||
policeChannelTimer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Add(uint32 sample)
|
|
||||||
{
|
|
||||||
if (policeChannelTimer != 60) {
|
|
||||||
crimesSamples[policeChannelTimerSeconds] = sample;
|
|
||||||
policeChannelTimer++;
|
|
||||||
policeChannelTimerSeconds = (policeChannelTimerSeconds + 1) % 60;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VALIDATE_SIZE(cPoliceRadioQueue, 444);
|
|
||||||
@@ -12,8 +12,9 @@ enum eRadioStation
|
|||||||
FLASHBACK,
|
FLASHBACK,
|
||||||
CHATTERBOX,
|
CHATTERBOX,
|
||||||
USERTRACK,
|
USERTRACK,
|
||||||
POLICE_RADIO,
|
POLICE_RADIO = 10,
|
||||||
RADIO_OFF,
|
NUM_RADIOS = 10,
|
||||||
|
RADIO_OFF = 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eMusicMode
|
enum eMusicMode
|
||||||
@@ -122,107 +123,109 @@ enum eStreamedSounds
|
|||||||
STREAMED_SOUND_CUTSCENE_MARTY_PH4,
|
STREAMED_SOUND_CUTSCENE_MARTY_PH4,
|
||||||
STREAMED_SOUND_MISSION_COMPLETED,
|
STREAMED_SOUND_MISSION_COMPLETED,
|
||||||
STREAMED_SOUND_GAME_COMPLETED,
|
STREAMED_SOUND_GAME_COMPLETED,
|
||||||
STREAMED_SOUND_MISSION_LIB_A1,
|
#ifndef GTA_PS2
|
||||||
STREAMED_SOUND_MISSION_LIB_A2,
|
SFX_MISSION_LIB_A1,
|
||||||
STREAMED_SOUND_MISSION_LIB_A,
|
SFX_MISSION_LIB_A2,
|
||||||
STREAMED_SOUND_MISSION_LIB_B,
|
SFX_MISSION_LIB_A,
|
||||||
STREAMED_SOUND_MISSION_LIB_C,
|
SFX_MISSION_LIB_B,
|
||||||
STREAMED_SOUND_MISSION_LIB_D,
|
SFX_MISSION_LIB_C,
|
||||||
STREAMED_SOUND_MISSION_L2_A,
|
SFX_MISSION_LIB_D,
|
||||||
STREAMED_SOUND_MISSION_J4T_1,
|
SFX_MISSION_L2_A,
|
||||||
STREAMED_SOUND_MISSION_J4T_2,
|
SFX_MISSION_J4T_1,
|
||||||
STREAMED_SOUND_MISSION_J4T_3,
|
SFX_MISSION_J4T_2,
|
||||||
STREAMED_SOUND_MISSION_J4T_4,
|
SFX_MISSION_J4T_3,
|
||||||
STREAMED_SOUND_MISSION_J4_A,
|
SFX_MISSION_J4T_4,
|
||||||
STREAMED_SOUND_MISSION_J4_B,
|
SFX_MISSION_J4_A,
|
||||||
STREAMED_SOUND_MISSION_J4_C,
|
SFX_MISSION_J4_B,
|
||||||
STREAMED_SOUND_MISSION_J4_D,
|
SFX_MISSION_J4_C,
|
||||||
STREAMED_SOUND_MISSION_J4_E,
|
SFX_MISSION_J4_D,
|
||||||
STREAMED_SOUND_MISSION_J4_F,
|
SFX_MISSION_J4_E,
|
||||||
STREAMED_SOUND_MISSION_J6_1,
|
SFX_MISSION_J4_F,
|
||||||
STREAMED_SOUND_MISSION_J6_A,
|
SFX_MISSION_J6_1,
|
||||||
STREAMED_SOUND_MISSION_J6_B,
|
SFX_MISSION_J6_A,
|
||||||
STREAMED_SOUND_MISSION_J6_C,
|
SFX_MISSION_J6_B,
|
||||||
STREAMED_SOUND_MISSION_J6_D,
|
SFX_MISSION_J6_C,
|
||||||
STREAMED_SOUND_MISSION_T4_A,
|
SFX_MISSION_J6_D,
|
||||||
STREAMED_SOUND_MISSION_S1_A,
|
SFX_MISSION_T4_A,
|
||||||
STREAMED_SOUND_MISSION_S1_A1,
|
SFX_MISSION_S1_A,
|
||||||
STREAMED_SOUND_MISSION_S1_B,
|
SFX_MISSION_S1_A1,
|
||||||
STREAMED_SOUND_MISSION_S1_C,
|
SFX_MISSION_S1_B,
|
||||||
STREAMED_SOUND_MISSION_S1_C1,
|
SFX_MISSION_S1_C,
|
||||||
STREAMED_SOUND_MISSION_S1_D,
|
SFX_MISSION_S1_C1,
|
||||||
STREAMED_SOUND_MISSION_S1_E,
|
SFX_MISSION_S1_D,
|
||||||
STREAMED_SOUND_MISSION_S1_F,
|
SFX_MISSION_S1_E,
|
||||||
STREAMED_SOUND_MISSION_S1_G,
|
SFX_MISSION_S1_F,
|
||||||
STREAMED_SOUND_MISSION_S1_H,
|
SFX_MISSION_S1_G,
|
||||||
STREAMED_SOUND_MISSION_S1_I,
|
SFX_MISSION_S1_H,
|
||||||
STREAMED_SOUND_MISSION_S1_J,
|
SFX_MISSION_S1_I,
|
||||||
STREAMED_SOUND_MISSION_S1_K,
|
SFX_MISSION_S1_J,
|
||||||
STREAMED_SOUND_MISSION_S1_L,
|
SFX_MISSION_S1_K,
|
||||||
STREAMED_SOUND_MISSION_S3_A,
|
SFX_MISSION_S1_L,
|
||||||
STREAMED_SOUND_MISSION_S3_B,
|
SFX_MISSION_S3_A,
|
||||||
STREAMED_SOUND_MISSION_EL3_A,
|
SFX_MISSION_S3_B,
|
||||||
STREAMED_SOUND_MISSION_MF1_A,
|
SFX_MISSION_EL3_A,
|
||||||
STREAMED_SOUND_MISSION_MF2_A,
|
SFX_MISSION_MF1_A,
|
||||||
STREAMED_SOUND_MISSION_MF3_A,
|
SFX_MISSION_MF2_A,
|
||||||
STREAMED_SOUND_MISSION_MF3_B,
|
SFX_MISSION_MF3_A,
|
||||||
STREAMED_SOUND_MISSION_MF3_B1,
|
SFX_MISSION_MF3_B,
|
||||||
STREAMED_SOUND_MISSION_MF3_C,
|
SFX_MISSION_MF3_B1,
|
||||||
STREAMED_SOUND_MISSION_MF4_A,
|
SFX_MISSION_MF3_C,
|
||||||
STREAMED_SOUND_MISSION_MF4_B,
|
SFX_MISSION_MF4_A,
|
||||||
STREAMED_SOUND_MISSION_MF4_C,
|
SFX_MISSION_MF4_B,
|
||||||
STREAMED_SOUND_MISSION_A1_A,
|
SFX_MISSION_MF4_C,
|
||||||
STREAMED_SOUND_MISSION_A3_A,
|
SFX_MISSION_A1_A,
|
||||||
STREAMED_SOUND_MISSION_A5_A,
|
SFX_MISSION_A3_A,
|
||||||
STREAMED_SOUND_MISSION_A4_A,
|
SFX_MISSION_A5_A,
|
||||||
STREAMED_SOUND_MISSION_A4_B,
|
SFX_MISSION_A4_A,
|
||||||
STREAMED_SOUND_MISSION_A4_C,
|
SFX_MISSION_A4_B,
|
||||||
STREAMED_SOUND_MISSION_A4_D,
|
SFX_MISSION_A4_C,
|
||||||
STREAMED_SOUND_MISSION_K1_A,
|
SFX_MISSION_A4_D,
|
||||||
STREAMED_SOUND_MISSION_K3_A,
|
SFX_MISSION_K1_A,
|
||||||
STREAMED_SOUND_MISSION_R1_A,
|
SFX_MISSION_K3_A,
|
||||||
STREAMED_SOUND_MISSION_R2_A,
|
SFX_MISSION_R1_A,
|
||||||
STREAMED_SOUND_MISSION_R2_B,
|
SFX_MISSION_R2_A,
|
||||||
STREAMED_SOUND_MISSION_R2_C,
|
SFX_MISSION_R2_B,
|
||||||
STREAMED_SOUND_MISSION_R2_D,
|
SFX_MISSION_R2_C,
|
||||||
STREAMED_SOUND_MISSION_R2_E,
|
SFX_MISSION_R2_D,
|
||||||
STREAMED_SOUND_MISSION_R2_F,
|
SFX_MISSION_R2_E,
|
||||||
STREAMED_SOUND_MISSION_R2_G,
|
SFX_MISSION_R2_F,
|
||||||
STREAMED_SOUND_MISSION_R2_H,
|
SFX_MISSION_R2_G,
|
||||||
STREAMED_SOUND_MISSION_R5_A,
|
SFX_MISSION_R2_H,
|
||||||
STREAMED_SOUND_MISSION_R6_A,
|
SFX_MISSION_R5_A,
|
||||||
STREAMED_SOUND_MISSION_R6_A1,
|
SFX_MISSION_R6_A,
|
||||||
STREAMED_SOUND_MISSION_R6_B,
|
SFX_MISSION_R6_A1,
|
||||||
STREAMED_SOUND_MISSION_LO2_A,
|
SFX_MISSION_R6_B,
|
||||||
STREAMED_SOUND_MISSION_LO6_A,
|
SFX_MISSION_LO2_A,
|
||||||
STREAMED_SOUND_MISSION_YD2_A,
|
SFX_MISSION_LO6_A,
|
||||||
STREAMED_SOUND_MISSION_YD2_B,
|
SFX_MISSION_YD2_A,
|
||||||
STREAMED_SOUND_MISSION_YD2_C,
|
SFX_MISSION_YD2_B,
|
||||||
STREAMED_SOUND_MISSION_YD2_C1,
|
SFX_MISSION_YD2_C,
|
||||||
STREAMED_SOUND_MISSION_YD2_D,
|
SFX_MISSION_YD2_C1,
|
||||||
STREAMED_SOUND_MISSION_YD2_E,
|
SFX_MISSION_YD2_D,
|
||||||
STREAMED_SOUND_MISSION_YD2_F,
|
SFX_MISSION_YD2_E,
|
||||||
STREAMED_SOUND_MISSION_YD2_G,
|
SFX_MISSION_YD2_F,
|
||||||
STREAMED_SOUND_MISSION_YD2_H,
|
SFX_MISSION_YD2_G,
|
||||||
STREAMED_SOUND_MISSION_YD2_ASS,
|
SFX_MISSION_YD2_H,
|
||||||
STREAMED_SOUND_MISSION_YD2_OK,
|
SFX_MISSION_YD2_ASS,
|
||||||
STREAMED_SOUND_MISSION_H5_A,
|
SFX_MISSION_YD2_OK,
|
||||||
STREAMED_SOUND_MISSION_H5_B,
|
SFX_MISSION_H5_A,
|
||||||
STREAMED_SOUND_MISSION_H5_C,
|
SFX_MISSION_H5_B,
|
||||||
STREAMED_SOUND_MISSION_AMMU_A,
|
SFX_MISSION_H5_C,
|
||||||
STREAMED_SOUND_MISSION_AMMU_B,
|
SFX_MISSION_AMMU_A,
|
||||||
STREAMED_SOUND_MISSION_AMMU_C,
|
SFX_MISSION_AMMU_B,
|
||||||
STREAMED_SOUND_MISSION_DOOR_1,
|
SFX_MISSION_AMMU_C,
|
||||||
STREAMED_SOUND_MISSION_DOOR_2,
|
SFX_MISSION_DOOR_1,
|
||||||
STREAMED_SOUND_MISSION_DOOR_3,
|
SFX_MISSION_DOOR_2,
|
||||||
STREAMED_SOUND_MISSION_DOOR_4,
|
SFX_MISSION_DOOR_3,
|
||||||
STREAMED_SOUND_MISSION_DOOR_5,
|
SFX_MISSION_DOOR_4,
|
||||||
STREAMED_SOUND_MISSION_DOOR_6,
|
SFX_MISSION_DOOR_5,
|
||||||
STREAMED_SOUND_MISSION_T3_A,
|
SFX_MISSION_DOOR_6,
|
||||||
STREAMED_SOUND_MISSION_T3_B,
|
SFX_MISSION_T3_A,
|
||||||
STREAMED_SOUND_MISSION_T3_C,
|
SFX_MISSION_T3_B,
|
||||||
STREAMED_SOUND_MISSION_K1_B,
|
SFX_MISSION_T3_C,
|
||||||
STREAMED_SOUND_MISSION_CAT1,
|
SFX_MISSION_K1_B,
|
||||||
|
SFX_MISSION_CAT1,
|
||||||
|
#endif
|
||||||
TOTAL_STREAMED_SOUNDS,
|
TOTAL_STREAMED_SOUNDS,
|
||||||
NO_TRACK,
|
NO_TRACK,
|
||||||
};
|
};
|
||||||
@@ -253,3 +256,25 @@ enum eAudioType
|
|||||||
AUDIOTYPE_POLICERADIO,
|
AUDIOTYPE_POLICERADIO,
|
||||||
TOTAL_AUDIO_TYPES,
|
TOTAL_AUDIO_TYPES,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef GTA_PS2
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
NUM_CHANNELS_GENERIC = 43,
|
||||||
|
CHANNEL_POLICE_RADIO = NUM_CHANNELS_GENERIC,
|
||||||
|
CHANNEL_MISSION_AUDIO,
|
||||||
|
CHANNEL_PLAYER_VEHICLE_ENGINE,
|
||||||
|
NUM_CHANNELS
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
#ifdef PS2_AUDIO_CHANNELS
|
||||||
|
NUM_CHANNELS_GENERIC = 43,
|
||||||
|
#else
|
||||||
|
NUM_CHANNELS_GENERIC = 27,
|
||||||
|
#endif
|
||||||
|
CHANNEL_POLICE_RADIO,
|
||||||
|
NUM_CHANNELS
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -24,12 +24,6 @@
|
|||||||
|
|
||||||
#include "aldlist.h"
|
#include "aldlist.h"
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
#define _stricmp strcasecmp
|
|
||||||
#define _strnicmp strncasecmp
|
|
||||||
#define _strdup strdup
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AUDIO_OAL
|
#ifdef AUDIO_OAL
|
||||||
/*
|
/*
|
||||||
* Init call
|
* Init call
|
||||||
@@ -47,8 +41,8 @@ ALDeviceList::ALDeviceList()
|
|||||||
defaultDeviceIndex = 0;
|
defaultDeviceIndex = 0;
|
||||||
|
|
||||||
if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT")) {
|
if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT")) {
|
||||||
devices = (char *)alcGetString(NULL, ALC_DEVICE_SPECIFIER);
|
devices = (char *)alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER);
|
||||||
defaultDeviceName = (char *)alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER);
|
defaultDeviceName = (char *)alcGetString(NULL, ALC_DEFAULT_ALL_DEVICES_SPECIFIER);
|
||||||
|
|
||||||
index = 0;
|
index = 0;
|
||||||
// go through device list (each device terminated with a single NULL, list terminated with double NULL)
|
// go through device list (each device terminated with a single NULL, list terminated with double NULL)
|
||||||
@@ -62,17 +56,11 @@ ALDeviceList::ALDeviceList()
|
|||||||
if (context) {
|
if (context) {
|
||||||
alcMakeContextCurrent(context);
|
alcMakeContextCurrent(context);
|
||||||
// if new actual device name isn't already in the list, then add it...
|
// if new actual device name isn't already in the list, then add it...
|
||||||
actualDeviceName = alcGetString(device, ALC_DEVICE_SPECIFIER);
|
actualDeviceName = alcGetString(device, ALC_ALL_DEVICES_SPECIFIER);
|
||||||
bool bNewName = true;
|
if ((actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) {
|
||||||
for (unsigned int i = 0; i < GetNumDevices(); i++) {
|
ALDEVICEINFO &ALDeviceInfo = aDeviceInfo[nNumOfDevices++];
|
||||||
if (strcmp(GetDeviceName(i), actualDeviceName) == 0) {
|
|
||||||
bNewName = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((bNewName) && (actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) {
|
|
||||||
ALDEVICEINFO ALDeviceInfo;
|
|
||||||
ALDeviceInfo.bSelected = true;
|
ALDeviceInfo.bSelected = true;
|
||||||
ALDeviceInfo.strDeviceName = _strdup(actualDeviceName);
|
ALDeviceInfo.SetName(actualDeviceName);
|
||||||
alcGetIntegerv(device, ALC_MAJOR_VERSION, sizeof(int), &ALDeviceInfo.iMajorVersion);
|
alcGetIntegerv(device, ALC_MAJOR_VERSION, sizeof(int), &ALDeviceInfo.iMajorVersion);
|
||||||
alcGetIntegerv(device, ALC_MINOR_VERSION, sizeof(int), &ALDeviceInfo.iMinorVersion);
|
alcGetIntegerv(device, ALC_MINOR_VERSION, sizeof(int), &ALDeviceInfo.iMinorVersion);
|
||||||
|
|
||||||
@@ -105,8 +93,6 @@ ALDeviceList::ALDeviceList()
|
|||||||
|
|
||||||
// Get Source Count
|
// Get Source Count
|
||||||
ALDeviceInfo.uiSourceCount = GetMaxNumSources();
|
ALDeviceInfo.uiSourceCount = GetMaxNumSources();
|
||||||
|
|
||||||
aDeviceInfo[nNumOfDevices++] = ALDeviceInfo;
|
|
||||||
}
|
}
|
||||||
alcMakeContextCurrent(NULL);
|
alcMakeContextCurrent(NULL);
|
||||||
alcDestroyContext(context);
|
alcDestroyContext(context);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ALDEVICEINFO {
|
struct ALDEVICEINFO {
|
||||||
const char *strDeviceName;
|
char *strDeviceName;
|
||||||
int iMajorVersion;
|
int iMajorVersion;
|
||||||
int iMinorVersion;
|
int iMinorVersion;
|
||||||
unsigned int uiSourceCount;
|
unsigned int uiSourceCount;
|
||||||
@@ -33,6 +33,19 @@ struct ALDEVICEINFO {
|
|||||||
strDeviceName = NULL;
|
strDeviceName = NULL;
|
||||||
Extensions = 0;
|
Extensions = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~ALDEVICEINFO()
|
||||||
|
{
|
||||||
|
delete[] strDeviceName;
|
||||||
|
strDeviceName = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetName(const char *name)
|
||||||
|
{
|
||||||
|
if(strDeviceName) delete[] strDeviceName;
|
||||||
|
strDeviceName = new char[strlen(name) + 1];
|
||||||
|
strcpy(strDeviceName, name);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef ALDEVICEINFO *LPALDEVICEINFO;
|
typedef ALDEVICEINFO *LPALDEVICEINFO;
|
||||||
|
|||||||
@@ -10,18 +10,22 @@
|
|||||||
|
|
||||||
extern bool IsFXSupported();
|
extern bool IsFXSupported();
|
||||||
|
|
||||||
ALuint alSources[MAXCHANNELS+MAX2DCHANNELS];
|
ALuint alSources[NUM_CHANNELS];
|
||||||
ALuint alFilters[MAXCHANNELS+MAX2DCHANNELS];
|
ALuint alFilters[NUM_CHANNELS];
|
||||||
ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS];
|
ALuint alBuffers[NUM_CHANNELS];
|
||||||
bool bChannelsCreated = false;
|
bool bChannelsCreated = false;
|
||||||
|
|
||||||
|
int32 CChannel::channelsThatNeedService = 0;
|
||||||
|
|
||||||
|
uint8 tempStereoBuffer[PED_BLOCKSIZE * 2];
|
||||||
|
|
||||||
void
|
void
|
||||||
CChannel::InitChannels()
|
CChannel::InitChannels()
|
||||||
{
|
{
|
||||||
alGenSources(MAXCHANNELS+MAX2DCHANNELS, alSources);
|
alGenSources(NUM_CHANNELS, alSources);
|
||||||
alGenBuffers(MAXCHANNELS+MAX2DCHANNELS, alBuffers);
|
alGenBuffers(NUM_CHANNELS, alBuffers);
|
||||||
if (IsFXSupported())
|
if (IsFXSupported())
|
||||||
alGenFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters);
|
alGenFilters(NUM_CHANNELS, alFilters);
|
||||||
bChannelsCreated = true;
|
bChannelsCreated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,13 +34,13 @@ CChannel::DestroyChannels()
|
|||||||
{
|
{
|
||||||
if (bChannelsCreated)
|
if (bChannelsCreated)
|
||||||
{
|
{
|
||||||
alDeleteSources(MAXCHANNELS + MAX2DCHANNELS, alSources);
|
alDeleteSources(NUM_CHANNELS, alSources);
|
||||||
memset(alSources, 0, sizeof(alSources));
|
memset(alSources, 0, sizeof(alSources));
|
||||||
alDeleteBuffers(MAXCHANNELS + MAX2DCHANNELS, alBuffers);
|
alDeleteBuffers(NUM_CHANNELS, alBuffers);
|
||||||
memset(alBuffers, 0, sizeof(alBuffers));
|
memset(alBuffers, 0, sizeof(alBuffers));
|
||||||
if (IsFXSupported())
|
if (IsFXSupported())
|
||||||
{
|
{
|
||||||
alDeleteFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters);
|
alDeleteFilters(NUM_CHANNELS, alFilters);
|
||||||
memset(alFilters, 0, sizeof(alFilters));
|
memset(alFilters, 0, sizeof(alFilters));
|
||||||
}
|
}
|
||||||
bChannelsCreated = false;
|
bChannelsCreated = false;
|
||||||
@@ -48,6 +52,7 @@ CChannel::CChannel()
|
|||||||
{
|
{
|
||||||
Data = nil;
|
Data = nil;
|
||||||
DataSize = 0;
|
DataSize = 0;
|
||||||
|
bIs2D = false;
|
||||||
SetDefault();
|
SetDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +64,9 @@ void CChannel::SetDefault()
|
|||||||
|
|
||||||
Position[0] = 0.0f; Position[1] = 0.0f; Position[2] = 0.0f;
|
Position[0] = 0.0f; Position[1] = 0.0f; Position[2] = 0.0f;
|
||||||
Distances[0] = 0.0f; Distances[1] = FLT_MAX;
|
Distances[0] = 0.0f; Distances[1] = FLT_MAX;
|
||||||
LoopCount = 1;
|
|
||||||
|
LoopCount = 1;
|
||||||
|
LastProcessedOffset = UINT32_MAX;
|
||||||
LoopPoints[0] = 0; LoopPoints[1] = -1;
|
LoopPoints[0] = 0; LoopPoints[1] = -1;
|
||||||
|
|
||||||
Frequency = MAX_FREQ;
|
Frequency = MAX_FREQ;
|
||||||
@@ -67,6 +74,10 @@ void CChannel::SetDefault()
|
|||||||
|
|
||||||
void CChannel::Reset()
|
void CChannel::Reset()
|
||||||
{
|
{
|
||||||
|
// Here is safe because ctor don't call this
|
||||||
|
if (LoopCount > 1)
|
||||||
|
channelsThatNeedService--;
|
||||||
|
|
||||||
ClearBuffer();
|
ClearBuffer();
|
||||||
SetDefault();
|
SetDefault();
|
||||||
}
|
}
|
||||||
@@ -82,6 +93,7 @@ void CChannel::Init(uint32 _id, bool Is2D)
|
|||||||
|
|
||||||
if ( Is2D )
|
if ( Is2D )
|
||||||
{
|
{
|
||||||
|
bIs2D = true;
|
||||||
alSource3f(alSources[id], AL_POSITION, 0.0f, 0.0f, 0.0f);
|
alSource3f(alSources[id], AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||||
alSourcef(alSources[id], AL_GAIN, 1.0f);
|
alSourcef(alSources[id], AL_GAIN, 1.0f);
|
||||||
}
|
}
|
||||||
@@ -105,7 +117,20 @@ void CChannel::Start()
|
|||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
if ( !Data ) return;
|
if ( !Data ) return;
|
||||||
|
|
||||||
alBufferData(alBuffers[id], AL_FORMAT_MONO16, Data, DataSize, Frequency);
|
if ( bIs2D )
|
||||||
|
{
|
||||||
|
// convert mono data to stereo
|
||||||
|
int16 *monoData = (int16*)Data;
|
||||||
|
int16 *stereoData = (int16*)tempStereoBuffer;
|
||||||
|
for (size_t i = 0; i < DataSize / 2; i++)
|
||||||
|
{
|
||||||
|
*(stereoData++) = *monoData;
|
||||||
|
*(stereoData++) = *(monoData++);
|
||||||
|
}
|
||||||
|
alBufferData(alBuffers[id], AL_FORMAT_STEREO16, tempStereoBuffer, DataSize * 2, Frequency);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
alBufferData(alBuffers[id], AL_FORMAT_MONO16, Data, DataSize, Frequency);
|
||||||
if ( LoopPoints[0] != 0 && LoopPoints[0] != -1 )
|
if ( LoopPoints[0] != 0 && LoopPoints[0] != -1 )
|
||||||
alBufferiv(alBuffers[id], AL_LOOP_POINTS_SOFT, LoopPoints);
|
alBufferiv(alBuffers[id], AL_LOOP_POINTS_SOFT, LoopPoints);
|
||||||
alSourcei(alSources[id], AL_BUFFER, alBuffers[id]);
|
alSourcei(alSources[id], AL_BUFFER, alBuffers[id]);
|
||||||
@@ -165,10 +190,51 @@ void CChannel::SetCurrentFreq(uint32 freq)
|
|||||||
SetPitch(ALfloat(freq) / Frequency);
|
SetPitch(ALfloat(freq) / Frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChannel::SetLoopCount(int32 loopCount) // fake. TODO:
|
void CChannel::SetLoopCount(int32 count)
|
||||||
{
|
{
|
||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
alSourcei(alSources[id], AL_LOOPING, loopCount == 1 ? AL_FALSE : AL_TRUE);
|
|
||||||
|
// 0: loop indefinitely, 1: play one time, 2: play two times etc...
|
||||||
|
// only > 1 needs manual processing
|
||||||
|
|
||||||
|
if (LoopCount > 1 && count < 2)
|
||||||
|
channelsThatNeedService--;
|
||||||
|
else if (LoopCount < 2 && count > 1)
|
||||||
|
channelsThatNeedService++;
|
||||||
|
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, count == 1 ? AL_FALSE : AL_TRUE);
|
||||||
|
LoopCount = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CChannel::Update()
|
||||||
|
{
|
||||||
|
if (!HasSource()) return false;
|
||||||
|
if (LoopCount < 2) return false;
|
||||||
|
|
||||||
|
ALint state;
|
||||||
|
alGetSourcei(alSources[id], AL_SOURCE_STATE, &state);
|
||||||
|
if (state == AL_STOPPED) {
|
||||||
|
debug("Looping channels(%d in this case) shouldn't report AL_STOPPED, but nvm\n", id);
|
||||||
|
SetLoopCount(1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(channelsThatNeedService > 0 && "Ref counting is broken");
|
||||||
|
|
||||||
|
ALint offset;
|
||||||
|
alGetSourcei(alSources[id], AL_SAMPLE_OFFSET, &offset);
|
||||||
|
|
||||||
|
// Rewound
|
||||||
|
if (offset < LastProcessedOffset) {
|
||||||
|
LoopCount--;
|
||||||
|
if (LoopCount == 1) {
|
||||||
|
// Playing last tune...
|
||||||
|
channelsThatNeedService--;
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LastProcessedOffset = offset;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChannel::SetLoopPoints(ALint start, ALint end)
|
void CChannel::SetLoopPoints(ALint start, ALint end)
|
||||||
@@ -200,6 +266,7 @@ void CChannel::SetPan(int32 pan)
|
|||||||
void CChannel::ClearBuffer()
|
void CChannel::ClearBuffer()
|
||||||
{
|
{
|
||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
|
||||||
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
|
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
|
||||||
Data = nil;
|
Data = nil;
|
||||||
DataSize = 0;
|
DataSize = 0;
|
||||||
|
|||||||
@@ -19,7 +19,11 @@ class CChannel
|
|||||||
float Distances[2];
|
float Distances[2];
|
||||||
int32 LoopCount;
|
int32 LoopCount;
|
||||||
ALint LoopPoints[2];
|
ALint LoopPoints[2];
|
||||||
|
ALint LastProcessedOffset;
|
||||||
|
bool bIs2D;
|
||||||
public:
|
public:
|
||||||
|
static int32 channelsThatNeedService;
|
||||||
|
|
||||||
static void InitChannels();
|
static void InitChannels();
|
||||||
static void DestroyChannels();
|
static void DestroyChannels();
|
||||||
|
|
||||||
@@ -37,7 +41,7 @@ public:
|
|||||||
void SetVolume(int32 vol);
|
void SetVolume(int32 vol);
|
||||||
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
|
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
|
||||||
void SetCurrentFreq(uint32 freq);
|
void SetCurrentFreq(uint32 freq);
|
||||||
void SetLoopCount(int32 loopCount); // fake
|
void SetLoopCount(int32 count);
|
||||||
void SetLoopPoints(ALint start, ALint end);
|
void SetLoopPoints(ALint start, ALint end);
|
||||||
void SetPosition(float x, float y, float z);
|
void SetPosition(float x, float y, float z);
|
||||||
void SetDistances(float max, float min);
|
void SetDistances(float max, float min);
|
||||||
@@ -45,6 +49,7 @@ public:
|
|||||||
void ClearBuffer();
|
void ClearBuffer();
|
||||||
void SetReverbMix(ALuint slot, float mix);
|
void SetReverbMix(ALuint slot, float mix);
|
||||||
void UpdateReverb(ALuint slot);
|
void UpdateReverb(ALuint slot);
|
||||||
|
bool Update();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
|||||||
#ifdef AUDIO_OAL
|
#ifdef AUDIO_OAL
|
||||||
#include <AL/al.h>
|
#include <AL/al.h>
|
||||||
|
|
||||||
#define NUM_STREAMBUFFERS 4
|
#define NUM_STREAMBUFFERS 8
|
||||||
|
|
||||||
class IDecoder
|
class IDecoder
|
||||||
{
|
{
|
||||||
@@ -11,6 +11,7 @@ public:
|
|||||||
virtual ~IDecoder() { }
|
virtual ~IDecoder() { }
|
||||||
|
|
||||||
virtual bool IsOpened() = 0;
|
virtual bool IsOpened() = 0;
|
||||||
|
virtual void FileOpen() = 0;
|
||||||
|
|
||||||
virtual uint32 GetSampleSize() = 0;
|
virtual uint32 GetSampleSize() = 0;
|
||||||
virtual uint32 GetSampleCount() = 0;
|
virtual uint32 GetSampleCount() = 0;
|
||||||
@@ -48,47 +49,126 @@ public:
|
|||||||
|
|
||||||
uint32 GetLength()
|
uint32 GetLength()
|
||||||
{
|
{
|
||||||
|
FileOpen(); // abort deferred init, we need length now - game has to cache audio file sizes
|
||||||
return float(GetSampleCount()) * 1000.0f / float(GetSampleRate());
|
return float(GetSampleCount()) * 1000.0f / float(GetSampleRate());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual uint32 Decode(void *buffer) = 0;
|
virtual uint32 Decode(void *buffer) = 0;
|
||||||
};
|
};
|
||||||
|
#ifdef MULTITHREADED_AUDIO
|
||||||
|
template <typename T> class tsQueue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
tsQueue() : count(0) { }
|
||||||
|
|
||||||
|
void push(const T &value)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
|
m_queue.push(value);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool peekPop(T *retVal)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
|
if (count == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*retVal = m_queue.front();
|
||||||
|
m_queue.pop();
|
||||||
|
count--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void swapNts(tsQueue<T> &replaceWith)
|
||||||
|
{
|
||||||
|
m_queue.swap(replaceWith.m_queue);
|
||||||
|
replaceWith.count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void swapTs(tsQueue<T> &replaceWith)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
|
std::lock_guard<std::mutex> lock2(replaceWith.m_mutex);
|
||||||
|
swapNts(replaceWith);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool emptyNts()
|
||||||
|
{
|
||||||
|
return count == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
bool emptyTs()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
|
return emptyNts();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
std::queue<T> m_queue;
|
||||||
|
int count;
|
||||||
|
mutable std::mutex m_mutex;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
class CStream
|
class CStream
|
||||||
{
|
{
|
||||||
char m_aFilename[128];
|
char m_aFilename[128];
|
||||||
ALuint &m_alSource;
|
ALuint *m_pAlSources;
|
||||||
ALuint (&m_alBuffers)[NUM_STREAMBUFFERS];
|
ALuint (&m_alBuffers)[NUM_STREAMBUFFERS];
|
||||||
|
|
||||||
bool m_bPaused;
|
bool m_bPaused;
|
||||||
bool m_bActive;
|
bool m_bActive;
|
||||||
|
|
||||||
|
public:
|
||||||
|
#ifdef MULTITHREADED_AUDIO
|
||||||
|
std::mutex m_mutex;
|
||||||
|
std::queue<std::pair<ALuint, ALuint>> m_fillBuffers; // left and right buffer
|
||||||
|
tsQueue<std::pair<ALuint, ALuint>> m_queueBuffers;
|
||||||
|
// std::condition_variable m_closeCv;
|
||||||
|
bool m_bDoSeek;
|
||||||
|
uint32 m_SeekPos;
|
||||||
|
bool m_bIExist;
|
||||||
|
#endif
|
||||||
|
|
||||||
void *m_pBuffer;
|
void *m_pBuffer;
|
||||||
|
|
||||||
bool m_bReset;
|
bool m_bReset;
|
||||||
uint32 m_nVolume;
|
uint32 m_nVolume;
|
||||||
uint8 m_nPan;
|
uint8 m_nPan;
|
||||||
uint32 m_nPosBeforeReset;
|
uint32 m_nPosBeforeReset;
|
||||||
|
int32 m_nLoopCount;
|
||||||
|
|
||||||
IDecoder *m_pSoundFile;
|
IDecoder *m_pSoundFile;
|
||||||
|
|
||||||
|
void BuffersShouldBeFilled(); // all
|
||||||
|
bool BufferShouldBeFilledAndQueued(std::pair<ALuint, ALuint>*); // two (left-right)
|
||||||
|
#ifdef MULTITHREADED_AUDIO
|
||||||
|
void FlagAsToBeProcessed(bool close = false);
|
||||||
|
bool QueueBuffers();
|
||||||
|
#endif
|
||||||
|
|
||||||
bool HasSource();
|
bool HasSource();
|
||||||
void SetPosition(float x, float y, float z);
|
void SetPosition(int i, float x, float y, float z);
|
||||||
void SetPitch(float pitch);
|
void SetPitch(float pitch);
|
||||||
void SetGain(float gain);
|
void SetGain(float gain);
|
||||||
void Pause();
|
void Pause();
|
||||||
void SetPlay(bool state);
|
void SetPlay(bool state);
|
||||||
|
|
||||||
bool FillBuffer(ALuint alBuffer);
|
bool FillBuffer(ALuint *alBuffer);
|
||||||
int32 FillBuffers();
|
int32 FillBuffers();
|
||||||
void ClearBuffers();
|
void ClearBuffers();
|
||||||
public:
|
//public:
|
||||||
static void Initialise();
|
static void Initialise();
|
||||||
static void Terminate();
|
static void Terminate();
|
||||||
|
|
||||||
CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUFFERS]);
|
CStream(ALuint *sources, ALuint (&buffers)[NUM_STREAMBUFFERS]);
|
||||||
~CStream();
|
~CStream();
|
||||||
void Delete();
|
void Delete();
|
||||||
|
bool Open(const char *filename, uint32 overrideSampleRate = 32000);
|
||||||
|
void Close();
|
||||||
|
|
||||||
bool IsOpened();
|
bool IsOpened();
|
||||||
bool IsPlaying();
|
bool IsPlaying();
|
||||||
@@ -99,10 +179,11 @@ public:
|
|||||||
uint32 GetPosMS();
|
uint32 GetPosMS();
|
||||||
uint32 GetLengthMS();
|
uint32 GetLengthMS();
|
||||||
|
|
||||||
bool Setup();
|
bool Setup(bool imSureQueueIsEmpty = false, bool lock = true);
|
||||||
void Start();
|
void Start();
|
||||||
void Stop();
|
void Stop();
|
||||||
void Update(void);
|
void Update(void);
|
||||||
|
void SetLoopCount(int32);
|
||||||
|
|
||||||
void ProviderInit();
|
void ProviderInit();
|
||||||
void ProviderTerm();
|
void ProviderTerm();
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "common.h"
|
|
||||||
#include "AudioSamples.h"
|
#include "AudioSamples.h"
|
||||||
|
#include "audio_enums.h"
|
||||||
|
|
||||||
#define MAX_VOLUME 127
|
#define MAX_VOLUME 127
|
||||||
#define MAX_FREQ DIGITALRATE
|
#define MAX_FREQ DIGITALRATE
|
||||||
|
|
||||||
struct tSample {
|
struct tSample {
|
||||||
int32 nOffset;
|
uint32 nOffset;
|
||||||
uint32 nSize;
|
uint32 nSize;
|
||||||
int32 nFrequency;
|
uint32 nFrequency;
|
||||||
int32 nLoopStart;
|
uint32 nLoopStart;
|
||||||
int32 nLoopEnd;
|
int32 nLoopEnd;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -100,10 +100,15 @@ enum
|
|||||||
|
|
||||||
#define MAXPROVIDERS 64
|
#define MAXPROVIDERS 64
|
||||||
|
|
||||||
#define MAXCHANNELS 28
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
#define MAXCHANNELS_SURROUND 24
|
#define MAXCHANNELS (NUM_CHANNELS_GENERIC+1)
|
||||||
|
#define MAXCHANNELS_SURROUND (MAXCHANNELS-4)
|
||||||
#define MAX2DCHANNELS 1
|
#define MAX2DCHANNELS 1
|
||||||
#define CHANNEL2D MAXCHANNELS
|
#else
|
||||||
|
#define MAXCHANNELS 0
|
||||||
|
#define MAXCHANNELS_SURROUND 0
|
||||||
|
#define MAX2DCHANNELS NUM_CHANNELS
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MAX_STREAMS 2
|
#define MAX_STREAMS 2
|
||||||
|
|
||||||
@@ -111,7 +116,13 @@ enum
|
|||||||
#define DIGITALBITS 16
|
#define DIGITALBITS 16
|
||||||
#define DIGITALCHANNELS 2
|
#define DIGITALCHANNELS 2
|
||||||
|
|
||||||
#define MAX_DIGITAL_MIXER_CHANNELS 32
|
#ifdef FIX_BUGS
|
||||||
|
#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2+MAX2DCHANNELS)
|
||||||
|
#else
|
||||||
|
#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static_assert( NUM_CHANNELS == MAXCHANNELS + MAX2DCHANNELS, "The number of channels doesn't match with an enum" );
|
||||||
|
|
||||||
class cSampleManager
|
class cSampleManager
|
||||||
{
|
{
|
||||||
@@ -119,10 +130,10 @@ class cSampleManager
|
|||||||
uint8 m_nMusicVolume;
|
uint8 m_nMusicVolume;
|
||||||
uint8 m_nEffectsFadeVolume;
|
uint8 m_nEffectsFadeVolume;
|
||||||
uint8 m_nMusicFadeVolume;
|
uint8 m_nMusicFadeVolume;
|
||||||
uint8 m_nMonoMode;
|
bool8 m_nMonoMode;
|
||||||
char unk;
|
char unk;
|
||||||
char m_szCDRomRootPath[80];
|
char m_szCDRomRootPath[80];
|
||||||
bool m_bInitialised;
|
bool8 m_bInitialised;
|
||||||
uint8 m_nNumberOfProviders;
|
uint8 m_nNumberOfProviders;
|
||||||
char *m_aAudioProviders[MAXPROVIDERS];
|
char *m_aAudioProviders[MAXPROVIDERS];
|
||||||
tSample m_aSamples[TOTAL_AUDIO_SAMPLES];
|
tSample m_aSamples[TOTAL_AUDIO_SAMPLES];
|
||||||
@@ -133,7 +144,8 @@ public:
|
|||||||
|
|
||||||
cSampleManager(void);
|
cSampleManager(void);
|
||||||
~cSampleManager(void);
|
~cSampleManager(void);
|
||||||
|
|
||||||
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
void SetSpeakerConfig(int32 nConfig);
|
void SetSpeakerConfig(int32 nConfig);
|
||||||
uint32 GetMaximumSupportedChannels(void);
|
uint32 GetMaximumSupportedChannels(void);
|
||||||
|
|
||||||
@@ -145,17 +157,18 @@ public:
|
|||||||
|
|
||||||
int8 GetCurrent3DProviderIndex(void);
|
int8 GetCurrent3DProviderIndex(void);
|
||||||
int8 SetCurrent3DProvider(uint8 which);
|
int8 SetCurrent3DProvider(uint8 which);
|
||||||
|
#endif
|
||||||
|
|
||||||
bool IsMP3RadioChannelAvailable(void);
|
bool8 IsMP3RadioChannelAvailable(void);
|
||||||
|
|
||||||
void ReleaseDigitalHandle (void);
|
void ReleaseDigitalHandle (void);
|
||||||
void ReacquireDigitalHandle(void);
|
void ReacquireDigitalHandle(void);
|
||||||
|
|
||||||
bool Initialise(void);
|
bool8 Initialise(void);
|
||||||
void Terminate (void);
|
void Terminate (void);
|
||||||
|
|
||||||
bool CheckForAnAudioFileOnCD(void);
|
bool8 CheckForAnAudioFileOnCD(void);
|
||||||
char GetCDAudioDriveLetter (void);
|
char GetCDAudioDriveLetter (void);
|
||||||
|
|
||||||
void UpdateEffectsVolume(void);
|
void UpdateEffectsVolume(void);
|
||||||
|
|
||||||
@@ -163,52 +176,54 @@ public:
|
|||||||
void SetMusicMasterVolume (uint8 nVolume);
|
void SetMusicMasterVolume (uint8 nVolume);
|
||||||
void SetEffectsFadeVolume (uint8 nVolume);
|
void SetEffectsFadeVolume (uint8 nVolume);
|
||||||
void SetMusicFadeVolume (uint8 nVolume);
|
void SetMusicFadeVolume (uint8 nVolume);
|
||||||
void SetMonoMode (uint8 nMode);
|
void SetMonoMode (bool8 nMode);
|
||||||
|
|
||||||
bool LoadSampleBank (uint8 nBank);
|
bool8 LoadSampleBank (uint8 nBank);
|
||||||
void UnloadSampleBank (uint8 nBank);
|
void UnloadSampleBank (uint8 nBank);
|
||||||
bool IsSampleBankLoaded(uint8 nBank);
|
int8 IsSampleBankLoaded(uint8 nBank);
|
||||||
|
|
||||||
bool IsPedCommentLoaded(uint32 nComment);
|
uint8 IsPedCommentLoaded(uint32 nComment);
|
||||||
bool LoadPedComment (uint32 nComment);
|
bool8 LoadPedComment (uint32 nComment);
|
||||||
int32 GetBankContainingSound(uint32 offset);
|
int32 GetBankContainingSound(uint32 offset);
|
||||||
|
|
||||||
int32 _GetPedCommentSlot(uint32 nComment);
|
int32 _GetPedCommentSlot(uint32 nComment);
|
||||||
|
|
||||||
int32 GetSampleBaseFrequency (uint32 nSample);
|
uint32 GetSampleBaseFrequency (uint32 nSample);
|
||||||
int32 GetSampleLoopStartOffset(uint32 nSample);
|
uint32 GetSampleLoopStartOffset(uint32 nSample);
|
||||||
int32 GetSampleLoopEndOffset (uint32 nSample);
|
int32 GetSampleLoopEndOffset (uint32 nSample);
|
||||||
uint32 GetSampleLength (uint32 nSample);
|
uint32 GetSampleLength (uint32 nSample);
|
||||||
|
|
||||||
bool UpdateReverb(void);
|
bool8 UpdateReverb(void);
|
||||||
|
|
||||||
void SetChannelReverbFlag (uint32 nChannel, uint8 nReverbFlag);
|
void SetChannelReverbFlag (uint32 nChannel, bool8 nReverbFlag);
|
||||||
bool InitialiseChannel (uint32 nChannel, uint32 nSfx, uint8 nBank);
|
bool8 InitialiseChannel (uint32 nChannel, uint32 nSfx, uint8 nBank);
|
||||||
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
void SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume);
|
void SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume);
|
||||||
void SetChannel3DPosition (uint32 nChannel, float fX, float fY, float fZ);
|
void SetChannel3DPosition (uint32 nChannel, float fX, float fY, float fZ);
|
||||||
void SetChannel3DDistances (uint32 nChannel, float fMax, float fMin);
|
void SetChannel3DDistances (uint32 nChannel, float fMax, float fMin);
|
||||||
|
#endif
|
||||||
void SetChannelVolume (uint32 nChannel, uint32 nVolume);
|
void SetChannelVolume (uint32 nChannel, uint32 nVolume);
|
||||||
void SetChannelPan (uint32 nChannel, uint32 nPan);
|
void SetChannelPan (uint32 nChannel, uint32 nPan);
|
||||||
void SetChannelFrequency (uint32 nChannel, uint32 nFreq);
|
void SetChannelFrequency (uint32 nChannel, uint32 nFreq);
|
||||||
void SetChannelLoopPoints (uint32 nChannel, uint32 nLoopStart, int32 nLoopEnd);
|
void SetChannelLoopPoints (uint32 nChannel, uint32 nLoopStart, int32 nLoopEnd);
|
||||||
void SetChannelLoopCount (uint32 nChannel, uint32 nLoopCount);
|
void SetChannelLoopCount (uint32 nChannel, uint32 nLoopCount);
|
||||||
bool GetChannelUsedFlag (uint32 nChannel);
|
bool8 GetChannelUsedFlag (uint32 nChannel);
|
||||||
void StartChannel (uint32 nChannel);
|
void StartChannel (uint32 nChannel);
|
||||||
void StopChannel (uint32 nChannel);
|
void StopChannel (uint32 nChannel);
|
||||||
|
|
||||||
void PreloadStreamedFile (uint8 nFile, uint8 nStream);
|
void PreloadStreamedFile (uint8 nFile, uint8 nStream = 0);
|
||||||
void PauseStream (uint8 nPauseFlag, uint8 nStream);
|
void PauseStream (bool8 nPauseFlag, uint8 nStream = 0);
|
||||||
void StartPreloadedStreamedFile (uint8 nStream);
|
void StartPreloadedStreamedFile (uint8 nStream = 0);
|
||||||
bool StartStreamedFile (uint8 nFile, uint32 nPos, uint8 nStream);
|
bool8 StartStreamedFile (uint8 nFile, uint32 nPos, uint8 nStream = 0);
|
||||||
void StopStreamedFile (uint8 nStream);
|
void StopStreamedFile (uint8 nStream = 0);
|
||||||
int32 GetStreamedFilePosition (uint8 nStream);
|
int32 GetStreamedFilePosition (uint8 nStream = 0);
|
||||||
void SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream);
|
void SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream = 0);
|
||||||
int32 GetStreamedFileLength (uint8 nStream);
|
int32 GetStreamedFileLength (uint8 nStream = 0);
|
||||||
bool IsStreamPlaying (uint8 nStream);
|
bool8 IsStreamPlaying (uint8 nStream = 0);
|
||||||
#ifdef AUDIO_OAL
|
#ifdef AUDIO_OAL
|
||||||
void Service(void);
|
void Service(void);
|
||||||
#endif
|
#endif
|
||||||
bool InitialiseSampleBanks(void);
|
bool8 InitialiseSampleBanks(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern cSampleManager SampleManager;
|
extern cSampleManager SampleManager;
|
||||||
@@ -218,7 +233,7 @@ extern uint32 BankStartOffset[MAX_SFX_BANKS];
|
|||||||
extern int defaultProvider;
|
extern int defaultProvider;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AUDIO_OPUS
|
#if defined(OPUS_AUDIO_PATHS)
|
||||||
static char StreamedNameTable[][25] = {
|
static char StreamedNameTable[][25] = {
|
||||||
"AUDIO\\HEAD.OPUS", "AUDIO\\CLASS.OPUS", "AUDIO\\KJAH.OPUS", "AUDIO\\RISE.OPUS", "AUDIO\\LIPS.OPUS", "AUDIO\\GAME.OPUS",
|
"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\\MSX.OPUS", "AUDIO\\FLASH.OPUS", "AUDIO\\CHAT.OPUS", "AUDIO\\HEAD.OPUS", "AUDIO\\POLICE.OPUS", "AUDIO\\CITY.OPUS",
|
||||||
@@ -254,9 +269,9 @@ static char StreamedNameTable[][25] = {
|
|||||||
"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\\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"};
|
"AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"};
|
||||||
#else
|
#else
|
||||||
static char StreamedNameTable[][25]=
|
#ifdef PS2_AUDIO_PATHS
|
||||||
|
static char PS2StreamedNameTable[][25]=
|
||||||
{
|
{
|
||||||
#ifdef PS2_AUDIO
|
|
||||||
"AUDIO\\MUSIC\\HEAD.VB",
|
"AUDIO\\MUSIC\\HEAD.VB",
|
||||||
"AUDIO\\MUSIC\\CLASS.VB",
|
"AUDIO\\MUSIC\\CLASS.VB",
|
||||||
"AUDIO\\MUSIC\\KJAH.VB",
|
"AUDIO\\MUSIC\\KJAH.VB",
|
||||||
@@ -352,7 +367,112 @@ static char StreamedNameTable[][25]=
|
|||||||
"AUDIO\\PHONE\\MT_PH4.VB",
|
"AUDIO\\PHONE\\MT_PH4.VB",
|
||||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||||
"AUDIO\\MUSIC\\END.VB",
|
"AUDIO\\MUSIC\\END.VB",
|
||||||
#else
|
"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\\HEAD.WAV",
|
||||||
"AUDIO\\CLASS.WAV",
|
"AUDIO\\CLASS.WAV",
|
||||||
"AUDIO\\KJAH.WAV",
|
"AUDIO\\KJAH.WAV",
|
||||||
@@ -448,7 +568,6 @@ static char StreamedNameTable[][25]=
|
|||||||
"AUDIO\\MT_PH4.MP3",
|
"AUDIO\\MT_PH4.MP3",
|
||||||
"AUDIO\\MISCOM.WAV",
|
"AUDIO\\MISCOM.WAV",
|
||||||
"AUDIO\\END.MP3",
|
"AUDIO\\END.MP3",
|
||||||
#endif
|
|
||||||
"AUDIO\\lib_a1.WAV",
|
"AUDIO\\lib_a1.WAV",
|
||||||
"AUDIO\\lib_a2.WAV",
|
"AUDIO\\lib_a2.WAV",
|
||||||
"AUDIO\\lib_a.WAV",
|
"AUDIO\\lib_a.WAV",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
|||||||
#include "AudioManager.h"
|
#include "AudioManager.h"
|
||||||
|
|
||||||
cSampleManager SampleManager;
|
cSampleManager SampleManager;
|
||||||
bool _bSampmanInitialised = false;
|
bool8 _bSampmanInitialised = FALSE;
|
||||||
|
|
||||||
uint32 BankStartOffset[MAX_SFX_BANKS];
|
uint32 BankStartOffset[MAX_SFX_BANKS];
|
||||||
uint32 nNumMP3s;
|
uint32 nNumMP3s;
|
||||||
@@ -19,6 +19,7 @@ cSampleManager::~cSampleManager(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
void cSampleManager::SetSpeakerConfig(int32 nConfig)
|
void cSampleManager::SetSpeakerConfig(int32 nConfig)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -59,8 +60,9 @@ int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::IsMP3RadioChannelAvailable(void)
|
cSampleManager::IsMP3RadioChannelAvailable(void)
|
||||||
{
|
{
|
||||||
return nNumMP3s != 0;
|
return nNumMP3s != 0;
|
||||||
@@ -75,10 +77,10 @@ void cSampleManager::ReacquireDigitalHandle(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::Initialise(void)
|
cSampleManager::Initialise(void)
|
||||||
{
|
{
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -87,9 +89,9 @@ cSampleManager::Terminate(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cSampleManager::CheckForAnAudioFileOnCD(void)
|
bool8 cSampleManager::CheckForAnAudioFileOnCD(void)
|
||||||
{
|
{
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
char cSampleManager::GetCDAudioDriveLetter(void)
|
char cSampleManager::GetCDAudioDriveLetter(void)
|
||||||
@@ -128,11 +130,11 @@ cSampleManager::SetMonoMode(uint8 nMode)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::LoadSampleBank(uint8 nBank)
|
cSampleManager::LoadSampleBank(uint8 nBank)
|
||||||
{
|
{
|
||||||
ASSERT( nBank < MAX_SFX_BANKS );
|
ASSERT( nBank < MAX_SFX_BANKS );
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -141,20 +143,20 @@ cSampleManager::UnloadSampleBank(uint8 nBank)
|
|||||||
ASSERT( nBank < MAX_SFX_BANKS );
|
ASSERT( nBank < MAX_SFX_BANKS );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
int8
|
||||||
cSampleManager::IsSampleBankLoaded(uint8 nBank)
|
cSampleManager::IsSampleBankLoaded(uint8 nBank)
|
||||||
{
|
{
|
||||||
ASSERT( nBank < MAX_SFX_BANKS );
|
ASSERT( nBank < MAX_SFX_BANKS );
|
||||||
|
|
||||||
return false;
|
return LOADING_STATUS_NOT_LOADED;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
uint8
|
||||||
cSampleManager::IsPedCommentLoaded(uint32 nComment)
|
cSampleManager::IsPedCommentLoaded(uint32 nComment)
|
||||||
{
|
{
|
||||||
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
||||||
|
|
||||||
return false;
|
return LOADING_STATUS_NOT_LOADED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -164,11 +166,11 @@ cSampleManager::_GetPedCommentSlot(uint32 nComment)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::LoadPedComment(uint32 nComment)
|
cSampleManager::LoadPedComment(uint32 nComment)
|
||||||
{
|
{
|
||||||
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
ASSERT( nComment < TOTAL_AUDIO_SAMPLES );
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32
|
int32
|
||||||
@@ -177,14 +179,14 @@ cSampleManager::GetBankContainingSound(uint32 offset)
|
|||||||
return INVALID_SFX_BANK;
|
return INVALID_SFX_BANK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32
|
uint32
|
||||||
cSampleManager::GetSampleBaseFrequency(uint32 nSample)
|
cSampleManager::GetSampleBaseFrequency(uint32 nSample)
|
||||||
{
|
{
|
||||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32
|
uint32
|
||||||
cSampleManager::GetSampleLoopStartOffset(uint32 nSample)
|
cSampleManager::GetSampleLoopStartOffset(uint32 nSample)
|
||||||
{
|
{
|
||||||
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
ASSERT( nSample < TOTAL_AUDIO_SAMPLES );
|
||||||
@@ -205,56 +207,58 @@ cSampleManager::GetSampleLength(uint32 nSample)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cSampleManager::UpdateReverb(void)
|
bool8 cSampleManager::UpdateReverb(void)
|
||||||
{
|
{
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag)
|
cSampleManager::SetChannelReverbFlag(uint32 nChannel, bool8 nReverbFlag)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EXTERNAL_3D_SOUND
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume)
|
cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel != CHANNEL2D );
|
ASSERT( nChannel < MAXCHANNELS );
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannel3DPosition(uint32 nChannel, float fX, float fY, float fZ)
|
cSampleManager::SetChannel3DPosition(uint32 nChannel, float fX, float fY, float fZ)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel != CHANNEL2D );
|
ASSERT( nChannel < MAXCHANNELS );
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannel3DDistances(uint32 nChannel, float fMax, float fMin)
|
cSampleManager::SetChannel3DDistances(uint32 nChannel, float fMax, float fMin)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel != CHANNEL2D );
|
ASSERT( nChannel < MAXCHANNELS );
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume)
|
cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel == CHANNEL2D );
|
ASSERT( nChannel >= MAXCHANNELS );
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan)
|
cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan)
|
||||||
{
|
{
|
||||||
ASSERT(nChannel == CHANNEL2D);
|
ASSERT( nChannel >= MAXCHANNELS );
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,12 +280,12 @@ cSampleManager::SetChannelLoopCount(uint32 nChannel, uint32 nLoopCount)
|
|||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::GetChannelUsedFlag(uint32 nChannel)
|
cSampleManager::GetChannelUsedFlag(uint32 nChannel)
|
||||||
{
|
{
|
||||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -303,7 +307,7 @@ cSampleManager::PreloadStreamedFile(uint8 nFile, uint8 nStream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cSampleManager::PauseStream(uint8 nPauseFlag, uint8 nStream)
|
cSampleManager::PauseStream(bool8 nPauseFlag, uint8 nStream)
|
||||||
{
|
{
|
||||||
ASSERT( nStream < MAX_STREAMS );
|
ASSERT( nStream < MAX_STREAMS );
|
||||||
}
|
}
|
||||||
@@ -314,12 +318,12 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
|||||||
ASSERT( nStream < MAX_STREAMS );
|
ASSERT( nStream < MAX_STREAMS );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
{
|
{
|
||||||
ASSERT( nStream < MAX_STREAMS );
|
ASSERT( nStream < MAX_STREAMS );
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -350,19 +354,19 @@ cSampleManager::GetStreamedFileLength(uint8 nStream)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::IsStreamPlaying(uint8 nStream)
|
cSampleManager::IsStreamPlaying(uint8 nStream)
|
||||||
{
|
{
|
||||||
ASSERT( nStream < MAX_STREAMS );
|
ASSERT( nStream < MAX_STREAMS );
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool8
|
||||||
cSampleManager::InitialiseSampleBanks(void)
|
cSampleManager::InitialiseSampleBanks(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -160,7 +160,7 @@ enum eSound
|
|||||||
SOUND_FRONTEND_MONO,
|
SOUND_FRONTEND_MONO,
|
||||||
SOUND_FRONTEND_AUDIO_TEST,
|
SOUND_FRONTEND_AUDIO_TEST,
|
||||||
SOUND_FRONTEND_FAIL,
|
SOUND_FRONTEND_FAIL,
|
||||||
SOUND_FRONTEND_NO_RADIO,
|
SOUND_FRONTEND_RADIO_TURN_OFF,
|
||||||
SOUND_FRONTEND_RADIO_CHANGE,
|
SOUND_FRONTEND_RADIO_CHANGE,
|
||||||
SOUND_HUD,
|
SOUND_HUD,
|
||||||
SOUND_AMMUNATION_WELCOME_1,
|
SOUND_AMMUNATION_WELCOME_1,
|
||||||
@@ -212,8 +212,8 @@ enum eScriptSounds {
|
|||||||
SCRIPT_SOUND_WORK_SHOP_LOOP_L,
|
SCRIPT_SOUND_WORK_SHOP_LOOP_L,
|
||||||
SCRIPT_SOUND_SAWMILL_LOOP_S,
|
SCRIPT_SOUND_SAWMILL_LOOP_S,
|
||||||
SCRIPT_SOUND_SAWMILL_LOOP_L,
|
SCRIPT_SOUND_SAWMILL_LOOP_L,
|
||||||
SCRIPT_SOUND_38,
|
SCRIPT_SOUND_DOG_FOOD_FACTORY_S,
|
||||||
SCRIPT_SOUND_39,
|
SCRIPT_SOUND_DOG_FOOD_FACTORY_L,
|
||||||
SCRIPT_SOUND_LAUNDERETTE_LOOP_S,
|
SCRIPT_SOUND_LAUNDERETTE_LOOP_S,
|
||||||
SCRIPT_SOUND_LAUNDERETTE_LOOP_L,
|
SCRIPT_SOUND_LAUNDERETTE_LOOP_L,
|
||||||
SCRIPT_SOUND_CHINATOWN_RESTAURANT_S,
|
SCRIPT_SOUND_CHINATOWN_RESTAURANT_S,
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
#include "Streaming.h"
|
#include "Streaming.h"
|
||||||
#include "Pools.h"
|
#include "Pools.h"
|
||||||
|
|
||||||
void *CBuilding::operator new(size_t sz) { return CPools::GetBuildingPool()->New(); }
|
void *CBuilding::operator new(size_t sz) throw() { return CPools::GetBuildingPool()->New(); }
|
||||||
void CBuilding::operator delete(void *p, size_t sz) { CPools::GetBuildingPool()->Delete((CBuilding*)p); }
|
void CBuilding::operator delete(void *p, size_t sz) throw() { CPools::GetBuildingPool()->Delete((CBuilding*)p); }
|
||||||
|
|
||||||
void
|
void
|
||||||
CBuilding::ReplaceWithNewModel(int32 id)
|
CBuilding::ReplaceWithNewModel(int32 id)
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ public:
|
|||||||
m_type = ENTITY_TYPE_BUILDING;
|
m_type = ENTITY_TYPE_BUILDING;
|
||||||
bUsesCollision = true;
|
bUsesCollision = true;
|
||||||
}
|
}
|
||||||
static void *operator new(size_t);
|
static void *operator new(size_t) throw();
|
||||||
static void operator delete(void*, size_t);
|
static void operator delete(void*, size_t) throw();
|
||||||
|
|
||||||
void ReplaceWithNewModel(int32 id);
|
void ReplaceWithNewModel(int32 id);
|
||||||
|
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
#include "Treadable.h"
|
#include "Treadable.h"
|
||||||
#include "Pools.h"
|
#include "Pools.h"
|
||||||
|
|
||||||
void *CTreadable::operator new(size_t sz) { return CPools::GetTreadablePool()->New(); }
|
void *CTreadable::operator new(size_t sz) throw() { return CPools::GetTreadablePool()->New(); }
|
||||||
void CTreadable::operator delete(void *p, size_t sz) { CPools::GetTreadablePool()->Delete((CTreadable*)p); }
|
void CTreadable::operator delete(void *p, size_t sz) throw() { CPools::GetTreadablePool()->Delete((CTreadable*)p); }
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
class CTreadable : public CBuilding
|
class CTreadable : public CBuilding
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void *operator new(size_t);
|
static void *operator new(size_t) throw();
|
||||||
static void operator delete(void*, size_t);
|
static void operator delete(void*, size_t) throw();
|
||||||
|
|
||||||
int16 m_nodeIndices[2][12]; // first car, then ped
|
int16 m_nodeIndices[2][12]; // first car, then ped
|
||||||
|
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ GetCollisionInSectorList(CPtrList &list)
|
|||||||
|
|
||||||
for(node = list.first; node; node = node->next){
|
for(node = list.first; node; node = node->next){
|
||||||
e = (CEntity*)node->item;
|
e = (CEntity*)node->item;
|
||||||
level = CModelInfo::GetModelInfo(e->GetModelIndex())->GetColModel()->level;
|
level = CModelInfo::GetColModel(e->GetModelIndex())->level;
|
||||||
if(level != LEVEL_GENERIC)
|
if(level != LEVEL_GENERIC)
|
||||||
return (eLevelName)level;
|
return (eLevelName)level;
|
||||||
}
|
}
|
||||||
@@ -477,8 +477,16 @@ CCollision::TestLineTriangle(const CColLine &line, const CompressedVector *verts
|
|||||||
if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f)
|
if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
float p0dist = DotProduct(line.p1 - line.p0, normal);
|
||||||
|
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
// line lines in the plane, assume no collision
|
||||||
|
if (p0dist == 0.0f)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
// intersection parameter on line
|
// intersection parameter on line
|
||||||
t = -plane.CalcPoint(line.p0) / DotProduct(line.p1 - line.p0, normal);
|
t = -plane.CalcPoint(line.p0) / p0dist;
|
||||||
// find point of intersection
|
// find point of intersection
|
||||||
CVector p = line.p0 + (line.p1-line.p0)*t;
|
CVector p = line.p0 + (line.p1-line.p0)*t;
|
||||||
|
|
||||||
@@ -1286,8 +1294,17 @@ CCollision::ProcessLineTriangle(const CColLine &line,
|
|||||||
if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f)
|
if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
float p0dist = DotProduct(line.p1 - line.p0, normal);
|
||||||
|
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
// line lines in the plane, assume no collision
|
||||||
|
if (p0dist == 0.0f)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
// intersection parameter on line
|
// intersection parameter on line
|
||||||
t = -plane.CalcPoint(line.p0) / DotProduct(line.p1 - line.p0, normal);
|
t = -plane.CalcPoint(line.p0) / p0dist;
|
||||||
|
|
||||||
// early out if we're beyond the mindist
|
// early out if we're beyond the mindist
|
||||||
if(t >= mindist)
|
if(t >= mindist)
|
||||||
return false;
|
return false;
|
||||||
@@ -2245,12 +2262,12 @@ CCollision::DistToLine(const CVector *l0, const CVector *l1, const CVector *poin
|
|||||||
float dot = DotProduct(*point - *l0, *l1 - *l0);
|
float dot = DotProduct(*point - *l0, *l1 - *l0);
|
||||||
// Between 0 and len we're above the line.
|
// Between 0 and len we're above the line.
|
||||||
// if not, calculate distance to endpoint
|
// if not, calculate distance to endpoint
|
||||||
if(dot <= 0.0f)
|
if(dot <= 0.0f) return (*point - *l0).Magnitude();
|
||||||
return (*point - *l0).Magnitude();
|
if(dot >= lensq) return (*point - *l1).Magnitude();
|
||||||
if(dot >= lensq)
|
|
||||||
return (*point - *l1).Magnitude();
|
|
||||||
// distance to line
|
// distance to line
|
||||||
return Sqrt((*point - *l0).MagnitudeSqr() - dot*dot/lensq);
|
float distSqr = (*point - *l0).MagnitudeSqr() - dot * dot / lensq;
|
||||||
|
if(distSqr <= 0.f) return 0.f;
|
||||||
|
return Sqrt(distSqr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// same as above but also return the point on the line
|
// same as above but also return the point on the line
|
||||||
@@ -2733,4 +2750,4 @@ CCollision::DrawColModel_Coloured(const CMatrix &mat, const CColModel &colModel,
|
|||||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
||||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
||||||
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
|
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include "TempColModels.h"
|
#include "TempColModels.h"
|
||||||
|
#include "Game.h"
|
||||||
|
|
||||||
CColModel CTempColModels::ms_colModelPed1;
|
CColModel CTempColModels::ms_colModelPed1;
|
||||||
CColModel CTempColModels::ms_colModelPed2;
|
CColModel CTempColModels::ms_colModelPed2;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Collision.h"
|
#include "ColModel.h"
|
||||||
|
|
||||||
class CTempColModels
|
class CTempColModels
|
||||||
{
|
{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user