We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
Shenmue/Source Code
< Shenmue
Jump to navigation
Jump to search
This is a sub-page of Shenmue.
Two large C code files were left in the game. SEQCONV.C comes with a 25.4KB SEQCONV.O file, which is its compiled counterpart.
![]() |
Download SEQCONV.O
File: Shenmue-SEQCONV-O.zip (9 KB) (info)
|
Disc 4
...But what does it mean? This game has text or audio that needs to be translated. If you are fluent with this language, please read our translation guidelines and then submit a translation! |
\SCENE\99\MS08\0154_1.C
FCVKEYt camX[] = { { 0.000000, 0.000000, 0.000000, -17.920521 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -17.920521 }, /* 1 */ { 0.500000, 0.000000, 0.000000, -17.920521 }, /* 14 */ { 0.533333, 0.000000, 0.000000, -18.790796 }, /* 16 */ { 1.166667, 0.000000, 0.000000, -18.790796 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -17.713282 }, /* 35 */ { 2.833333, 0.000000, 0.000000, -17.713282 }, /* 84 */ { 2.866666, -0.213518, -0.213518, -17.481289 }, /* 85 */ { 6.333332, -0.243924, -0.243924, -18.412258 }, /* 189 */ { 6.366668, 0.000636, 0.000636, -19.728035 }, /* 191 */ { 6.400001, 0.000000, 0.000000, -19.728035 }, /* 192 */ { 7.466667, 0.186229, 0.000000, -19.512451 }, /* 224 */ { 9.499997, 0.000000, 0.000000, -19.512451 }, /* 284 */ { 9.533330, 0.000000, 0.000000, -19.003939 }, /* 285 */ { 11.833333, 0.000000, 0.000000, -19.003939 }, /* 354 */ { 11.866666, 0.000000, 0.000000, -21.080954 }, /* 355 */ { 14.499993, 0.000000, 0.000000, -21.080954 }, /* 434 */ { 14.533326, 0.000000, 0.000000, -18.912323 }, /* 435 */ { 15.999993, 0.000000, 0.000000, -18.912323 }, /* 479 */ { 16.033325, 0.019806, 0.019806, -19.758411 }, /* 480 */ { 20.333328, 0.021188, 0.021188, -19.633121 }, /* 609 */ { 20.366661, 0.000000, 0.000000, -19.879799 }, /* 610 */ { 26.666666, 0.000000, 0.000000, -19.879799 }, /* 799 */ { 26.700001, 0.000000, 0.000000, -18.618357 }, /* 801 */ { 28.833334, 0.000000, 0.000000, -18.580397 }, /* 865 */ { 28.866665, 0.045700, 0.045700, -24.547550 }, /* 865 */ { 38.666672, 0.033551, 0.033551, -24.118729 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, -20.247274 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, -20.295513 }, /* 1290 */ { 43.033340, -0.011102, -0.011102, -20.088829 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, -20.111118 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, -20.185917 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, -20.173235 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, -20.173235 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, -20.172125 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, -20.082100 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -20.123055 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, -20.123055 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, -20.413557 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, -20.413557 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -20.413557 }, /* 2140 */ }; FCVKEYt camY[] = { { 0.000000, 0.000000, 0.000000, 1.554671 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 1.554671 }, /* 1 */ { 0.500000, 0.000000, 0.000000, 1.554671 }, /* 14 */ { 0.533333, 0.000000, 0.000000, 0.107291 }, /* 16 */ { 1.166667, 0.000000, 0.000000, 0.107290 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 2.308871 }, /* 35 */ { 2.833333, 0.000000, 0.000000, 2.308871 }, /* 84 */ { 2.866666, 0.000000, 0.000000, 1.046567 }, /* 85 */ { 6.333333, 0.000000, 0.000000, 1.040772 }, /* 189 */ { 6.366668, 0.015645, 0.015645, 1.388480 }, /* 191 */ { 6.400001, 0.000000, 0.000000, 1.388480 }, /* 192 */ { 7.466667, -0.245911, 0.000000, 1.181751 }, /* 224 */ { 9.499997, 0.000000, 0.000000, 1.181751 }, /* 284 */ { 9.533330, 0.000000, 0.000000, 0.651900 }, /* 285 */ { 11.833333, 0.000000, 0.000000, 0.651900 }, /* 354 */ { 11.866666, 0.000000, 0.000000, 0.154808 }, /* 355 */ { 14.499993, 0.000000, 0.000000, 0.154808 }, /* 434 */ { 14.533326, 0.000000, 0.000000, 1.502953 }, /* 435 */ { 15.999993, 0.000000, 0.000000, 1.502953 }, /* 479 */ { 16.033325, 0.000000, 0.000000, 0.637179 }, /* 480 */ { 20.333328, 0.000000, 0.000000, 0.777887 }, /* 609 */ { 20.366661, 0.000000, 0.000000, 4.173497 }, /* 610 */ { 26.666666, 0.000000, 0.000000, 3.982877 }, /* 799 */ { 26.700001, 0.000000, 0.000000, 1.360884 }, /* 801 */ { 28.833334, 0.000000, 0.000000, 1.445840 }, /* 865 */ { 28.866665, -0.090050, -0.090050, 10.662257 }, /* 865 */ { 38.666672, -0.079441, -0.079441, 9.797918 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, 1.617617 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, 1.617617 }, /* 1290 */ { 43.033340, 0.000000, 0.000000, 1.596333 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, 1.595925 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, 1.474199 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, 1.497543 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, 1.497543 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, 1.536094 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, 1.542578 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, 1.805117 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, 1.773207 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, 1.150182 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, 1.150182 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 1.150182 }, /* 2140 */ }; FCVKEYt camZ[] = { { 0.000000, 0.000000, 0.000000, -11.944542 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -11.944542 }, /* 1 */ { 0.500000, 0.000000, 0.000000, -11.944542 }, /* 14 */ { 0.533333, 0.000000, 0.000000, -11.620082 }, /* 16 */ { 1.166667, 0.000000, 0.000000, -11.620082 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -11.286220 }, /* 35 */ { 2.833333, 0.000000, 0.000000, -11.286220 }, /* 84 */ { 2.866666, 0.000000, 0.000000, -10.031123 }, /* 85 */ { 6.333332, 0.000000, 0.000000, -10.211745 }, /* 189 */ { 6.366668, -0.020819, -0.020819, -14.161451 }, /* 191 */ { 6.400001, 0.000000, 0.000000, -14.161451 }, /* 192 */ { 7.466667, 0.676449, 0.000000, -13.651398 }, /* 224 */ { 9.499997, 0.000000, 0.000000, -13.651398 }, /* 284 */ { 9.533330, 0.000000, 0.000000, -13.293118 }, /* 285 */ { 11.833333, 0.000000, 0.000000, -13.293118 }, /* 354 */ { 11.866666, 0.000000, 0.000000, -15.098112 }, /* 355 */ { 14.499993, 0.000000, 0.000000, -15.098112 }, /* 434 */ { 14.533326, 0.000000, 0.000000, -12.934105 }, /* 435 */ { 15.999993, 0.000000, 0.000000, -12.934105 }, /* 479 */ { 16.033325, 0.000000, 0.000000, -11.127069 }, /* 480 */ { 20.333328, 0.000000, 0.000000, -11.488962 }, /* 609 */ { 20.366661, 0.000000, 0.000000, -18.693596 }, /* 610 */ { 26.666666, 0.000000, 0.000000, -18.693596 }, /* 799 */ { 26.700001, 0.000000, 0.000000, -13.254105 }, /* 801 */ { 28.833334, 0.000000, 0.000000, -13.090749 }, /* 865 */ { 28.866665, -0.070434, -0.070434, -7.815206 }, /* 865 */ { 38.666672, -0.057214, -0.057214, -8.482251 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, -12.344294 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, -12.344294 }, /* 1290 */ { 43.033340, 0.028862, 0.028862, -14.476007 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, -14.417938 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, -13.514585 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, -13.697420 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, -13.697420 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, -13.503355 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, -13.649759 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -12.797223 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, -12.797223 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, -13.449550 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, -13.449550 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -13.449550 }, /* 2140 */ }; FCVKEYt intX[] = { { 0.000000, 0.000000, 0.000000, -17.523552 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -17.523552 }, /* 1 */ { 0.500000, 0.000000, 0.000000, -17.523552 }, /* 14 */ { 0.533333, 0.000000, 0.000000, -17.523552 }, /* 16 */ { 1.166667, 0.000000, 0.000000, -17.523552 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -17.570131 }, /* 35 */ { 2.833333, 0.000000, 0.000000, -17.570131 }, /* 84 */ { 2.866666, 0.000000, 0.000000, -17.354692 }, /* 85 */ { 6.333332, -0.051345, -0.051345, -17.651344 }, /* 189 */ { 6.366668, 0.000000, 0.000000, -19.682545 }, /* 191 */ { 6.400001, 0.000000, 0.000000, -19.682545 }, /* 192 */ { 7.466667, 0.482158, 0.000000, -19.138041 }, /* 224 */ { 9.499997, 0.000000, 0.000000, -19.138041 }, /* 284 */ { 9.533330, 0.000000, 0.000000, -18.435619 }, /* 285 */ { 11.833333, 0.000000, 0.000000, -18.435619 }, /* 354 */ { 11.866666, 0.000000, 0.000000, -18.375265 }, /* 355 */ { 14.499993, 0.000000, 0.000000, -18.375265 }, /* 434 */ { 14.533326, 0.000000, 0.000000, -18.173725 }, /* 435 */ { 15.999993, 0.000000, 0.000000, -18.173725 }, /* 479 */ { 16.033325, 0.000000, 0.000000, -16.984381 }, /* 480 */ { 20.333328, 0.000000, 0.000000, -16.984381 }, /* 609 */ { 20.366661, 0.000000, 0.000000, -18.308365 }, /* 610 */ { 26.666666, 0.000000, 0.000000, -18.308365 }, /* 799 */ { 26.700001, 0.000000, 0.000000, -18.370424 }, /* 801 */ { 28.833334, 0.000000, 0.000000, -18.370424 }, /* 865 */ { 28.866665, 0.000000, 0.000000, -19.848255 }, /* 865 */ { 38.666672, 0.000000, 0.000000, -19.848255 }, /* 1160 */ { 38.700005, 0.112252, 0.112252, -20.104225 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, -19.165730 }, /* 1290 */ { 43.033340, 0.000000, 0.000000, -19.588610 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, -19.588610 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, -19.936789 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, -19.858381 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, -19.858381 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, -19.859219 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, -19.859219 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -19.599649 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, -19.599649 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, -19.734402 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, -19.717907 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -19.717907 }, /* 2140 */ }; FCVKEYt intY[] = { { 0.000000, 0.000000, 0.000000, 1.529601 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 1.529601 }, /* 1 */ { 0.500000, 0.000000, 0.000000, 1.529601 }, /* 14 */ { 0.533333, 0.000000, 0.000000, 1.529601 }, /* 16 */ { 1.166667, 0.000000, 0.000000, 1.547666 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 0.383686 }, /* 35 */ { 2.833333, 0.000000, 0.000000, 0.383686 }, /* 84 */ { 2.866666, 0.000000, 0.000000, 1.196056 }, /* 85 */ { 6.333332, 0.000000, 0.000000, 1.190261 }, /* 189 */ { 6.366667, 0.000000, 0.000000, 1.818852 }, /* 191 */ { 6.400001, 0.000000, 0.000000, 1.818852 }, /* 192 */ { 7.466667, -0.458403, 0.000000, 1.323532 }, /* 224 */ { 9.499997, 0.000000, 0.000000, 1.323532 }, /* 284 */ { 9.533330, 0.000000, 0.000000, 1.400898 }, /* 285 */ { 11.833333, 0.000000, 0.000000, 1.400898 }, /* 354 */ { 11.866666, 0.000000, 0.000000, 1.507450 }, /* 355 */ { 14.499993, 0.000000, 0.000000, 1.507450 }, /* 434 */ { 14.533326, 0.000000, 0.000000, 1.645223 }, /* 435 */ { 15.999993, 0.000000, 0.000000, 1.645223 }, /* 479 */ { 16.033325, 0.000000, 0.000000, 3.752608 }, /* 480 */ { 20.333328, 0.000000, 0.000000, 3.752608 }, /* 609 */ { 20.366661, 0.000000, 0.000000, 4.677533 }, /* 610 */ { 26.666666, 0.000000, 0.000000, 4.486913 }, /* 799 */ { 26.700001, 0.000000, 0.000000, 1.915810 }, /* 801 */ { 28.833334, 0.000000, 0.000000, 1.915810 }, /* 865 */ { 28.866665, 0.000000, 0.000000, 1.190371 }, /* 865 */ { 38.666672, 0.000000, 0.000000, 1.190371 }, /* 1160 */ { 38.700005, 0.000000, 0.000000, 1.401365 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, 1.401365 }, /* 1290 */ { 43.033340, 0.000000, 0.000000, 1.457290 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, 1.457290 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, 1.496310 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, 1.301381 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, 1.301381 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, 1.558205 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, 1.558205 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, 1.336141 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, 1.362603 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, 1.524192 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, 1.585494 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 1.585494 }, /* 2140 */ }; FCVKEYt intZ[] = { { 0.000000, 0.000000, 0.000000, -11.661756 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -11.661756 }, /* 1 */ { 0.500000, 0.000000, 0.000000, -11.661756 }, /* 14 */ { 0.533333, 0.000000, 0.000000, -11.661756 }, /* 16 */ { 1.166667, 0.000000, 0.000000, -11.661756 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -11.586548 }, /* 35 */ { 2.833333, 0.000000, 0.000000, -11.586548 }, /* 84 */ { 2.866666, 0.000000, 0.000000, -13.270169 }, /* 85 */ { 6.333332, 0.000000, 0.000000, -13.352284 }, /* 189 */ { 6.366668, 0.000000, 0.000000, -14.947390 }, /* 191 */ { 6.400001, 0.000000, 0.000000, -14.947390 }, /* 192 */ { 7.466667, 0.000000, 0.000000, -14.938190 }, /* 224 */ { 9.499997, 0.000000, 0.000000, -14.938190 }, /* 284 */ { 9.533330, 0.000000, 0.000000, -12.123504 }, /* 285 */ { 11.833333, 0.000000, 0.000000, -12.123504 }, /* 354 */ { 11.866666, 0.000000, 0.000000, -13.497293 }, /* 355 */ { 14.499993, 0.000000, 0.000000, -13.497293 }, /* 434 */ { 14.533326, 0.000000, 0.000000, -11.995175 }, /* 435 */ { 15.999993, 0.000000, 0.000000, -11.995175 }, /* 479 */ { 16.033325, 0.000000, 0.000000, -19.139805 }, /* 480 */ { 20.333328, 0.000000, 0.000000, -19.139805 }, /* 609 */ { 20.366661, 0.000000, 0.000000, -19.245077 }, /* 610 */ { 26.666666, 0.000000, 0.000000, -19.245077 }, /* 799 */ { 26.700001, 0.000000, 0.000000, -12.187070 }, /* 801 */ { 28.833334, 0.000000, 0.000000, -12.187070 }, /* 865 */ { 28.866665, 0.000000, 0.000000, -15.125110 }, /* 865 */ { 38.666672, 0.000000, 0.000000, -15.125110 }, /* 1160 */ { 38.700005, 0.000000, 0.000000, -15.912962 }, /* 1161 */ { 43.000000, 0.000000, 0.000000, -15.912962 }, /* 1290 */ { 43.033340, 0.000000, 0.000000, -12.812093 }, /* 1291 */ { 45.666668, 0.000000, 0.000000, -12.812093 }, /* 1370 */ { 45.700001, 0.000000, 0.000000, -12.662916 }, /* 1371 */ { 50.000000, 0.000000, 0.000000, -13.462975 }, /* 1500 */ { 51.333332, 0.000000, 0.000000, -13.462975 }, /* 1539 */ { 51.366665, 0.000000, 0.000000, -14.002617 }, /* 1540 */ { 55.666668, 0.000000, 0.000000, -14.002617 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -13.992125 }, /* 1671 */ { 64.333336, 0.000000, 0.000000, -13.992125 }, /* 1930 */ { 64.366669, 0.000000, 0.000000, -14.054812 }, /* 1931 */ { 71.333336, 0.000000, 0.000000, -14.259069 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -14.259069 }, /* 2140 */ }; FCVKEYt pers[] = { { 0.000000, 0.000000, 0.000000, 55.385674 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 55.385674 }, /* 1 */ { 1.166667, 0.000000, 0.000000, 55.385674 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 39.320164 }, /* 35 */ { 2.833333, 0.000000, 0.000000, 39.320164 }, /* 84 */ { 2.866666, 0.000000, 0.000000, 55.385674 }, /* 85 */ { 71.333336, 0.000000, 0.000000, 55.385674 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 55.385674 }, /* 2140 */ }; FCVKEYt roll[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 1.166667, 0.000000, 0.000000, 0.000000 }, /* 34 */ { 1.199999, 0.000000, 0.000000, 0.538027 }, /* 35 */ { 2.833333, 0.000000, 0.000000, 0.538027 }, /* 84 */ { 2.866666, 0.000000, 0.000000, 0.000000 }, /* 85 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; Camera CamAll[] = { { 1, 2140, camX, 41, camY, 41, camZ, 41, intX, 41, intY, 41, intZ, 41, pers, 8, roll, 6 }, }; FCVKEYt MV_SARA_trsX[] = { { 0.000000, 0.000000, 0.000000, -17.634001 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -17.634001 }, /* 1 */ { 0.366667, 0.015472, 0.015472, -17.625385 }, /* 11 */ { 0.633333, 0.093887, 0.093887, -17.615255 }, /* 18 */ { 0.666667, 0.000000, 0.000000, -17.611744 }, /* 19 */ { 1.166667, 0.000000, 0.000000, -17.611744 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -17.611744 }, /* 35 */ { 71.333336, 0.000000, 0.000000, -17.611744 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -17.611744 }, /* 2140 */ }; FCVKEYt MV_SARA_trsY[] = { { 0.000000, 0.000000, 0.000000, 1.400476 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 1.400476 }, /* 1 */ { 0.333333, 0.008032, 0.008032, 1.410520 }, /* 9 */ { 0.633333, -0.180304, -0.180304, 1.393197 }, /* 18 */ { 0.666667, 0.000000, 0.000000, 1.386427 }, /* 19 */ { 1.166667, -2.037064, -2.037064, 1.014027 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -0.462373 }, /* 35 */ { 71.333336, 0.000000, 0.000000, -0.462373 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -0.462373 }, /* 2140 */ }; FCVKEYt MV_SARA_trsZ[] = { { 0.000000, 0.000000, 0.000000, -11.732664 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -11.732664 }, /* 1 */ { 0.233333, 0.083130, 0.083130, -11.720198 }, /* 7 */ { 0.666667, 0.000000, 0.000000, -11.681818 }, /* 19 */ { 1.166667, 0.000000, 0.000000, -11.681818 }, /* 34 */ { 1.200000, 0.000000, 0.000000, -11.681818 }, /* 35 */ { 71.333336, 0.000000, 0.000000, -11.681818 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -11.681818 }, /* 2140 */ }; FCVKEYt MV_SARA_rotX[] = { { 0.000000, 0.000000, 0.000000, 290.105835 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 290.105835 }, /* 1 */ { 0.233333, 20.229933, 20.229933, 292.937866 }, /* 7 */ { 0.666667, 0.000000, 0.000000, 300.772583 }, /* 19 */ { 1.166667, 0.000000, 0.000000, 300.772583 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 300.772583 }, /* 35 */ { 71.333336, 0.000000, 0.000000, 300.772583 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 300.772583 }, /* 2140 */ }; FCVKEYt MV_SARA_rotY[] = { { 0.000000, 0.000000, 0.000000, 214.165848 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 214.165848 }, /* 1 */ { 0.133333, 22.990704, 22.990704, 217.055679 }, /* 3 */ { 0.366667, 22.226696, 22.226696, 221.120392 }, /* 11 */ { 0.533333, -2.510378, -2.510378, 223.285309 }, /* 15 */ { 0.666667, 0.000000, 0.000000, 222.508209 }, /* 19 */ { 1.166667, 0.000000, 0.000000, 222.508209 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 222.508209 }, /* 35 */ { 71.333336, 0.000000, 0.000000, 222.508209 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 222.508209 }, /* 2140 */ }; FCVKEYt MV_SARA_rotZ[] = { { 0.000000, 0.000000, 0.000000, 310.778503 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 310.778503 }, /* 1 */ { 0.133333, -13.323200, -13.323200, 309.788300 }, /* 3 */ { 0.400000, 1.052400, 1.052400, 305.758209 }, /* 11 */ { 0.633333, 26.515480, 26.515480, 307.721985 }, /* 18 */ { 0.666667, 0.000000, 0.000000, 308.697662 }, /* 19 */ { 1.166667, 0.000000, 0.000000, 308.697662 }, /* 34 */ { 1.200000, 0.000000, 0.000000, 308.697662 }, /* 35 */ { 71.333336, 0.000000, 0.000000, 308.697662 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 308.697662 }, /* 2140 */ }; FCVKEYt MV_AKI_trsX[] = { { 0.000000, 0.000000, 0.000000, -19.327665 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -19.327665 }, /* 1 */ { 6.333333, 0.000000, 0.000000, -19.327665 }, /* 189 */ { 6.366667, 0.000000, 0.000000, -19.804729 }, /* 191 */ { 14.500001, 0.000000, 0.000000, -19.804729 }, /* 435 */ { 14.533334, 0.000000, 0.000000, -18.692085 }, /* 436 */ { 26.200001, 0.000000, 0.000000, -18.692085 }, /* 786 */ { 28.833334, 0.000000, 0.000000, -18.695272 }, /* 865 */ { 38.666664, 0.000000, 0.000000, -18.719801 }, /* 1159 */ { 38.699997, 0.000000, 0.000000, -20.134617 }, /* 1160 */ { 55.666668, 0.000000, 0.000000, -20.134617 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -20.134617 }, /* 1671 */ { 61.666668, 0.000000, 0.000000, -20.134617 }, /* 1850 */ { 63.700001, 0.000000, 0.000000, -20.134617 }, /* 1911 */ { 71.333336, 0.000000, 0.000000, -20.134617 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -20.134617 }, /* 2140 */ }; FCVKEYt MV_AKI_trsY[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 0.000000 }, /* 1 */ { 6.333333, 0.000000, 0.000000, 0.000000 }, /* 189 */ { 6.366667, 0.000000, 0.000000, 0.000000 }, /* 191 */ { 14.500001, 0.000000, 0.000000, 0.000000 }, /* 435 */ { 14.533334, 0.000000, 0.000000, 0.000000 }, /* 436 */ { 26.166664, 0.000000, 0.000000, 0.000000 }, /* 784 */ { 26.200001, 0.000000, 0.000000, 0.000000 }, /* 786 */ { 28.833334, 0.000000, 0.000000, 0.000000 }, /* 865 */ { 38.666664, 0.000000, 0.000000, 0.000000 }, /* 1159 */ { 38.699997, 0.000000, 0.000000, 0.000000 }, /* 1160 */ { 55.666668, 0.000000, 0.000000, 0.000000 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, 0.000000 }, /* 1671 */ { 61.666668, 0.000000, 0.000000, 0.000000 }, /* 1850 */ { 61.700001, 0.000000, 0.000000, 0.000000 }, /* 1851 */ { 63.666668, 0.000000, 0.000000, 0.000000 }, /* 1910 */ { 63.700001, 0.000000, 0.000000, 0.000000 }, /* 1911 */ { 71.333336, 0.000000, 0.000000, 0.000000 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_AKI_trsZ[] = { { 0.000000, 0.000000, 0.000000, -11.409147 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -11.409147 }, /* 1 */ { 6.333333, 0.000000, 0.000000, -11.409147 }, /* 189 */ { 6.366667, 0.000000, 0.000000, -11.409147 }, /* 191 */ { 14.500001, 0.000000, 0.000000, -11.409147 }, /* 435 */ { 14.533334, 0.000000, 0.000000, -12.452253 }, /* 436 */ { 26.200001, 0.000000, 0.000000, -12.452253 }, /* 786 */ { 28.833334, 0.000000, 0.000000, -12.454630 }, /* 865 */ { 38.666664, 0.000000, 0.000000, -12.472921 }, /* 1159 */ { 38.699997, 0.000000, 0.000000, -12.472921 }, /* 1160 */ { 55.666668, 0.000000, 0.000000, -12.472921 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -12.472921 }, /* 1671 */ { 61.666668, 0.000000, 0.000000, -12.472921 }, /* 1850 */ { 63.700001, 0.000000, 0.000000, -12.472921 }, /* 1911 */ { 71.333336, 0.000000, 0.000000, -12.472921 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -12.472921 }, /* 2140 */ }; FCVKEYt MV_AKI_rotX[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_AKI_rotY[] = { { 0.000000, 0.000000, 0.000000, -45.000000 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -45.000000 }, /* 1 */ { 6.333333, 0.000000, 0.000000, -45.000000 }, /* 189 */ { 6.366667, 0.000000, 0.000000, -45.000000 }, /* 191 */ { 14.500001, 0.000000, 0.000000, -45.000000 }, /* 435 */ { 14.533334, 0.000000, 0.000000, -45.000000 }, /* 436 */ { 26.166664, 0.000000, 0.000000, -45.000000 }, /* 784 */ { 26.200001, 0.000000, 0.000000, -45.000000 }, /* 786 */ { 28.833334, 0.000000, 0.000000, -45.000000 }, /* 865 */ { 28.866667, 0.000000, 0.000000, -15.000000 }, /* 866 */ { 38.666668, 0.000000, 0.000000, -15.000000 }, /* 1160 */ { 38.699997, 0.000000, 0.000000, -45.000000 }, /* 1160 */ { 55.666668, 0.000000, 0.000000, -45.000000 }, /* 1670 */ { 55.700001, 0.000000, 0.000000, -45.000000 }, /* 1671 */ { 61.666668, 0.000000, 0.000000, -45.000000 }, /* 1850 */ { 63.700001, 0.000000, 0.000000, -45.000000 }, /* 1911 */ { 71.333336, 0.000000, 0.000000, -45.000000 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -45.000000 }, /* 2140 */ }; FCVKEYt MV_AKI_rotZ[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_CHI_trsX[] = { { 0.000000, 0.000000, 0.000000, -17.552250 }, /* 0 */ { 0.033334, 0.000000, 0.000000, -17.552250 }, /* 1 */ { 16.000000, 0.000000, 0.000000, -17.552250 }, /* 480 */ { 16.033333, 0.000002, 0.000002, -17.552250 }, /* 480 */ { 20.333330, 0.000000, 0.000000, -17.552240 }, /* 609 */ { 20.366663, 0.000000, 0.000000, -17.517612 }, /* 610 */ { 24.199997, 0.000000, 0.000000, -17.517612 }, /* 725 */ { 24.399998, 0.000000, 0.000000, -17.517612 }, /* 731 */ { 24.433331, 0.000000, 0.000000, -18.713762 }, /* 732 */ { 26.833332, 0.000000, 0.000000, -18.713854 }, /* 804 */ { 26.866665, 0.000000, 0.000000, -21.726151 }, /* 805 */ { 38.666668, 0.000000, 0.000000, -21.726151 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, -20.165380 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, -20.165380 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -20.165380 }, /* 2140 */ }; FCVKEYt MV_CHI_trsY[] = { { 0.000000, 0.000000, 0.000000, 3.969946 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 3.969946 }, /* 1 */ { 16.000000, 0.000000, 0.000000, 3.969946 }, /* 480 */ { 16.033333, 0.000000, 0.000000, 3.969946 }, /* 480 */ { 20.333330, 0.000000, 0.000000, 3.969946 }, /* 609 */ { 20.366663, 0.000000, 0.000000, 4.750000 }, /* 610 */ { 24.199997, 0.000000, 0.000000, 4.750000 }, /* 725 */ { 24.399998, 0.000000, 0.000000, 4.750000 }, /* 731 */ { 24.433331, 0.000000, 0.000000, 3.866957 }, /* 732 */ { 26.833332, 0.000000, 0.000000, 3.866889 }, /* 804 */ { 26.866665, 0.000000, 0.000000, 2.500000 }, /* 805 */ { 38.666668, 0.000000, 0.000000, 2.500000 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, 0.000000 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, 0.000000 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_CHI_trsZ[] = { { 0.000000, 0.000000, 0.000000, -20.493742 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -20.493742 }, /* 1 */ { 16.000000, 0.000000, 0.000000, -20.493742 }, /* 480 */ { 16.033333, 0.000000, 0.000000, -18.420145 }, /* 480 */ { 20.333330, 0.000000, 0.000000, -18.420145 }, /* 609 */ { 20.366663, 0.000000, 0.000000, -18.899611 }, /* 610 */ { 24.199997, 0.000000, 0.000000, -18.899611 }, /* 725 */ { 24.399998, 0.000000, 0.000000, -18.899611 }, /* 731 */ { 24.433331, 0.000000, 0.000000, -18.899611 }, /* 732 */ { 26.833332, 0.000000, 0.000000, -18.899611 }, /* 804 */ { 26.866665, 0.000000, 0.000000, -18.739725 }, /* 805 */ { 38.666668, 0.000000, 0.000000, -18.739725 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, -15.819489 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, -15.819489 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -15.819489 }, /* 2140 */ }; FCVKEYt MV_CHI_rotX[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_CHI_rotY[] = { { 0.000000, 0.000000, 0.000000, 90.000000 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 90.000000 }, /* 1 */ { 16.000000, 0.000000, 0.000000, 90.000000 }, /* 480 */ { 16.033333, 0.000000, 0.000000, 90.000000 }, /* 480 */ { 20.333330, 0.000000, 0.000000, 90.000000 }, /* 609 */ { 20.366663, 0.000000, 0.000000, 90.000000 }, /* 610 */ { 24.199997, 0.000000, 0.000000, 90.000000 }, /* 725 */ { 24.399998, 0.000000, 0.000000, 90.000000 }, /* 731 */ { 24.433331, 0.000000, 0.000000, 90.000000 }, /* 732 */ { 26.833332, 0.000000, 0.000000, 90.000000 }, /* 804 */ { 26.866665, 0.000000, 0.000000, 90.000000 }, /* 805 */ { 38.666668, 0.000000, 0.000000, 90.000000 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, 195.000000 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, 195.000000 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 195.000000 }, /* 2140 */ }; FCVKEYt MV_CHI_rotZ[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_OTH_trsX[] = { { 0.000000, 0.000000, 0.000000, -17.111021 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -17.111021 }, /* 1 */ { 6.333333, 0.000000, -14.778397, -17.111021 }, /* 189 */ { 6.366667, -14.778397, 0.000000, -18.096249 }, /* 191 */ { 12.500000, 0.000000, 0.000000, -18.096249 }, /* 375 */ { 28.833334, 0.000000, -16.996536, -18.096249 }, /* 865 */ { 28.866667, -16.996536, 0.000000, -18.662800 }, /* 866 */ { 38.666668, 0.000000, -27.584106, -18.662800 }, /* 1160 */ { 38.700001, -27.584106, 0.000000, -19.582270 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, -19.582270 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -19.582270 }, /* 2140 */ }; FCVKEYt MV_OTH_trsY[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 0.000000 }, /* 1 */ { 6.333333, 0.000000, 0.000000, 0.000000 }, /* 189 */ { 6.366667, 0.000000, 0.000000, 0.000000 }, /* 191 */ { 12.500000, 0.000000, 0.000000, 0.000000 }, /* 375 */ { 28.833334, 0.000000, 0.000000, 0.000000 }, /* 865 */ { 28.866663, 0.000000, 0.000000, 0.000000 }, /* 865 */ { 38.666668, 0.000000, 0.000000, 0.000000 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, 0.000000 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, 0.000000 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_OTH_trsZ[] = { { 0.000000, 0.000000, 0.000000, -15.623861 }, /* 0 */ { 0.033333, 0.000000, 0.000000, -15.623861 }, /* 1 */ { 6.333333, 0.000000, -13.981293, -15.623861 }, /* 189 */ { 6.366667, -13.981293, 0.000000, -16.555948 }, /* 191 */ { 12.500000, 0.000000, 0.000000, -16.555948 }, /* 375 */ { 28.833334, 0.000000, 0.000000, -16.555948 }, /* 865 */ { 38.666668, 0.000000, -13.895325, -16.555948 }, /* 1160 */ { 38.700001, -13.895325, 0.000000, -17.019125 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, -17.019125 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, -17.019125 }, /* 2140 */ }; FCVKEYt MV_OTH_rotX[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; FCVKEYt MV_OTH_rotY[] = { { 0.000000, 0.000000, 0.000000, 132.467484 }, /* 0 */ { 0.033333, 0.000000, 0.000000, 132.467484 }, /* 1 */ { 6.333333, 0.000000, 0.000000, 132.467484 }, /* 189 */ { 12.500000, 0.000000, 0.000000, 132.467484 }, /* 375 */ { 28.833334, 0.000000, 0.000000, 132.467484 }, /* 865 */ { 38.666668, 0.000000, 0.000000, 132.467484 }, /* 1160 */ { 38.700001, 0.000000, 0.000000, 132.467484 }, /* 1161 */ { 71.333336, 0.000000, 0.000000, 132.467484 }, /* 2140 */ { 71.349998, 0.000000, 0.000000, 132.467484 }, /* 2140 */ }; FCVKEYt MV_OTH_rotZ[] = { { 0.000000, 0.000000, 0.000000, 0.000000 }, /* 0 */ { 71.349998, 0.000000, 0.000000, 0.000000 }, /* 2140 */ }; ObjMove MoveAll[] = { { 1, 2140, MV_SARA_trsX, 9, MV_SARA_trsY, 9, MV_SARA_trsZ, 8, MV_SARA_rotX, 8, MV_SARA_rotY, 10, MV_SARA_rotZ, 10, NULL, 0, NULL, 0, NULL, 0 }, { 1, 2140, MV_AKI_trsX, 16, MV_AKI_trsY, 19, MV_AKI_trsZ, 16, MV_AKI_rotX, 2, MV_AKI_rotY, 18, MV_AKI_rotZ, 2, NULL, 0, NULL, 0, NULL, 0 }, { 1, 2140, MV_CHI_trsX, 15, MV_CHI_trsY, 15, MV_CHI_trsZ, 15, MV_CHI_rotX, 2, MV_CHI_rotY, 15, MV_CHI_rotZ, 2, NULL, 0, NULL, 0, NULL, 0 }, { 1, 2140, MV_OTH_trsX, 11, MV_OTH_trsY, 11, MV_OTH_trsZ, 10, MV_OTH_rotX, 2, MV_OTH_rotY, 9, MV_OTH_rotZ, 2, NULL, 0, NULL, 0, NULL, 0 }, }; Uint32 Scene[] = { 1, 1, 4, 1, 0, 0, 0, 50, 0, 0, 0, 0, 0, 1, 75, 0, 0, 1, 0, 0, 0, 92, 0, 0, 0, 0, 1, 0, 191, 0, 0, 1, 0, 0, 0, 286, 0, 0, 1, 0, 0, 0, 390, 0, 0, 0, 0, 1, 0, 407, 0, 0, 0, 0, 0, 1, 436, 0, 0, 1, 0, 0, 0, 481, 0, 0, 1, 0, 0, 0, 611, 0, 0, 1, 0, 0, 0, 733, 0, 0, 1, 0, 0, 0, 740, 0, 0, 0, 0, 1, 0, 821, 0, 0, 0, 0, 1, 0, 856, 0, 0, 1, 0, 0, 0, 866, 0, 0, 1, 0, 0, 0, 1161, 0, 0, 2, 0, 0, 0, 1162, 0, 0, 0, 0, 1, 0, 1290, 0, 0, 0, 0, 1, 0, 1415, 0, 0, 0, 0, 1, 0, 1560, 0, 0, 0, 0, 1, 0, 1648, 0, 0, 0, 0, 1, 0, 1671, 0, 0, 2, 0, 0, 0, 1770, 0, 0, 0, 0, 1, 0, 1930, 0, 0, 0, 0, 1, 0, 2110, 0, 0, 0, 0, 1, 0, 2110, 2140, }; Uint32 MoveID[] = { ID_SARA, MV_SARA, /* 1 */ ID_AKI, MV_AKI, /* 1 */ ID_CHI, MV_CHI, /* 1 */ ID_OTH, MV_OTH, /* 1 */ }; Uint32 EffectID[] = { NULL, NULL, }; Uint32 MotionID[] = { ID_AKI, MN_AKI_YABAI_SYOUBAI_0134, 375, 659, 0, /* 1 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/AKI_YABAI_SYOUBAI_0134.dsc */ ID_OTH, MN_KIS_IKITE_KAERENAI_SOUKO_0134, 1220, 1345, 0, /* 75 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/KIS_IKITE_KAERENAI_SOUKO_0134.dsc */ ID_OTH, MN_KIS_IKITE_KAERENAI_SOUKO_0134, 1460, 3335, 0, /* 191 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/KIS_IKITE_KAERENAI_SOUKO_0134.dsc */ ID_AKI, MN_AKI_YABAI_SYOUBAI_0134, 990, 1139, 0, /* 286 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/AKI_YABAI_SYOUBAI_0134.dsc */ ID_AKI, MN_AKI_HOUOUKYOU_MOTTENAI_0134, 410, 839, 0, /* 436 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/AKI_HOUOUKYOU_MOTTENAI_0134.dsc */ ID_CHI, MN_YKI_CIN_ORIRU_KAIDAN_ST_0134, 180, 309, 0, /* 481 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_ORIRU_KAIDAN_ST_0134.dsc */ ID_CHI, MN_YKI_CIN_ORIRU_KAIDAN_LP_0134, 1, 122, 0, /* 611 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_ORIRU_KAIDAN_LP_0134.dsc */ ID_CHI, MN_YKI_CIN_ORIRU_KAIDAN_LP_0134, 1, 123, 0, /* 733 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_ORIRU_KAIDAN_LP_0134.dsc */ ID_CHI, MN_YKI_CIN_ORIRU_KAIDAN_LP_0134, 1, 123, 0, /* 856 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_ORIRU_KAIDAN_LP_0134.dsc */ ID_CHI, MN_YKI_CIN_ORIRU_KAIDAN_EN_0134, 1, 295, 0, /* 866 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_ORIRU_KAIDAN_EN_0134.dsc */ ID_AKI, MN_AKI_HOUOUKYOU_MOTTENAI_0134, 750, 1259, 0, /* 1161 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/AKI_HOUOUKYOU_MOTTENAI_0134.dsc */ ID_CHI, MN_YKI_CIN_HOUOUKYOU_MOTTENAI_0134, 850, 1359, 0, /* 1161 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_HOUOUKYOU_MOTTENAI_0134.dsc */ ID_AKI, MN_AKI_HOUOUKYOU_MOTTENAI_0134, 1160, 1590, 0, /* 1671 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/AKI_HOUOUKYOU_MOTTENAI_0134.dsc */ ID_CHI, MN_YKI_CIN_HOUOUKYOU_MOTTENAI_0134, 1160, 1679, 0, /* 1671 */ /* /p16/prj16m5/AUTH01/0154/MOTION/dsc/SCENES/YKI_CIN_HOUOUKYOU_MOTTENAI_0134.dsc */ }; Uint32 VoiceID[] = { ID_OTH, VA0154B001, 0, /* 92 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154B001.aiff */ ID_CHI, VA0154C001, 0, /* 390 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154C001.aiff */ ID_OTH, VA0154B002, 0, /* 740 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154B002.aiff */ ID_AKI, VA0154A002, 0, /* 821 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154A002.aiff */ ID_CHI, VA0154C002, 0, /* 1162 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154C002.aiff */ ID_AKI, VA0154A003, 0, /* 1290 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154A003.aiff */ ID_AKI, VA0154A004, 0, /* 1415 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154A004.aiff */ ID_CHI, VA0154C003, 0, /* 1560 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154C003.aiff */ ID_AKI, VA0154A005, 0, /* 1648 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154A005.aiff */ ID_CHI, VA0154C004, 0, /* 1770 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154C004.aiff */ ID_CHI, VA0154C005, 0, /* 1930 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154C005.aiff */ ID_AKI, VA0154A005, 0, /* 2110 */ /* /p16/prj16m5/AUTH01/0154/SOUND/A0154A005.aiff */ }; char *VoiceName[] = { "/p16/prj16m5/AUTH01/0154/SOUND/A0154B001.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154C001.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154B002.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154A002.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154C002.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154A003.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154A004.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154C003.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154A005.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154C004.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154C005.aiff", "/p16/prj16m5/AUTH01/0154/SOUND/A0154A005.aiff", }; Uint32 SoundEffectID[] = { ID_AKI, Vdishcrash1, /* 50 */ /* /p16/prj16m5/AUTH01/0154/SE/smallobject/dishcrash1.aiff */ ID_OTH, VRYOASHIKONKURI_1, /* 407 */ /* /p16/prj16m5/AUTH01/0154/SE/foot2/RYOASHIKONKURI_1.aiff */ }; char *SoundEffectName[] = { "/p16/prj16m5/AUTH01/0154/SE/smallobject/dishcrash1.aiff", "/p16/prj16m5/AUTH01/0154/SE/foot2/RYOASHIKONKURI_1.aiff", };
\SCENE\99\MS08\SEQCONV.C
/* $Id: seqconv.c,v 1.34 1998/09/30 09:47:24 hyamada Exp hyamada $ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "seqdata.h" /*#define TIME_CHECK*/ #ifdef USER_takanao #undef USER_takanao #endif /*#define USER_takanao /* デバッグシンボル */ /* * 構造体 */ typedef struct { int id; /* 'TRCK' */ int size; char endian; /* 0:little, 1:big */ char version; char xxx1; char xxx2; int nframes; } SEQHEADER; typedef struct { char type; char argc; short xxxx; int args[1]; } SEQ; enum { /* シーケンスコマンド */ stEND = 0, stCAMERA, stMOVE, stMOTION, stEFFECT, stVOICE, stSE, /* バッファサイズ */ SEQBSIZE = 128*1024, CAMBSIZE = 256*1024, MOVBSIZE = 512*1024, MAXTBL = 128, MAXSTR = 1024, MAXCLIP = 1024, /* ダミーのID */ ID_CAMERA = MAKE_ID('(','^','^',';'), }; typedef struct { /* 作業領域の割り当て */ char track[8]; char seq[SEQBSIZE]; char cam[CAMBSIZE]; char mov[MOVBSIZE]; char *camtbl[MAXTBL]; char *movtbl[MAXTBL]; char *strtbl[MAXSTR]; short *cliptbl[MAXCLIP]; } WORK; /* * プロトタイプ */ static int MakeCamOnly(); static int MakeData(); static void TransSplData(); static int *ReqCamera(int *, int); static int *ReqMove(int *, int); static int *ReqMotion(int *, int); static int *ReqEffect(int *, int); static int *ReqVoice(int *, int); static int *ReqSE(int *, int); static int WriteFile(); static void CreateCamData(void ); static void CreateMovData(void ); static void *CreateSplData(int *, void *, int ); static int fwrites(char *fname, void *buff, int size); extern void SetEndian(int big); extern int endian(void ); extern int GetInt16(void *); extern int GetInt32(void *); extern void SetInt16(void *, int); extern void SetInt32(void *, int); extern float GetAiffTime(char *fname); /* * グローバル変数 */ extern Uint32 Scene[]; extern Uint32 MoveID[]; extern Uint32 EffectID[]; extern Uint32 MotionID[]; extern Uint32 VoiceID[]; extern Uint32 SoundEffectID[]; extern ObjMove MoveAll[]; extern Camera CamAll[]; extern char *VoiceName[]; extern char *SoundEffectName[]; extern float PlayOffs[3]; extern float PlayRot[3]; float *xxx = PlayRot; /* 使ってないけどエラーを起こさせるため */ extern char _fdata[]; extern char _fbss[]; static char usage[] = { "seqconv 1.34\n" "\n" "usage : seqconv [-o outfile]\n" " seqconv -c camno [-o outfile]\n" }; static char *outfn = "seqdata.bin"; static int camno; /* camera number */ static char camout; /* -c option */ static char aifftime; /* -a option */ static char verbose; /* -v option */ static char viderr; /* voice ID error */ static WORK *work; static char *workbuff, *workdatap; static char *camdata, *movdata; static int ncam, nmov, nstr, nclip, nv, nse; static int *scMove = (int *)MoveID; static int *scMotion = (int *)MotionID; static int *scEffect = (int *)EffectID; static int *scVoice = (int *)VoiceID; static int *scSE = (int *)SoundEffectID; /* * main */ int main(int argc, char *argv[]) { /* オプションチェック */ argv++; for ( ; argv[0] && argv[0][0] == '-'; argv++ ){ /* options */ switch ( argv[0][1] ){ case 'l': break; case 'o': argv++; outfn = argv[0]; break; case 'a': aifftime = 1; break; case 'c': argv++; camout = 1; camno = atoi(argv[0]); break; case 'v': verbose = 1; break; default : printf(usage); return 2; /* NG */ } } /* カメラ番号チェック */ if ( camno > 9999 ){ printf("seqconv: camera number %d too large\n", camno); return 1; /* NG */ } /* little-endianに設定 */ SetEndian(0); /* メモリ確保 */ if ( !AllocMem() ){ return 1; /* NG */ } /* データの作成 */ if ( camout ){ if ( !MakeCamOnly() ){ return 1; /* NG */ } } else { if ( !MakeData() ){ return 1; /* NG */ } } /* ファイルの書き込み */ if ( !WriteFile() ){ return 1; /* NG */ } /* おしまい */ free(workbuff); if ( viderr ){ printf("VoiceID[] にファイル名が入ってるようですので、ついでの時に直して下さい。\n"); } return 0; /* OK */ } /* * ファイルの書き込み */ int WriteFile() { FILE *fp; int size; fp = fopen(outfn, "w"); if ( !fp ){ printf("%s : cannot open\n", outfn); return 0; /* NG */ } size = GetInt32(&workbuff[4]); if ( fwrite(workbuff, 1, size, fp) != size ){ printf("%s : write error\n", outfn); return 0; /* NG */ } close(fp); return 1; /* OK */ } /* * メモリ確保 */ int AllocMem() { workbuff = malloc(sizeof(WORK)+1024); /* 多いめに */ if ( !workbuff ){ printf("seqconv: not enough memory\n"); return 0; /* NG */ } memset(workbuff, 0, sizeof(WORK)); work = (WORK *)workbuff; camdata = work->cam; movdata = work->mov; } /* * カメラデータのみの作成 */ int MakeCamOnly() { int datasize; /* カメラデータの作成 */ CreateCamData(); /* データをバッファ先頭へ転送 */ datasize = camdata - work->cam; memcpy(workbuff, work->cam, datasize); } /* * データの作成 */ int MakeData() { #define seqhdr ((SEQHEADER *)work->seq) int *seq, *ip; int nframes; /* シーケンスデータの作成 */ seq = (int *)(work->seq + sizeof(SEQHEADER)); ip = Scene; for (;;){ SetInt32(seq++, ip[0]); /* frame */ if ( ip[1] ){ /* CAMERA */ seq = ReqCamera(seq, ip[1]); } if ( ip[2] ){ /* MOVE */ seq = ReqMove(seq, ip[2]); } if ( ip[3] ){ /* MOTION */ seq = ReqMotion(seq, ip[3]); } if ( ip[4] ){ /* EFFECT */ seq = ReqEffect(seq, ip[4]); } if ( ip[5] ){ /* VOICE */ seq = ReqVoice(seq, ip[5]); } if ( ip[6] ){ /* SE */ seq = ReqSE(seq, ip[6]); } SetInt32(seq++, stEND); ip += 7; if ( ip[1] > 1 ){ nframes = ip[1]; break; } } SetInt32(seq++, -1); /* end mark */ workdatap = (char *)seq; /* リミットチェック */ if ( (char *)seq >= &work->seq[SEQBSIZE] ){ printf("seqconv: conversion error (seq,internal)\n"); return 0; /* NG */ } if ( camdata >= &work->cam[CAMBSIZE] ){ printf("seqconv: conversion error (cam,internal)\n"); return 0; /* NG */ } if ( movdata >= &work->mov[MOVBSIZE] ){ printf("seqconv: conversion error (mov,internal)\n"); return 0; /* NG */ } /* ヘッダの設定 */ memcpy(&seqhdr->id, "ASEQ", 4); SetInt32(&seqhdr->size, (char *)seq - work->seq); SetInt32(&seqhdr->nframes, nframes); seqhdr->endian = endian(); seqhdr->version = 5; /* スプラインデータの転送 */ TransSplData(); /* 全体ヘッダの設定 */ memcpy(workbuff, "TRCK", 4); SetInt32(workbuff+4, workdatap - workbuff); } /* * スプラインデータの転送 */ static void TransSplData() { int i, headsize, datasize; char *datap = workdatap; short *clipp; /* カメラデータの転送 */ headsize = 16 + (ncam + 1) * sizeof(char **); datasize = camdata - work->cam; memcpy(datap, "ACAM", 4); /* chunk ID */ SetInt32(datap + 4, headsize + datasize); /* chunk size */ SetInt32(datap + 12, ncam); /* 数 */ datap += 16; for (i = 0; i < ncam; i++){ /* オフセットテーブルの作成 */ SetInt32(datap, work->camtbl[i] - work->cam + headsize); datap += 4; } SetInt32(datap, headsize + datasize); /* end mark */ datap += 4; memcpy(datap, work->cam, datasize); datap += datasize; /* 移動データの転送 */ headsize = 16 + (nmov + 1) * sizeof(char **); datasize = movdata - work->mov; memcpy(datap, "AMOV", 4); /* chunk ID */ SetInt32(datap + 4, headsize + datasize); /* chunk size */ SetInt32(datap + 12, nmov); /* 数 */ datap += 16; for (i = 0; i < nmov; i++){ /* オフセットテーブルの作成 */ SetInt32(datap, work->movtbl[i] - work->mov + headsize); datap += 4; } SetInt32(datap, headsize + datasize); /* end mark */ datap += 4; memcpy(datap, work->mov, datasize); datap += datasize; /* 文字列データの転送 */ if ( nstr ){ workdatap = datap; /* 'ASTR' の先頭をメモ */ headsize = 16 + (nstr + 1) * sizeof(char *); datap += headsize; for (i = 0; i < nstr; i++){ SetInt32(workdatap + 16 + i * sizeof(char *), datap - workdatap); strcpy(datap, work->strtbl[i]); datap += strlen(work->strtbl[i]) + 1; } SetInt32(workdatap + 16 + i * sizeof(char *), datap - workdatap); datap = (char *)(((int)datap + 3) & ~3); /* 切り上げ */ memcpy(workdatap, "ASTR", 4); /* chunk ID */ SetInt32(workdatap + 4, datap - workdatap); /* chunk size */ SetInt32(workdatap + 12, nstr); } /* 口パクデータの転送 */ #ifdef USER_takanao printf(" nclip = %x\n", nclip ); #endif if ( nclip ){ workdatap = datap; /* 'ALIP' の先頭をメモ */ headsize = 16 + (nclip + 1) * sizeof(short *); datap += headsize; for (i = 0; i < nclip; i++){ SetInt32(workdatap + 16 + i * sizeof(short *), datap - workdatap); clipp = work->cliptbl[i]; if ( clipp ){ do { SetInt16(datap, *clipp); datap += 2; } while ( *clipp++ != -1 ); } else { SetInt16(datap, -1); datap += 2; } } SetInt32(workdatap + 16 + i * sizeof(short *), datap - workdatap); datap = (char *)(((int)datap + 3) & ~3); /* 切り上げ */ memcpy(workdatap, "ALIP", 4); /* chunk ID */ SetInt32(workdatap + 4, datap - workdatap); /* chunk size */ SetInt32(workdatap + 12, nclip); } /* ポインタをメモして戻る */ workdatap = datap; } /* * カメラのリクエスト */ static int *ReqCamera(int *a, int n) { SEQ *seq = (SEQ *)a; (void)n; /* 1つだけなので無視 */ seq->type = stCAMERA; seq->argc = 2; SetInt32(&seq->args[0], ID_CAMERA); SetInt32(&seq->args[1], ncam); CreateCamData(); seq = (SEQ *)&seq->args[2]; return (int *)seq; } /* * 移動のリクエスト */ static int *ReqMove(int *a, int n) { SEQ *seq = (SEQ *)a; while ( n-- ){ seq->type = stMOVE; seq->argc = 2; SetInt32(&seq->args[0], scMove[0]); SetInt32(&seq->args[1], nmov); CreateMovData(); seq = (SEQ *)&seq->args[2]; scMove += 2; } return (int *)seq; } /* * モーションのリクエスト */ static int *ReqMotion(int *a, int n) { SEQ *seq = (SEQ *)a; while ( n-- ){ seq->type = stMOTION; seq->argc = 5; SetInt32(&seq->args[0], scMotion[0]); SetInt32(&seq->args[1], scMotion[1]); SetInt32(&seq->args[2], scMotion[2]); SetInt32(&seq->args[3], scMotion[3]); SetInt32(&seq->args[4], scMotion[4]); seq = (SEQ *)&seq->args[5]; scMotion += 5; if ( (char *)scMotion > (char *)VoiceID ){ printf("older version MotionID[] data\n"); exit(1); } } return (int *)seq; } /* * 特殊効果のリクエスト */ static int *ReqEffect(int *a, int n) { int id, type, ptn, spd; SEQ *seq = (SEQ *)a; type = TYPE_DEFAULT; ptn = PTN_DEFAULT; spd = SPD_DEFAULT; seq->type = stEFFECT; seq->argc = 4; id = scEffect[0]; while ( n-- ){ if ( scEffect[1] & TYPE_ID ) { type = scEffect[1] & ID_MASK; } else if ( scEffect[1] & PTN_ID ) { ptn = scEffect[1] & ID_MASK; } else if ( scEffect[1] & SPD_ID ) { spd = scEffect[1] & ID_MASK; } scEffect += 2; } #ifdef USER_takanao printf("ReqEffect : %x %d %d %d\n",id, type, ptn, spd ); #endif SetInt32(&seq->args[0], id); SetInt32(&seq->args[1], type); SetInt32(&seq->args[2], ptn); SetInt32(&seq->args[3], spd); seq = (SEQ *)&seq->args[4]; return (int *)seq; } /* * 声のリクエスト */ static int *ReqVoice(int *a, int n) { SEQ *seq = (SEQ *)a; float sec; while ( n-- ){ seq->type = stVOICE; seq->argc = 5; SetInt32(&seq->args[0], scVoice[0]); SetInt32(&seq->args[1], nstr); SetInt32(&seq->args[2], -1); SetInt32(&seq->args[3], scVoice[1]); if ( _fdata <= (char *)scVoice[1] && (char *)scVoice[1] <= _fbss ){ if ( memcmp((char *)scVoice[1], "/p16", 4) == 0 ){ printf("VoiceID[%d][1] = -1 (%s)\n", (scVoice - (int *)VoiceID) / 3, scVoice[1]); seq->args[3] = -1; viderr = 1; } } seq->args[4] = 0; if ( aifftime ){ sec = GetAiffTime(VoiceName[nv]); SetInt32(&seq->args[4], *(int *)&sec); #ifdef USER_takanao printf("scVoice(length) : %f, %x\n",sec, seq->args[4]); #endif } work->strtbl[nstr] = VoiceName[nv]; nstr++; nv++; /*#ifdef USER_takanao printf(" ADR-work = %x %x %x\n", &work, &work->strtbl, &work->cliptbl ); #endif*/ if ( scVoice[2] ){ /* 口パク */ /*#ifdef USER_takanao printf(" VoiceID[2] = %d, nclip = %x, ADR-cliptbl = %x\n", scVoice[2], nclip, &work->cliptbl[nclip] ); #endif*/ SetInt32(&seq->args[2], nclip); work->cliptbl[nclip++] = (short *)scVoice[2]; } seq = (SEQ *)&seq->args[5]; scVoice += 3; } return (int *)seq; } enum { SEQCONV_VER2 = -1, SE_VOL_DEFAULT = 127, SE_PACK_DEFAULT = 4, SE_MIDI_DEFAULT = 16, SE_FLAG_DEFAULT = 0x00 }; #define SE_ADDITION (0.5) /* * 効果音のリクエスト */ static int *ReqSE(int *a, int n) { SEQ *seq = (SEQ *)a; float sec; while ( n-- ){ seq->type = stSE; seq->argc = 9; SetInt32(&seq->args[0], scSE[0]); SetInt32(&seq->args[1], scSE[1]); SetInt32(&seq->args[2], nstr); SetInt32(&seq->args[3], scSE[2]); if ( scSE[2] == SEQCONV_VER2 ) { /* 新バージョンデータ */ /*#ifdef USER_takanao printf("scSE(Ver3) : %x, %x, %d, %d, %d, %d, %d\n",scSE[0],scSE[1],scSE[2],scSE[3],scSE[4],scSE[5],scSE[6]); #endif */ SetInt32(&seq->args[4], scSE[3]); /* vol */ SetInt32(&seq->args[5], scSE[4]); /* pack */ SetInt32(&seq->args[6], scSE[5]); /* MIDI */ SetInt32(&seq->args[7], scSE[6]); /* flag */ scSE += 7; } else { /* 旧バージョンデータ */ /*#ifdef USER_takanao printf("scSE(Ver1) : %x, %x\n",scSE[0], scSE[1]); #endif */ SetInt32(&seq->args[4], SE_VOL_DEFAULT); /* vol */ SetInt32(&seq->args[5], SE_PACK_DEFAULT); /* pack */ SetInt32(&seq->args[6], SE_MIDI_DEFAULT); /* MIDI */ SetInt32(&seq->args[7], SE_FLAG_DEFAULT); /* flag */ scSE += 2; } /* SE長さ */ seq->args[8] = 0; if ( aifftime ){ sec = GetAiffTime(SoundEffectName[nse]); sec += (float)SE_ADDITION; SetInt32(&seq->args[8], *(int *)&sec); /*#ifdef USER_takanao printf("scSE(length) : %f, %d\n",sec, (int)(sec * 30.0f)); #endif */ } seq = (SEQ *)&seq->args[9]; work->strtbl[nstr] = SoundEffectName[nse]; nstr++; nse++; } return (int *)seq; } /*------- 多湖スプラインモジュール用データ変換 --------*/ /* * カメラデータの作成 */ static void CreateCamData() { #ifdef TIME_CHECK { const CAMDATA *cam; int num; int i; cam = CamAll[ncam].cam; num = sizeof (CamAll[0].cam) / sizeof (CamAll[0].cam[0]); for (i = 0; i < num; i++) { if (cam->n >= 2) { const FCVKEYt *ptr; int n; ptr = cam->p; for (n = 1; n < cam->n; n++) { if (ptr[0].time >= ptr[1].time) { static const char *str[]= { "camX", "camY", "camZ", "intX", "intY", "intZ", "pers", "roll", }; printf ("%s[%d].timeの値が正しくありません。N番目のtimeは、N-1番目のtimeより大きくなければなりません。\n", str[i], n); exit (1); } ptr++; } } cam++; } } #endif work->camtbl[ncam] = camdata; camdata = CreateSplData((int *)camdata, &CamAll[ncam].cam, 1); ncam++; } /* * 移動データの作成 */ static void CreateMovData() { #ifdef TIME_CHECK { const MOVDATA *mov; int num; int i; mov = MoveAll[nmov].mov; num = sizeof (MoveAll[0].mov) / sizeof (MoveAll[0].mov[0]); for (i = 0; i < num; i++) { if (mov->n >= 2) { const FCVKEYt *ptr; int n; ptr = mov->p; for (n = 1; n < mov->n; n++) { if (ptr[0].time >= ptr[1].time) { static const char *str[]= { "trsX", "trsY", "trsZ", "rotX", "rotY", "rotZ", "kaoX", "kaoY", "kaoZ", }; printf ("MoveAll[%d]の%s[%d].timeの値が正しくありません。N番目のtimeは、N-1番目のtimeより大きくなければなりません。\n", nmov, str[i], n); exit (1); } ptr++; } } mov++; } } #endif work->movtbl[nmov] = movdata; movdata = CreateSplData((int *)movdata, &MoveAll[nmov].mov, 0); nmov++; } /* MOTION CAMERAのデータ構造 TRANS/ROTのデータ構造 +-------------------------------+ +-------------------------------+ |int32×1 アトリビュート | | TRN-X | +-------------------------------+ |int32×1 key frameの個数 | | POS-X | |float×個数 time | |int32×1 key frameの個数 | |float×個数 value | |float×個数 time | |float×個数 slope | |float×個数 value | +-------------------------------+ |float×個数 slope | | TRN-Y | +-------------------------------+ +-------------------------------+ | POS-Y | | TRN-Z | +-------------------------------+ +-------------------------------+ | POS-Z | | ROT-X | +-------------------------------+ +-------------------------------+ | INT-X | | ROT-Y | +-------------------------------+ +-------------------------------+ | INT-Y | | ROT-Z | +-------------------------------+ +-------------------------------+ | INT-Z | +-------------------------------+ | PERS | +-------------------------------+ (最初と最後を除き、slopeはleftとrightの2つのデータに分割する) */ static void *CreateSplData(int *ip, void *dp, int cam) { #define EVENTCAM_SPLINE 0x00000001 /* 現在未使用 */ #define EVENTCAM_ROLL 0x00000020 /* ロールデータがついている */ #define EVENTCAM_PERS 0x00000040 /* パースデータがついている */ static int splorder[2][9] = { { 0,1,2,3,4,5,7,6 }, /* cam用 persよりrollを先にする */ { 0,1,2,3,4,5,6,7,8 }, }; int *so = cam ? splorder[0] : splorder[1]; int i, j, n, camsize; int (*datap)[2], numfp, *camdata; float value, offs[9]; FCVKEYt *fp; if ( camout && cam ){ camdata = ip; sprintf((char *)ip, "%04d", camno); ip++; /* cam No. */ ip++; /* data size(あとで)*/ } /* フラグ設定 */ datap = (int (*)[2])dp; if ( cam ){ n = EVENTCAM_SPLINE; if ( datap[6][1] ){ n |= EVENTCAM_PERS; } if ( datap[7][1] ){ n |= EVENTCAM_ROLL; } SetInt32(ip++, n); } /* オフセットの設定 */ if (cam) { for (i = 0; i < 8; i++){ if ( i < 3 ){ /* 0,1,2 は X,Y,Z なのでそのまま入れる */ offs[i] = PlayOffs[i]; } else if ( i < 6 ){ /* camの 3,4,5 は int-X,Y,Z なので入れる */ offs[i] = PlayOffs[i - 3]; } else { /* その他は 0.0 */ offs[i] = 0.0; } } } else { for (i = 0; i < 9; i++){ if (i < 3) { offs[i] = PlayOffs[i]; } else { offs[i] = 0.0; } } } /* 並べ替え */ for (i = 0; i < (cam ? 8 : 9); i++){ /* x y z x y z (p) */ fp = (FCVKEYt *)datap[so[i]][0]; /* function curve のデータ位置 */ numfp = datap[so[i]][1]; /* function curve のデータ個数 */ if ( numfp ){ /* データ個数を調べる */ n = numfp * 2 - 2; SetInt32(ip++, n); /* key frameの個数 */ /* データを並べる */ for (j = 0; j < numfp; j++){ value = fp[j].value + offs[i]; SetInt32(&ip[0], *(int *)&fp[j].time); SetInt32(&ip[n], *(int *)&value); SetInt32(&ip[n*2], *(int *)&fp[j].left_slope); if ( j == 0 ){ /* 最初のtimeを zero にしておく */ SetInt32(ip, 0); } ip++; if ( j != 0 && j != numfp - 1 ){ /* 最初と最後以外は2つのデータ */ SetInt32(&ip[0], *(int *)&fp[j].time); SetInt32(&ip[n], *(int *)&value); SetInt32(&ip[n*2], *(int *)&fp[j].right_slope); ip++; } } /* 次へ */ ip += n * (3 - 1); /* time分は進んでいるので、valueとslope分を進める */ } else { SetInt32(ip++, 0); /* データがない */ } } /* デバッグモードならデータ出力 */ if ( camout && cam ){ camsize = (char *)ip - (char *)camdata; SetInt32(camdata + 1, camsize); } /* おしまい */ return ip; } /* * ファイル出力 */ static int fwrites(char *fname, void *buff, int size) { FILE *fp; int wsize; fp = fopen(fname, "w"); if ( !fp ){ return 0; } wsize = fwrite(buff, 1, size, fp); fclose(fp); return wsize; } /*------------- エンディアン変更モジュール ------------*/ /* * グローバル変数 */ static char endian16[2]; /* 16-bitのendian */ static char endian32[4]; /* 32-bitのendian */ static char str_little[] = "\0\1\2\3\0\1"; static char str_big[] = "\3\2\1\0\1\0"; static void SetEndianByStr(char *str); /* * endian データの設定 */ void SetEndian(int big) { if ( big ){ SetEndianByStr(str_big); } else { SetEndianByStr(str_little); } } static void SetEndianByStr(char *str) { endian32[0] = str[0]; endian32[1] = str[1]; endian32[2] = str[2]; endian32[3] = str[3]; endian16[0] = str[4]; endian16[1] = str[5]; } /* * endian の取得 */ int endian() { return endian16[0] != 0; } /* * 現在の endian による16/32-bitデータの読み書き */ int GetInt16(void *p) { return ((uchar *)p)[endian16[0]] + (((uchar *)p)[endian16[1]] << 8); } int GetInt32(void *p) { return ((uchar *)p)[endian32[0]] + (((uchar *)p)[endian32[1]] << 8) + (((uchar *)p)[endian32[2]] << 16) + (((uchar *)p)[endian32[3]] << 24); } void SetInt16(void *p, int n) { ((uchar *)p)[endian16[0]] = n; ((uchar *)p)[endian16[1]] = n >> 8; } void SetInt32(void *p, int n) { ((uchar *)p)[endian32[0]] = n; ((uchar *)p)[endian32[1]] = n >> 8; ((uchar *)p)[endian32[2]] = n >> 16; ((uchar *)p)[endian32[3]] = n >> 24; } /*------------- AIFFファイルモジュール ------------*/ #define ushort unsigned short typedef struct { int FileID; /* 'FORM' */ int FileSize; int FileType; /* 'AIFF' */ int CommID; /* 'COMM' */ int CommSize; short SampleChannel; /* 1 or 2 */ short xxx1; short xxx2; short SampleSize; /* 8 or 16 */ ushort SampleRate[5]; /* 80-bit float */ } AIFFHEADER; typedef struct { int chunkID; int chunkSize; } AIFFCHUNK; /* * AIFFファイルのプレイ時間を取得 */ float GetAiffTime(char *fname) { AIFFHEADER head; AIFFCHUNK chunk; FILE *fp; float sec, rate; fp = fopen(fname, "r"); if ( !fp ){ return 0; /* NG */ } if ( fread(&head, 1, 38, fp) != 38 ){ fclose(fp); return 0; /* NG */ } if ( head.FileID != 'FORM' || head.FileType != 'AIFF' ){ fclose(fp); return 0; /* NG */ } for (;;){ if ( feof(fp) ){ fclose(fp); return 0; /* NG */ } fread(&chunk, 1, sizeof(chunk), fp); /* チャンクヘッダを読む */ if ( chunk.chunkID == 'SSND' ){ /* サンプリングデータ */ break; } fseek(fp, chunk.chunkSize, SEEK_CUR); /* 次のチャンクへ */ } fclose(fp); rate = head.SampleRate[1] >> (0x400e - head.SampleRate[0]); /* 80-bit floatを変換(手抜き)*/ sec = (chunk.chunkSize - 8) / head.SampleChannel / (head.SampleSize / 8) / rate; if ( verbose ){ printf("%s %d-ch %d-bit %g Hz %f sec\n", fname, head.SampleChannel, head.SampleSize, rate, sec); } return sec; }
(Source: Original TCRF research)