最終更新日 2024-09-25

待機武将

待機武将は、シナリオデータ(sndata.n6p)の武将関連の情報に問い合せることにより、
待機武将の一覧に対してアクセスする手段となります。

ゲーム実行中に待機武将そのもののデータを事前に書き換えることは出来ないため、
原則的にはこの情報は読み取り専用となります。

待機武将そのものの登場・非登場をコントロールしたい場合

待機武将が登場した直後に実行されるイベントハンドラの
On_待機武将登場直前 を利用してください。

待機武将の登場と同時に能力等を変更させたい場合

待機武将が登場した直前に実行されるイベントハンドラの
On_待機武将登場直後 を利用してください。

Get_待機武将データ数()

該当のシナリオにおいて、「待機武将のデータ数」を取得する。
実行するシナリオや、改変シナリオによって、「待機武将」の数が異なるので、
「待機武将一覧」を総なめしたい場合などに利用する。

これらの「待機武将」に関する並びやパラメータは、シナリオエディタで「該当シナリオ」の「未登場武将」タブで確認すると理解が早い。


シナリオエディタの「独立の項目」のバグ

画像上にてシナリオエディタには間違いがあり、 「独立」が2bit(値0-3) となっているが、これは3bit(値0-7)の間違いです。
シナリオエディタの画像上の「?」となっているものが、この「独立」の残り1ビットに相当しています。

Get_待機武将登場済人数()

待機武将のうち、すでに登場済みの武将の人数を得る。
この数値は、「次に登場する待機武将」を割り出すのに使える。

待機武将リストは、「シナリオデータからゲームないへと登場してゆく順番」で並んでいます。
例えば、全体で700人の待機武将リストがある場合、200人登場済みであれば、200という数値が返ってきます。

p待機武将戸籍情報[0]~p待機武将戸籍情報[199]で200人ですから p待機武将戸籍情報[200]は、まだ登場していない「ちょうど次に登場する」予定の人を指すこととなります。
(ただし、700人登場してしまっている場合、p待機武将戸籍情報[699]が700人目ですから、p待機武将戸籍情報[700]はアクセスできません。
気をつけましょう。)

「Get_待機武将***情報リスト() 」という3つの関数

登場済み(厳密には532枠内の)武将の情報を得るのに p武将情報 と p武将戸籍情報 の2種類に分かれていたのと同様に、
待機武将は、「待機武将情報 と 待機武将戸籍情報 と 待機武将登場情報」の3種類に分かれています。

Get_待機武将戸籍情報リスト() は p武将戸籍情報 と 同様のパラメータを取得出来る

p武将戸籍情報 と同様に、顔番号や姓名が含まれるのは、この待機武将戸籍情報となります。
最も使い勝手がよいのは、やはり顔番号でしょう。

void カスタム::On_プレイヤ担当ターン《メイン画面》() {

    int num = Get_待機武将データ数();

    auto p待機武将戸籍情報リスト = Get_待機武将戸籍情報リスト();

    if (p待機武将戸籍情報リスト) {
        for (int t = 0; t < num; t++) {
            デバッグ出力 << p待機武将戸籍情報リスト[t].顔番号 << endl;
            デバッグ出力 << p待機武将戸籍情報リスト[t]._名字 << p待機武将戸籍情報リスト[t]._名前 << endl;
        }
    }
}

Get_待機武将登場済人数() と Get_待機武将データ数() の使いどころ

登場済みの人数もわかっているため、「次に登場する武将の顔番号」を取得することも出来ます。

void カスタム::On_プレイヤ担当ターン《メイン画面》() {
	int 登場済の数 = Get_待機武将登場済人数();

	auto p待機武将戸籍情報リスト = Get_待機武将戸籍情報リスト();

	if (p待機武将戸籍情報リスト) {

		// まだ待機している人がいるのか?
		// 全員登場していると、「登場済みの数 == 待機武将データ数」となるため判定できる
		if (登場済の数 < Get_待機武将データ数()) {
			auto next武将 = p待機武将戸籍情報リスト[登場済の数];

			デバッグ出力 << "次に登場する予定の武将の姓名:" << next武将._名字 << next武将._名前 << endl;

			if (next武将.顔番号 == 顔番号::明智光秀) {
				デバッグ出力 << "次は明智光秀が登場するよ" << endl;
			}
		}
	}
}

