ミュージカル処理について.txt
作成者：有泉　信彦
作成日：10/09/17

●全体の流れ
○概要
ミュージカルはライモンシティのミュージカルホールで行うことができます。
受付に話し、控え室に移動して、ドレスアップの後ショーパートに移行し、
ミュージカルショットが表示され、評価があった後フィールドに戻ってきます。

○各箇所での処理
受付に話しかけて控え室に移動するブラックアウトまではフィールドでのスクリプトで処理が行われています。
musical_scr.evに一人用受付と通信用受付の処理があります。
ブラックアウト後にミュージカル用のイベントが起動し、ミュージカルの処理が始まります。
この後控え室に移動しますが、フィールドの制御はミュージカル用のイベントが行っています。
このイベントからスクリプトが実行され控え室内の演出が行われます。
このスクリプトはドレスアップ前、ドレスアップ〜ショーパート間、ショーパート後の3種類あり、
c04r0202.evに記述されています。
ドレスアップ、ショーパート、ミュージカルショットはイベントからprocが起動され実行されます。
控え室からブラックアウトした後、退場用のスクリプトが呼ばれイベントが終了し、フィールドに処理を戻します。

○受付での処理
受付の処理はmusical_scr.evに記述されています。
一人用受付がev_musical_recept_single
通信用受付がev_musical_recept_comm
試着室受付がev_musical_recept_fittingです。
試着室受付はprocを呼んでいるだけなので省略します。
一人用と通信用受付は_MUSICAL_CALLのコマンドでイベントを起動します。
このコマンドを呼ぶとその時点でスクリプト処理が終わり、イベントが切り替わるので注意してください。

○受付以降の処理
prog\src\musical\musical_event.cのMUSICAL_MainEvent関数で進行を管理しています。
控え室のスクリプトの呼び出し、各Procの呼び出し、各数値の計算・保存を行っています。
通信エラー処理以外は一本道の処理になっています。
通信エラー処理ですが、各部分のスクリプト実行中はエラーが発生してもスクリプト終了時まで実行してからエラーになります。
通信中は控え室のメッセージ処理はコマンドによって台詞ごとにタイミングを合わせています。
ミュージカルの結果のセーブデータ反映タイミングは、最後の控え室のスクリプトが実行され始める時。
最後の控え室でのスクリプト中に通信エラーが起きても、エラー表示をせず終了する。

○各ソースの関連
簡単な図はmusical_link.pngに示しましたが、共通部分としてscr/musical直下にポケモングッズのデータ管理・表示の処理があり、
ドレスアップ、ショーパートがそれぞれ利用している形になります。
ミュージカルショットはショーパートのものを流用しています。

○ポケモンの描画処理について
ポケモンの描画に使っているmusical_mcssですが、これはバトルのmcssとは違うものになります。
元は同じソースでしたが、プロジェクトの初期の段階でソースを別けました。
なので入っている処理、入っていない処理があります。
グッズの座標はこの描画処理中に計算して取得しているので、グッズの座標はポケモンの描画が終わった後に設定する必要があります。
なので3Dの描画処理の中にグッズの座標設定の処理が入ることになります。
また、現在特定座標を境にマルチセルのセルがずれる問題が出ています。
計算誤差の問題とは思いますが、どこが原因かはまだ不明です。mcssでも発生しています。

●ドレスアップ
○グッズのリストの計算について
グッズのリストで、円をタッチペンを使って回すという動作がありますが、この手の操作は
色々特許周りで問題があるそうです。
なので、こちらで特許をとってある方法で計算をする必要があります。
詳しくは 円移動計算_2006_08_17.doc を参照してください。

●ショーパート
○通信時のアピールボタン
非通信時はボタンを押したタイミングでグッズを使用しますが、通信の場合同期を取る必要があります。
そのため以下の手順を踏んでいます。
ボタンを押す→親機に使用リクエスト送信→親機が同時使用をチェックして使用フラグを送信→各子機でアピール使用
親機も自身に送信と言う形でちゃんと同時使用のチェックをする必要があります。

○スクリプトコマンド
ミュージカルの制御スクリプトは曽我部さんのEffectEditorを使用して作成されます。
コマンドの作成もバトルのエフェクトのコマンドと同じ方法で作成します。
ミュージカルのコマンドはprog\src\musical\stage\script\musical_script_command.hに記述してあります。
もし、コマンドを追加した場合、prog\src\musical\stage\script\script_table.datにも追加をしてください。

●デバッグ機能
○ミュージカルデバッグ
ミュージカルの演目チェックのために作成されたデバッグです。
起動して最初の画面では登場するポケモンの設定をします。
この画面でAを押すと出力ログに装着しているグッズが表示されます。
これをコピペでミュージカルの演目設定のExcelに貼り付けて使うことができます。
右上のボタンで進むとMCSがつながっている場合、EffectEditorと接続し、修正しつつ確認ができるようになっています。

○ミュージカルビュワー
ポケモンのグラフィック、グッズの装着状況をチェックするためのデバッグです。
Rを押すと点滅するポリゴンが表示され、上下キーでZ座標を調整できます。
これでグッズやセルの前後関係を確認することができます。
また、Rを押しながらYかXを押すとグラフィックチェックモードが始まります。
Yだと簡易チェック、Xだと通常チェックです。
このモードは全ポケモンの全フォルムでどの座標にグッズかついているかなどをチェックできます。
出力ログに記号が出ます。○がグッズ有り、×がグッズ無し、▲が一瞬グッズ座標が消えるタイミングがあるです。
右手・左手と右耳・左耳は反転処理の関係上セットで必要になっているのと、中心、回転座標が前と後ろにあるかをチェックできます。


