操作説明プログラムについての説明 dm_manual_main.c // プログラム本体 dm_manual_main.h // プログラムヘッダーファイル体 *ソース説明 ------------------------------------------------------------------------------------------------------------------------------------ 行番号 30 〜 185行 操作説明内部で使用される変数の宣言( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_all_init( void ) 行番号 188 〜 290行 操作説明初期化関数 各変数の設定を行っている ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_get_manual_str_len(u16 *str) 行番号 291 〜 305行 操作説明用文字列操作関数(1行の長さ取得) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_set_manual_str(u16 *str) 行番号 307 〜 324行 文字列データを表示用バッファへコピーする関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_set_manual_str_link(u16 *str) 行番号 327 〜 354行 文字列データをバッファへの最後尾にコピーする関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_str_next_line(void) 行番号 356 〜 391行 5行以上の時の改行関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_draw_manual_str(s16 x_pos,s16 y_pos,u16 *str,s8 max) 行番号 392 〜 451行 文字列描画関数 5行目で描画する。5行以上の時は特殊改行処理を行う。( dm_manual_str_next_line() ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_str_main(void) 行番号 452 〜 491行 文字列進行関数 内部でキノピオのクチパクの制御も行っている。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_set_attack_capsel( game_a_cap *cap,s8 pos_x,s8 color ) 行番号 492 〜 501行 操作説明攻撃カプセル設定関数 操作説明での攻撃カプセルは、別変数として処理される。(ゲーム中は、粒落下で処理されている) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_attack_capsel_down( void ) 行番号 502 〜 550行 操作説明攻撃カプセル落下処理関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_set_move( s16 now,s16 next,s8 count,s8 wait,s8 vec ) 行番号 552 〜 562行 移動・回転設定関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_effect_cnt( game_state *state,game_map *map,u8 player_no ,u8 flg ) 行番号 553 〜 586行 操作説明用演出処理関数 ゲーム中のように細かい判別はない。共通( 黒上がりや攻撃 )演出以外は各操作説明ごとに処理いている。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_main_cnt( game_state *state,game_map *map,u8 player_no ,u8 flg ) 行番号 587 〜 805行 各個人ゲーム処理関数 操作説明でも、ゲーム中と同じように、各個人の処理 -> 各モード別( 説明内容 )の処理 -> 統括処理の形をとっている。 これは、その中の各個人用の処理を行う関数。ゲーム中と違うところは、ウイルス配置が無く、細かい処理が無い( ポーズ中の処理や、リトライの操作処理 )こと。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_1_main(void) 行番号 807 〜 1268行 操作説明その1処理メイン関数 各処理メイン関数はどれも似たような処理をしています。 まず dm_manual_main_cnt で各個別の処理( 瓶の中 )を行います。 dm_manual_mode[dm_manual_now] の内容によってカプセルの回転や移動の処理、終了判定等の制御を行っています。 なお、処理を行っている場合は、dm_manual_work_on (1)、処理終了の場合は、dm_manual_work_off(-1)を返すようになっている。 重要な部分の説明(細かい部分はコメント参照) 820 〜 822行 キー点滅用カウンターの計算。(1PLAY 用の説明の時にキーを点滅させるためのカウンター ) 824 〜 827行 各個人の処理部分。( ゲーム中と同じようなことをしている ) dm_manual_mode_stop_flg が立っているときのみ処理を行う。 (逆にいうと、処理を停止させるときは、dm_manual_mode_stop_flgを0にすればいい ) 874 〜 1268行 dm_manual_mode[dm_manual_now]( dm_manual_mode[0] )の内容で処理を行っている部分。 876 〜 898行 各変数の初期化を行う(コメント参照) 。尚、この時点でグラフィックを操作説明用に切り替えている。 899 〜 912行 ウイルスの配置を行っている。ウイルスの配置が終了すると、文字列表示を開始する。 914行 今後、このような判定が多く出てくる。manual_str_flg が マイナスの場合、文字列が最後まで表示されたことをあらわす。 931 〜 949行 カプセルの点滅の処理を行っている。基本的に、カプセルの色を、暗い色と明るい色とで交換しているだけ。 957行 今後、いやなくらいに出てくる処理。各変数に数値を代入している。 @ A B C D dm_manual_set_move( dm_manual_translate, 21, 3,manual_main_time_table_1[0],cap_turn_r) @ 次に行う処理( dm_manual_translate(移動)・dm_manual_rotate(回転)・dm_manual_wait(待ち)・dm_manual_down(高速落下)・数値( 次の処理番号 )) A @の処理が終了した後どの処理に行くか。( 数値( 次の処理番号 )・dm_manual_down(高速落下))が入る。 注意したいのは、dm_manual_down(高速落下)を設定した場合で、dm_manual_mode[dm_manual_next_next]( dm_manual_mode[2] )に落下 し終わった後の処理番号を入れておく必要がある。 B処理回数。回転(移動)の回数が入る。 C処理間隔。回転(移動)が複数回の場合、回転と回転の間のウェイトの数値になる。 D方向。( cap_turn_r 右・cap_turn_l 左 ) この場合、右方向に3回、manual_main_time_table_1[0]の間隔で移動。 例 dm_manual_set_move( dm_manual_translate, dm_manual_down, 2,10,cap_turn_r) dm_manual_mode[dm_manual_next_next] = 10; 10イントの間隔で右方向に2回移動。(移動終了後,dm_manual_mode[dm_manual_now] に dm_manual_mode[dm_manual_next] の値( dm_manual_down )が入る。 ↓ 高速落下( キーを下に入れた状態 )( カプセルが着地するとdm_manual_mode[dm_manual_now] に dm_manual_mode[dm_manual_next_next] の値(10)が入る。 ↓ 処理番号 10の処理へ。 989行 今後、いやなくらいに出てくる処理。操作カプセルが着地したかどうかの判定。 1022行 指定座標のカプセルが消滅状態になったか調べている。(この場合、X = 3,Y = 13 ( X = 0 〜 8,Y = 0 〜 15 で計算する)) 1036行 今後、いやなくらいに出てくる処理。指定座標のカプセルが消えたかどうか調べている。(この場合、X = 4,Y = 15 ( X = 0 〜 8,Y = 0 〜 15 で計算する)) 以下の処理は、他の処理メインでも必ずある処理です。 1208 〜 1213行 ウェイト処理。使用方法は、dm_manual_timer_count に待ち時間を設定、 dm_manual_mode[dm_manual_now] に dm_manual_wait を設定、 dm_manual_mode[dm_manual_next] に次の処理番号を設定しておく。( dm_manual_set_move でも代用可能 ) 例 1051行 dm_manual_set_move( dm_manual_wait,42,0,20,cap_turn_r); // 20イントの待ち時間 この場合、第3引数と第5引数は無視されます。 1214 〜 1229行 高速落下(キーを下に入れた場合の処理)。 1215 〜 1219行 カプセルが落下しなくなった(着地)した場合、カプセル落下速度を戻し、次の処理番号を設定している。 1220 〜 1225行 高速落下の処理。dm_dilemma_wait は 10イントの間(ジレンマ)を取ってから高速落下するようにしている。 1226 〜 1227行 操作説明その1とその4では、押したボタンの位置に○を表示するようにしている。そのための処理を行っている。 manual_key_flash_count には表示時間を設定する。( 高速落下の場合、落下するまで消えない ) manual_key_flash_pos には表示位置に対応した番号を入れる。 0:左 1:下 2:右 3:B 4:A 1230 〜 1247行 カプセルの左右移動処理。dm_manual_timer_count( 間隔 )をとり、左右に移動させる。 dm_manual_move_count が0の時、次の処理を行うようになっている。 1248 〜 1265行 カプセルの回転処理。dm_manual_timer_count( 間隔 )をとり、左右に回転させる。 dm_manual_move_count が0の時、次の処理を行うようになっている。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_2_main(void) 行番号 1270 〜 1581行 操作説明その2処理メイン関数 1288行 1PLAYの時と違い、攻撃・被爆に対しての演出処理を行う処理をしている。 1289行 攻撃カプセル落下処理。ゲーム中とは異なり、攻撃カプセルの情報を変数で管理しているため、 落下処理を別に行っている。 1380行 攻撃カプセルの設定の処理を行っている。 dm_manual_set_attack_capsel( &dm_manual_at_cap[1][0],2,capsel_blue ); この場合、 dm_manual_at_cap[1][0] が攻撃カプセルの変数、2が落下させるX座標( 0 〜 7 )、capsel_blue が攻撃色。 1382行 攻撃カプセル落下カウンタのクリア。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_3_main(void) 行番号 1583 〜 2031行 操作説明その3処理メイン関数 1617 〜 1662行 瓶の中のカプセルを点滅させる処理を行っている。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_4_main(void) 行番号 2034 〜 2580行 操作説明その4処理メイン関数 やっていることは、その1とほぼ同じ。(コメント参照) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_5_main(void) 行番号 2582 〜 3108行 操作説明その5処理メイン関数 やっていることは、その2とほぼ同じ。(コメント参照) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ s8 dm_manual_6_main(void) 行番号 3109 〜 3593行 操作説明その6処理メイン関数 3156行 操作する瓶の番号の設定を行っている。( 瓶の番号は、左から 0〜3 ) 3478行 操作する瓶の番号を0(左端)から1(左から2番目)に変更している。 やっていることは、その3とほぼ同じ。(コメント参照) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_1_graphic(void) 行番号 3595 〜 3639行 操作説明その1追加描画関数 操作説明その1の時、カプセルが左右下に動くときに表示される矢印と、縦消し、横消しの説明の時表示される四角い枠の描画を行っている。 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_3_graphic( void ) 行番号 3641 〜 3698行 操作説明その3追加描画関数 操作説明その3の時、瓶の周りに点滅する枠を描画する処理を行っている。 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_6_graphic( game_state *state,game_a_cap *cap,s8 player_no ) 行番号 3699 〜 3742行 操作説明その6追加描画関数 操作説明その6の時、瓶の周りに点滅する枠を描画する処理を行っている。 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_4_graphic( void ) 行番号 3745 〜 3758行 操作説明その4追加描画関数 操作説明その4の時、積み上げすぎの警告の時に点滅させている部分の描画(赤い点滅) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_at_cap_draw( game_state *state,game_a_cap *cap,s8 size_flg ) 行番号 3760 〜 3780行 操作説明用攻撃カプセル描画関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_atarrow_draw( game_state *state,game_a_cap *cap,s8 flg ) 行番号 3782 〜 3803行 操作説明攻撃カプセル矢印描画関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void disp_kinopio(s16 x_pos,s16 y_pos,s8 flip) 行番号 3804 〜 3835行 キノピオ描画関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void disp_cont(void) 行番号 3836 〜 3868行 操作説明その1・その4の時に、キーのところに○を描画する関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ int dm_manual_main(NNSched* sched) 行番号 3870 〜 4062行 操作説明メイン関数 3885 〜 3930行 背景データ・アイテムデータの読込み。 3932行 変数の初期化。 3939 〜 4029行 メインループ。 3952 〜 3972行 各操作説明別の処理を行っている。 3976 〜 3985行 BGMを停止する処理をしている。通常、操作説明にBGMはないが、クリア音とゲームオーバー音、WINの音は BGM扱いとなっているため、一時的に曲再生を行うようになっている(各処理内で)。ここでは、一定時間 鳴らしたら止める処理をしている。 3987 〜 3989行 デバック用タイマー 4017 〜 4025行 キー入力があった場合、ループから抜ける処理をしている。 4045 〜 4059行 タイトルかモードセレクトに戻る。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_manual_graphic(void) 行番号 4064 〜 4233行 操作説明描画メイン関数 ( コメント参照 ) ------------------------------------------------------------------------------------------------------------------------------------