▲前のページへ
次のページへ▼

ゲームルールの作成


【目次】
コンバータの中にある「レベルスクリプト」のファイルを開く
制限時間を設ける
プレイヤーキルに対するスコア加算を加える
ファイルを上書き保存する


コンバータの中にある「レベルスクリプト」のファイルを開く

 ここまでで一通りのゲームの流れは作成できましたが、まだ「ゲームルール」がないため、このゲームは半永久的に終わりません。
 そこで、「ゲームルール」を組み込んでみましょう。
   ※ ここで言う「ゲームルール」とは、ゲームの勝敗判定を決定するもの、と思ってください。

■ レベルスクリプトファイルをメモ帳などで開く
  ゲームルールなどの設定は「レベルスクリプト」で行ないます。
  モノビットMOエンジン v1.1 の段階ではまだこのエディタが無いため、手入力によるスクリプト改変を行ないます。

  まずはその「レベルスクリプト」のファイルを開きましょう。
  tools/MOScriptConverter 内の以下のファイルをメモ帳などで開いてください。

    tools/MOScriptConverter/SimpleStage.mos

  


制限時間を設ける

 では早速ゲームルールを設けていきましょう。
 まずは制限時間の設定からです。

■ 制限時間の設定を行なう
  まずは制限時間の設定を行ないます。今回は2分(120秒)としましょう。
  SimpleStage.mos 内の [initialize] ラベルに以下の命令を追加してください。
// 制限時間を設定
lvl_timeLimit(120);
  

■ 割り込み制御のプロセスを設定する
  続けて、タイムリミットになったらゲームを終了する処理を段階的に組み込みます。
  まずは「割り込み」のプロセスを設定するところからです。
  SimpleStage.mos 内の [initialize] ラベルに以下の命令を追加してください。
// 割り込み処理ラベルを設定
setmiv( interrupt );
  

■ 割り込み制御の記述
  上記で宣言したプロセス [interrupt]を、レベルスクリプトの文末に加えましょう。
  SimpleStage.mos 内の末尾に以下の命令を追加してください。
    ※ タイムアップしたら set_battle_timeup をコールします。
[interrupt]
        // 割り込みタイプ取得
        ldi( r(10), r(0) );
        
        // タイムアップ処理へ
        cmpbeq( r(10), lvl_TIME_UP, set_battle_timeup );

        // 割り込み終了
        reti();
  

■ タイムアップ後の処理の記述
  上記で宣言したプロセス [interrupt]を、レベルスクリプトの文末に加えましょう。
  SimpleStage.mos 内の末尾に以下の命令を追加してください。
    ※ スコアレジスタ( r(40), r(41) ) の値を元に勝敗判定を組み込みます。
      スコアレジスタに入る値については後述します。
// タイムアップ設定
[set_battle_timeup]

        // 結果を設定します
        gmemset( GMEM_RESULT_TYPE, RESULT_TYPE_TIMEUP );
        gmemset( GMEM_SCORE_TEAM_A, r(40) );
        gmemset( GMEM_SCORE_TEAM_B, r(41) );

        // バトルを終了します
        lvl_battle_end();
        
        // スクリプト終了
        exit();
  


プレイヤーキルに対するスコア加算を加える

 制限時間の設定を行なったところで、後はスコアの加算処理を加えれば簡単なゲームルールは完成します。
 今回は「より多くのプレイヤーキャラクタを倒したチームの勝利」というルールで実装を加えてみようと思います。

■ プレイヤーキル(リスポーン)時の割り込みプロセスを設定する
  まずは、プレイヤーキル(リスポーン)した時の割り込みプロセスの設定を行ないます。
  SimpleStage.mos 内の [interrupt] ラベルに以下の命令を追加してください。
        // 相手チーム討伐処理へ
        cmpbeq( r(10), lvl_UNIT_DELETE, player_dead );
  

■ [player_dead] のステートラベルを作成する
  上記引数値としている player_dead はステートラベルになりますので、この割り込みプロセスの中身を作成していきます。
  SimpleStage.mos 内の末尾に以下の命令を追加してください。
// 相手プレイヤー討伐処理
[player_dead]

        // 討伐されたユニットIDを取得
        ldi( r(11), sys(lvl_sys_MyUnitId) );

        // 討伐されたチームを取得
        cmn_get_influence( r(11) );
        ldi( r(43), rRet );

        // 討伐されたチームが赤だったら、青チームに加算
        cmpbeq( _i(1), r(43), update_score_team_b );

        // 討伐されたチームが青だったら、赤チームに加算
        cmpbeq( _i(2), r(43), update_score_team_a );

        // 割り込み終了
        reti();
  

■ 赤チーム or 青チームの得点加算
  上記の cmpbeq で分岐処理を実行している update_score_team_b および update_score_team_a を作成します。
  SimpleStage.mos 内の末尾に以下の命令を追加してください。
// 赤チームにスコア加算
[update_score_team_a]

        // スコアを1点加算
        addi( r(40), _i(1) );
        
        // 割り込み終了
        reti();

// 青チームにスコア加算
[update_score_team_b]

        // スコアを1点加算
        addi( r(41), _i(1) );
        
        // 割り込み終了
        reti();
  


ファイルを上書き保存する

  組み込み終わったら、編集した SimpleStage.mos を上書き保存してください。
    ※ 上書き保存する方法はエディタによって異なります。
  


▲前のページへ
次のページへ▼