記録表示画面のプログラムについての説明 dm_data_mode_main.c // プログラム本体 dm_data_mode_main.h // ヘッダーファイル 構造体の説明 typedef struct{ s16 plate_pos[9][2]; s8 menu_no; }rank_pos; plate_pos は、順位プレートのX座標、Y座標を持ちます。 配列の0が題目(白いプレート)の座標で1〜8が順位プレートの座標になります。 menu_no は現在選択中のメニューの番号が入ります(0〜3)。 0がストーリー、1がレベルセレクト、2がVSCOM、3がVSMANになります。 (evsworks.h に記述してある DAM_M_???? )が対応している。 実際のプログラム中では、 rank_pos dm_data_mode_rank_pos[2]; の配列を使います。 基本的に全体表示の場合、dm_data_mode_rank_pos の配列両方の座標とメニューを描画しています。 (座標データとシザリングで基本的に片方しか描画されません。) 何故、両方描画するかというと、メニュー切り替えの時、スクロールするためで、スクロールが終わると 配列の0番に、1の方データがコピーされます。 個人データ表示の場合、配列の0番のほうが描画されます。 *ソース説明 ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_num_load( void ) 行番号 32 〜 41行 数字データをロードするだけの関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_mini_num_load( void ) 行番号 43 〜 52行 小さい数字データをロードするだけの関数 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_disp_score( u32 score,s16 x_pos, s16 y_pos,s8 h_size ) 行番号 54 〜 77行 得点描画専用関数( X座標は右端の座標にする) (グラフィックはdm_data_mode_num_load() でロードしておく) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_disp_num_no_sift( s16 d_num,s16 x_pos, s16 y_pos,s8 keta,s8 h_size ) 行番号 80 〜 109行 数字描画関数(指定桁数しか描画しない)( X座標は右端の座標にする) (グラフィックはdm_data_mode_num_load() でロードしておく) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_disp_mini_num_no_sift( s16 d_num,s16 x_pos, s16 y_pos,s8 keta,s8 h_size ) 行番号 111 〜 140行 小数字描画関数(指定桁数しか描画しない)( X座標は右端の座標にする) (グラフィックはdm_data_mode_mini_num_load() でロードしておく) ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_story_sort_set( game_state *state,u32 time ,u8 player_no ,u8 g_level,u8 c_stage ) 行番号 143 〜 220行 ストーリーモードセーブデータソート・入れ替え関数 155行 ストーリーモードのプレイ回数を加算する。 156行 ストーリーモードのプレイ回数にリトライ数も加算する。 158 〜 160行 ストーリーモードでの最大連鎖数(消滅列数)の入れ替え処理。 163 〜 165行 作業用ワークに現在のストーリーモードのデータをコピーする。 166 〜 170行 比較する新しいデータの設定。 173 〜 214行 並べ替え処理。データが同じ場合、得点 -> 時間 -> ゲームレベル -> クリアステージ -> リトライ回数 の順に比較し、並び換えを行う。 216 〜 218行 入れ替えが完了したデータをセーブデータに戻す。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_level_sort_set( game_state *state,u8 player_no ) 行番号 222 〜 290行 LEVEL セーブデータソート・入れ替え関数 235行 レベルセレクトモードのプレイ回数を加算する。 236行 レベルセレクトモードのプレイ回数にリトライ数も加算する。 238 〜 240行 レベルセレクトモードでの最大連鎖数(消滅列数)の入れ替え処理。 243 〜 245行 作業用ワークに現在のレベルセレクトモードのデータをコピーする。 246 〜 249行 比較する新しいデータの設定。 250 〜 253行 クリアレベルが100以上の場合、99にする。 255 〜 284行 比較する新しいデータの設定。並べ替え処理。データが同じ場合、クリアレベル -> カプセル速度 -> 得点 -> リトライ回数 の順に比較し、並び換えを行う。 287 〜 289行 入れ替えが完了したデータをセーブデータに戻す。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_vscom_set( game_state *state,s16 win,s16 lose,u8 player_no,s8 char_no ) 行番号 292 〜 309行 VSCPU セーブデータ設定関数 300行 VSCPUモードのプレイ回数を加算する。 301行 VSCPUモードのプレイ回数にリトライ数も加算する。 303 〜 305行 VSCPUモードでの最大連鎖数(消滅列数)の入れ替え処理。 307行 勝ちポイント(3勝で1ポイント)の加算 308行 負けポイント(3敗で1ポイント)の加算 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_vsman_set( game_state *state,s16 win,s16 lose,u8 player_no,s8 enemy_no ) 行番号 310 〜 328行 2PLAY セーブデータ設定関数 318行 2PLAYモードのプレイ回数を加算する。 319行 2PLAYモードのプレイ回数にリトライ数も加算する。 321 〜 323行 2PLAYモードでの最大連鎖数(消滅列数)の入れ替え処理。 325行 勝ちポイント(3勝で1ポイント)の加算 326行 負けポイント(3敗で1ポイント)の加算 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_story_sort(void) 行番号 331 〜 399行 ストーリーモード順位ソート関数 この関数は、ストーリーモードのセーブデータを得点 -> 時間 の順に比較し、表示用順位を取得するための関数。 表示のたびに計算していたら、毎回時間がかかるので、初期化の時点でやっている。 345 〜 363行 並び換え処理 364 〜 372行 全体の表示順位( 1 〜 8までの数字 )の設定を行っている。同じ得点の場合、順位表示が同じになる。 375 〜 385行 個人の表示順位( 1 〜 5までの数字 )の設定を全体分(8回)行っている。同じ得点の場合、順位表示が同じになる。 388 〜 398行 順位データを設定、クリア時間を表示用に計算しておく。 dm_dmr_d[DAM_M_STORY][i] の中に、セーブデータの配列番号が入る。 dm_dm_a_timeには、全体表示用の時間が入る dm_dm_p_timeには、個人表示用の時間が入る ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_level_sort(void) 行番号 401 〜 451行 レベルセレクト順位ソート関数 この関数は、レベルセレクトのセーブデータをクリアレベルで比較し、表示用順位を取得するための関数。 表示のたびに計算していたら、毎回時間がかかるので、初期化の時点でやっている。 415 〜 424行 並び換え処理 426 〜 433行 全体の表示順位( 1 〜 8までの数字 )の設定を行っている。同じ得点の場合、順位表示が同じになる。 436 〜 445行 個人の表示順位( 1 〜 5までの数字 )の設定を全体分(8回)行っている。同じ得点の場合、順位表示が同じになる。 448 〜 450行 順位データを設定。dm_dmr_d[DAM_M_LEVEL][i] の中に、セーブデータの配列番号が入る。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_vscom_sort(void) 行番号 452 〜 501行 VSCOM 順位ソート関数 この関数は、VSCOMのセーブデータから勝率を求め比較し、表示用順位を取得するための関数。 表示のたびに計算していたら、毎回時間がかかるので、初期化の時点でやっている。 462 〜 473行 勝率を求める計算をしている。dm_vscom_a_ave[i][0]に勝率が入る 476 〜 485行 並び換え処理 487 〜 494行 全体の表示順位( 1 〜 8までの数字 )の設定を行っている。同じ得点の場合、順位表示が同じになる。 497 〜 499行 順位データを設定。dm_dmr_d[DAM_M_VSCOM][i] の中に、セーブデータの配列番号が入る。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_vsman_sort(void) 行番号 503 〜 556行 VSMAN 順位ソート関数 この関数は、VSMANのセーブデータから勝率を求め比較し、表示用順位を取得するための関数。 表示のたびに計算していたら、毎回時間がかかるので、初期化の時点でやっている。 513 〜 528行 勝率を求める計算をしている。dm_vsman_a_ave[i][0]に全体の勝率が入り、dm_vsman_p_ave には、各個人に対しての勝率が入る。 530 〜 540行 並び換え処理 541 〜 549行 全体の表示順位( 1 〜 8までの数字 )の設定を行っている。同じ得点の場合、順位表示が同じになる。 497 〜 499行 順位データを設定。dm_dmr_d[DAM_M_VSMAN][i] の中に、セーブデータの配列番号が入る。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void init_dm_data_mode(void) 行番号 559 〜 618行 記録表示処理初期化関数 各変数の初期化を行っている。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ int dm_data_mode_main(NNSched* sched) 行番号 620 〜 849行 記録処理メイン関数 657 〜 831行 メインループ 667 〜 828行 dm_data_mode_menu[0]の内容を基に、制御を行う。 669 〜 697行 個人記録表示から全体記録表示への切り替え処理を行っている。 671 〜 675行 個人プレートが画面外に移動する処理を行っている。画面外まで移動したら次の処理に移行する。 678 〜 686行 メニュー( STORY/LEVEL/VSCOM/VSMAN)の移動処理。選択されているメニューが定位置まで移動する。 688 〜 696行 プレート(名前とかが書いてあるもの)の縮小拡大処理。縮小が終わると、表示するものを切り替え 拡大を開始するようになる。 698 〜 724行 全体記録表示から個人記録表示への切り替え処理を行っている。 700 〜 704行 個人プレートが指定座まで移動する処理を行っている。移動が終了したら次の処理に移行する。 706 〜 714行 メニュー( STORY/LEVEL/VSCOM/VSMAN)の移動処理。選択されているメニューが定位置まで移動する。 716 〜 724行 プレート(名前とかが書いてあるもの)の縮小拡大処理。縮小が終わると、表示するものを切り替え 拡大を開始するようになる。 725 〜 757行 プレートの移動切り替え処理を行っている。移動が終了すると、処理が切り替わる。 758 〜 759行 ループ脱出時の処理。これといって何もしていない。 760 〜 764行 画面切り替え時(記録画面に入ってきたとき)の処理。切り替え処理が終了すると 処理が切り替わる。 765 〜 818行 全体記録表示の時の処理。 767 〜 776行 カーソル点滅の処理。 778 〜 819行 各種キー処理を行っている。 基本的に、左右のキーは、メニューの切り替え、上下は、カーソルの移動。 Bボタンで終了、Aボタン個人データに切り替え。 819 〜 827行 個人記録表示の時の処理。Bボタンで全体記録表示に戻る。 ------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------ void dm_data_mode_graphic(void) 行番号 851 〜 1556行 記録描画メイン関数 dm_data_mode_disp_menu[0] の内容で描画するものが替わる。 905 〜 910行 メニュー( STORY/LEVEL/VSCOM/VSMAN)の描画。 913 〜 921行 DAM_MENU_ALL と DAM_ALPHA_OUTの時は、メニュー用カーソルを点滅させるための処理を行っている。 929 〜 946行 メニュー用矢印の描画処理。 955 〜 1544行 各メニュー別記録の描画を行っている。 957 〜 1229行 全体記録の描画を行っている。通常時は2回ループをまわして、2種類の記録を描画している。(スクロールして切り替わるため) 脱出中は1回。 960 〜 964行 ループ回数の設定。 967行 縮小しきったときは、描画しない。 974行 各メニュー( STORY/LEVEL/VSCOM/VSMAN )用のパレットロード 975 〜 978行 プレート( 8個 )描画。テクスチャメモリには、半分のグラフィックがロードされているので、反転して1つを描いている。 984 〜 994行 題目(ナマエ クリアレベル)等を描画するプレートの描画。 998 〜 1005行 順位(番号)の描画。初期化の部分で描画される数字が決定している。 1009 〜 1193行 各メニュー別の内容の描画。 1014行 そのメニュー用のパレットをロードしておく。 1020 〜 1056行 ストーリーに関する描画。 1020 〜 1027行 題目の描画。 1031 〜 1037行 ゲームレベル描画。 1039 〜 1043行 コンマ描画。(ゲームレベル とパレット共通) 1045 〜 1055行 数字関係の描画。(得点・時間) 1057 〜 1091行 レベルセレクトに関する描画。 1058 〜 1065行 題目の描画。 1068 〜 1075行 ゲームスピードの描画。 1077 〜 1082行 LVの描画。 1084 〜 1090行 数字関係の描画。(クリアレベル) 1092 〜 1029行 VSCOMに関する描画。 1093 〜 1100行 題目の描画。 1101 〜 1116行 %・○・×の描画。(パレット共通) 1118 〜 1127行 数字関係の描画。(勝率・勝数・負け数) 1130 〜 1169行 VSMANに関する描画。 1131 〜 1139行 題目の描画。 1141 〜 1156行 %・○・×の描画。(パレット共通) 1157 〜 1166行 数字関係の描画。(勝率・勝数・負け数) 1178 〜 1188行 名前描画。 1195 〜 1198行 カーソル点滅用の設定。 1200 〜 1210行 カーソル描画。 1212 〜 1227行 矢印描画。 1231 〜 1541行 個人記録の描画を行っている。 1235 〜 1239行 プレートの描画数を決定している。 通常は6、VSMANの場合のみ8となる。 1242 〜 1253行 プレート描画。但し、VSCOMは描画しない。 1255 〜 1269行 題目(ナマエ クリアレベル)等を描画するプレートの描画。 1272 〜 1280行 ストーリーモードかレベルセレクトの場合、順位(番号)の描画。初期化の部分で描画される数字が決定している。 1283行 題目用パレットデータの読込み。 1285 〜 1503行 各メニュー別の描画。 1287 〜 1056行 ストーリーに関する描画。 1288 〜 1295行 題目の描画。 1298 〜 1305行 ゲームレベル描画。 1306 〜 1314行 ALL(ゲームをクリアしていた場合)の描画。(ゲームレベル とパレット共通) 1316 〜 1320行 コンマ描画。(ゲームレベル とパレット共通) 1323 〜 1343行 数字関係の描画。(得点・時間・ステージ・リトライ数) 1346 〜 1386行 レベルセレクトに関する描画。 1346 〜 1353行 題目の描画。 1356 〜 1362行 ゲームスピードの描画。 1365 〜 1369行 LVの描画。 1371 〜 1384行 数字関係の描画。(得点・クリアレベル・リトライ数) 1387 〜 1452行 VSCOMに関する描画。 1388 〜 1395行 題目の描画。 1396 〜 1406行 VSCOM用のプレート描画。1403 行の evs_secret_flg はピーチ姫が使えるようになると、自動的に ピーチ姫の分も描画するようになっている。 1408 〜 1417行 小さい顔の描画。 1419 〜 1435行 ○・×の描画。(パレット共通) 1437 〜 1450行 数字関係の描画。(勝数・負け数) 1453 〜 1500行 VSMANに関する描画。 1454 〜 1461行 題目の描画。 1462 〜 1477行 %・○・×の描画。(パレット共通) 1480 〜 1484行 VSの描画。 1486 〜 1498行 数字関係の描画。(勝率・勝数・負け数) 1503行 小さい数字のロード。 1505行 選択しているメニューのプレイ回数の描画。 1507行 選択しているメニューの最大連鎖数の描画。 1516 〜 1518行 個人プレート上の名前の描画。 1520 〜 1535行 VSMANの時、選択している名前以外の名前を描画する。 ------------------------------------------------------------------------------------------------------------------------------------