Get_待機武将情報リスト() は p武将情報と同様のパラメータを取得出来る

Get_待機武将戸籍情報リスト()と使い方は同じであり、得られる型が、p武将情報の「武将情報型」と同じプロパティを持つ型なる。
これにより、「該当の待機武将」の詳しい能力を知ることが出来る。
但し、p武将情報 とは異なり、姓名や鉄砲等に対して Get_*** などのラッパー関数などは一切無いので注意すること。
(間違って p武将情報用のラッパー関数を、この待機武将情報に当てはめないこと);

void カスタム::On_プレイヤ担当ターン《メイン画面》() {

    int num = Get_待機武将データ数();

    auto p待機武将情報リスト = Get_待機武将情報リスト();

    if (p待機武将情報リスト) {
        for (int t = 0; t < num; t++) {
            デバッグ出力 << (int)p待機武将情報リスト[t].兵数 << endl;
        }
    }
}

Get_待機武将登場情報リスト() は 最速での登場予定年 や 帰属大名・登場城 の パラメータを取得出来る

Get_待機武将戸籍情報リスト()と使い方は同じであり、得られる型が、登場年・登場時に仕える大名・登場時に居場所となる城などの情報となる。
これにより、「最速で何年に登場するのか、どの大名か、どの城か」などを知ることが出来る。
これらも生データであるため、下の例のように天翔記基準年()を足し込むなど工夫が必要となるだろう。

最速の登場年
 void カスタム::On_プレイヤ担当ターン《メイン画面》() {
	int num = Get_待機武将データ数();

	auto p待機武将登場情報リスト = Get_待機武将登場情報リスト();
	auto p待機武将戸籍情報リスト = Get_待機武将戸籍情報リスト();

	デバッグ出力 << Get_天翔記基準年() << endl;

	int base = Get_天翔記基準年();
	if (p待機武将登場情報リスト) {
		for (int t = 0; t < 10; t++) {
			デバッグ出力 << p待機武将戸籍情報リスト[t]._名字 << p待機武将戸籍情報リスト[t]._名前 << endl;
			デバッグ出力 << (int)p待機武将登場情報リスト[t].登場年 + base << endl;
		}
	}

}
直近でこれから登場する10人の武将は、どの大名家に所属するのか
void カスタム::On_プレイヤ担当ターン《メイン画面》() {

	int max_num = Get_待機武将データ数();

	auto p待機武将登場情報リスト = Get_待機武将登場情報リスト();
	auto p待機武将戸籍情報リスト = Get_待機武将戸籍情報リスト();

	デバッグ出力 << Get_天翔記基準年() << endl;

	int base = Get_天翔記基準年();

	int 済数 = Get_待機武将登場済人数();

	if (p待機武将登場情報リスト) {
		// 未登場の最初の10人だけ
		for (int t = 済数; t < (済数+10); t++) {

			// 間違ってデータ数を超えた場所にアクセスしてはならない
			if (t >= max_num) {
				break;
			}

			デバッグ出力 << p待機武将戸籍情報リスト[t]._名字 << p待機武将戸籍情報リスト[t]._名前 << endl;
			デバッグ出力 << (int)p待機武将登場情報リスト[t].登場年 + base << endl;

			// どの大名家に登場しますか? その大名家の当主は現在だれですか?
			int iDaimyoID = p待機武将登場情報リスト[t].所属大名【大名番号】-1;
			if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) {

				// 大名家の大名武将の武将番号 → 武将番号【配列用】へ
				int iBushouID = p大名情報[iDaimyoID].大名【武将番号】-1;

				if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
					デバッグ出力 << "大名は..." << Get_名字(iBushouID) << Get_名前(iBushouID) << endl;
				}

			}

			デバッグ出力 << "--------------------------------" << endl;
		}
	}
}

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

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