void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号)

void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) {
}

引数の補足

  • 軍団番号:

    現在ターンが回ってきた軍団の軍団番号。
    「pターン情報.現在の軍団【軍団番号】」と同じ番号

タイミング

  • メイン画面において、天翔記では、「各大名」にターンが回ってくるのであるが、

    PICTURE

    さらにその内訳をみると、大名麾下の軍団が順次処理をしていく。(大名自身も軍団長である)
    このメソッドは、その各軍団にターンが回ってきた先頭で、呼び出される。
    厳密には下記の通りである。

    PICTURE

    これら矢印のタイミングでメソッドが呼ばれることとなる。。

一般的用途

  • 各軍団が処理を行う直前に、何か処理を加えたい場合、このメソッドを利用する。
  • このメソッドはセーブやロードによって何度も実行される、といったことがなく、
    ゲームを通して必ず「1季節ごとに各軍団1回だけ」実行される。
    よって、「季節ごとに各軍団必ず1回やっておきたい処理」を記述するのに非常に向いている。
  • よって、歴史イベントの記述を加えるのにも向いている。

例①

void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) {
  /*
   * 「プレイヤ勢力麾下の軍団」でないならば
   *  CPUが処理をする前に、金欠、米欠なら、恵む。
   */
  int iGundanID = 軍団番号-1;

  if ( ! Is_プレイヤ担当軍団( iGundanID ) ) {
    if ( p軍団情報[iGundanID].米 < 500 ) {
      p軍団情報[iGundanID].米 = 500;
    }
    if ( p軍団情報[iGundanID].金 < 500 ) {
      p軍団情報[iGundanID].金 = 500;
    }
  }
}

例②

/*
 * 織田信長のイベントを段階的に進捗させていく、というサンプル
 */
#define 織田信長イベント名          "SPL_EV01"
#define 織田信長イベント進捗・A    フラグ枠::A
#define 織田信長イベント進捗・B    フラグ枠::B

bool Check_イベント001(int 軍団番号【配列用】) {

  // 「SPL_EV01というフラグのA枠」がFALSEなら
  if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・A) == FALSE ) {

    // 1550年~60年の間なら発生
    if ( 1550 <= Get_西暦() && Get_西暦() <= 1560 ) {

      // 軍団長の武将番号【配】を求める
      int iGundanLeaderBushouID = p軍団情報[軍団番号【配列用】].軍団長【武将番号】-1;

      // 居れば
      if ( 0 <= iGundanLeaderBushouID && iGundanLeaderBushouID < 最大数::武将情報::配列数 ) {

        if ( p武将戸籍情報[iGundanLeaderBushouID].顔番号 == 顔番号::織田信長 ) { // 織田信長の顔番号

          // この軍団長は、大名でもある
          if ( p武将戸籍情報[iGundanLeaderBushouID].状態 == 状態::大名 ) {
            実行/取消ダイアログ表示("織田信長にターンが回る直前、何かイベント発動\x0A★★★★★★★★★★★");

            // このイベントが発生したというのをフラグ名SP_EV01に残す。
            Set_フラグ(織田信長イベント名, TRUE, 織田信長イベント進捗・A);

            return true; // イベントは起きた
          }
        }
      }
    }
  }

  return false; // イベントは起きてない。
}

bool Check_イベント002(int 軍団番号【配列用】) {

  // 「SPL_EV01というフラグのA枠」がFALSEならまだこのイベントは早い。まずは、Aが進んでから。
  if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・A) == FALSE ) {
    return false;
  }

  // 進捗Bがまだ発生していない。
  if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・B) == FALSE ) {
    if ( 1563 <= Get_西暦() && Get_西暦() <= 1565 ) {

      //  イベント進捗Bのための処理

      // このイベントが発生したというのをフラグ名SP_EV01に残す。

      実行/取消ダイアログ表示("織田信長にターンが回る直前、何かイベント発動、その②\x0A★★★★★★★★★★★");
      Set_フラグ(織田信長イベント名, TRUE, 織田信長イベント進捗・B);

      return true;
    }
  }

  return false; // イベントは起きてない。
}

void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) {
  Check_イベント001(軍団番号-1);
  Check_イベント002(軍団番号-1);
}

PICTURE