待機武将
待機武将は、シナリオデータ(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」などを参照してください。