武将 - 死亡

メイン画面、戦争画面にかかわらず、武将を強制的に死亡させるためのAPIです。

武将が死亡しているかどうかの正しい判定

void カスタム::On_プレイヤ担当ターン《メイン画面》() {
	int iBushouID = Get_武将番号【配列用】(顔番号::武田晴信);
	if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
		// (この季節)戦場で戦死したか、もしくは、死亡状態
		if (p武将戸籍情報[iBushouID].戦死 == TRUE || p武将戸籍情報[iBushouID].状態 == 状態::死亡) {
			デバッグ出力 << "武田晴信は死亡しています" << endl;
		}
	}
}

死亡状態は長続きしない

死亡した武将は、そのうち天翔記というゲーム枠から外さるため、やがて「判定しようにもそもそも存在してない」状態となります。

死亡状態は最短だと1季節です。
それ以降、「待機武将や仮想武将が登場」する際、武将スロットの532枠のうち、「空きスロット」や「死亡している武将スロット」から選択されて、
新たな武将用のスロットとして再使用されます。

PICTURE

いかなる身分の武将でも正規手順にて死亡させることが可能な関数

bool Set_武将状態《→死亡》(int 死亡武将番号【配列用】, int 犯人武将番号【配列用】=-1)

第2引数はあまり気にしなくても良く、特に指定する必要はない。
その死亡が誰の仕業かが分かっている場合には指定することにより、将来、内部処理的により適切になる可能性がある。

  • この関数は死亡処理、及び、死亡後に必要な処理を天翔記仕様を踏襲して全て行う。
  • この関数自体は、「いかなる理由で死亡したのか?」のダイアログは当然出さない(出しようもない)ので、注意すること。
    病死したのか、戦死したのか、暗殺しに行ったら、逆に暗殺されたのか、
    それらは、別途、「情報ダイアログ表示」関数や、「確認ダイアログ表示」関数で、状況に応じて、
    プログラムを組む人間で判断し、必要であればダイアログや効果音を出す必要がある。
  • この関数は、あくまでも、「死亡処理」と「それに伴う必要な後処理(例えば大名を殺したのであれば、引き継ぎ処理)」などを行う。
  • この関数はデリケートであるため、使用タイミングがかなり制限されるであろう。
    不用意なタイミングでこの関数を呼び出すと、処理が先へと進まなくなったり、不正に落ちたりといったこととなる。

メイン画面

メイン画面では、通常下記のように、「On_軍団ターン変更」や、「On_プレイヤ担当ターン」など、
メイン画面の「ターン切り替わり目」系であれば安全に呼び出せる。
その他のタイミングは危険である。

  • 例①

    void カスタム::On_プレイヤ担当ターン《メイン画面》() {
        int iBushouID = Get_武将番号【配列用】(顔番号::織田信長);
        Set_武将状態《→死亡》(iBushouID);
    }
    
  • 例②
    void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) {
        int iBushouID = Get_武将番号【配列用】(顔番号::毛利元就);
        Set_武将状態《→死亡》(iBushouID);
    }
    

戦争画面

戦争画面では、On_噴出メッセージ直前
On_残りターン変更《戦争画面》時に安全に呼び出せる。

  • 例①

    string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
    
      // 混乱をしかけたら勝手に死亡。
      if ( 武将名 == "真田幸隆" && Is_正規表現マッチ(元メッセージ, "そうやすやすとは|技をもってしても|分別がつかなく") ) {
        int iBushouID = Get_武将番号【配列用】(顔番号::真田幸隆);
        Set_武将状態《→死亡》(iBushouID);
      }
      // 変更しない場合""
      return "";
    }
    
  • 例②

    void カスタム::On_残りターン変更《戦争画面》(int 残りターン数) {
        // ターン切り替わり時に今表示中の戦場マップの誰かが「フッ…」と死亡。
        番号リスト型 list = Get_出陣中の武将番号リスト【配列用】《表示中マップ》();
        if ( list.size() > 0 ) {
            Set_武将状態《→死亡》(list[0]);
        }
    }
    

武将の戦場での戦死と死亡状態

武将が戦場で死亡したからといって、突然ただちに、

p武将戸籍情報[i].状態 == 状態::死亡

になったりはしないので注意すること!!

天翔記の本来の動作でも、そのようなことにはならない。

武将が戦場で死亡した場合、

p武将戸籍情報[i].戦死 == TRUE

というように「一端戦死」という状態となり、
戦争が終わったタイミングで、初めて正式に、

p武将戸籍情報[i].状態 == 状態::死亡 となり、

代わりに、

p武将戸籍情報[i].戦死 == FALSE

値がFALSEへと戻る

より詳細を知るには...

「武将 - 死亡」に関する主な所は以上となります。
詳しくは「武将情報型.h」や「武将情報列挙.h」などを参照してください。