武将の所属に関するAPIの説明となります。
天翔記にはそれぞれの武将に「血筋」が設定されている。
それぞれの血筋は「天翔記wikiの血筋のページ を参照するのが良いだろう。
天翔記的には、血筋が同じであれば、「一門」扱いとなる。
p武将情報[ix].所属血筋
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int i信長のBushouID = Get_武将番号【配列用】(顔番号::織田信長); if (0 <= i信長のBushouID && i信長のBushouID < 最大数::武将情報::配列数) { int 信長の所属血筋 = p武将情報[i信長のBushouID].所属血筋; for (int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { // 死んでない if (p武将戸籍情報[iBushouID].状態 != 状態::死亡 && p武将戸籍情報[iBushouID].戦死 == false) { if (p武将情報[iBushouID].所属血筋 == 信長の所属血筋) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は" << "信長と同じ血筋です。" << endl; } } } } }
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int i信長のBushouID = Get_武将番号【配列用】(顔番号::織田信長); int i勝家のBushouID = Get_武将番号【配列用】(顔番号::柴田勝家); if (0 <= i信長のBushouID && i信長のBushouID < 最大数::武将情報::配列数 && 0 <= i勝家のBushouID && i勝家のBushouID < 最大数::武将情報::配列数 ) { // 柴田勝家の血筋を織田信長の血筋へと変更 p武将情報[i勝家のBushouID].所属血筋 = p武将情報[i信長のBushouID].所属血筋; } }
P武将情報[ix].親顔番号
親顔番号が設定してあれば、それは父親ということになる。
親顔番号が設定してあっても、血筋番号が親とは異なるといった場合もあり、これは養子ということを意味する。
親の顔番号が、別の武将の顔番号と一致する武将が存在すれば、親は天翔記の武将データとして存在することを意味している。
一致するような武将が居なければ天翔記には存在していないことになるが、例え存在していなくとも、
同じ親顔番号が同じなのであれば、(たとえその親顔番号の武将が天翔記に存在せずとも)、2人は兄弟姉妹である。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { for (int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { int 親顔番号 = p武将情報[iBushouID].親顔番号; if (p武将情報[iBushouID].親顔番号 == 0xFFFF) { デバッグ出力 << "親顔番号は設定されていません" << endl; continue; } デバッグ出力 << "今現在伊、ゲーム内に存在している範囲で、" + Get_名字(iBushouID) + Get_名前(iBushouID) << "の兄弟を探します" << endl; for (int iSearchBushouID = 0; iSearchBushouID < 最大数::武将情報::配列数; iSearchBushouID++) { if (iBushouID == iSearchBushouID) { continue; } // 自分はパス if (p武将情報[iSearchBushouID].親顔番号 == 0xFFFF) { continue; } // 0xFFFF 以外の値が設定されていて、2人の武将が同じ親顔番号であれば、それは兄弟である(但し養子などもあり得るため、血縁はないかもしいれない) if (p武将情報[iBushouID].親顔番号 == p武将情報[iSearchBushouID].親顔番号) { デバッグ出力 << Get_名字(iSearchBushouID) + Get_名前(iSearchBushouID) << "と親が同じです。"; if (p武将情報[iBushouID].所属血筋 != p武将情報[iSearchBushouID].所属血筋) { デバッグ出力 << "但し血筋番号がことなるため、義理の兄弟姉妹という扱いです。"; } デバッグ出力 << endl; } } デバッグ出力 << "----------------------------------以上" << endl; } }
天翔記の1300人の武将のいずれかを親とするなら、0~1299の範囲の「顔番号::***」を探し、その番号をあてて下さい。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::羽柴秀吉); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { // 羽柴秀吉の父として織田信長とする。これは親としての番号の入れ替えだけなので、養子状態。 p武将情報[iBushouID].親顔番号 = 顔番号::織田信長; } }
「あたらしい架空の親番号」を設定する際には7000~7999の間の番号を推奨します。
これらは顔画像なども共有物として提供されることはなく、またモンタージュの顔番号とも決して被ることはない。
ここでは理解を簡単にするため、歴史上の人物に対して設定しているが、
実際にはScenarioModで作成した架空武将等に対して、架空の親顔番号を割り当てることが多いいだろう。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int i佐々BushouID = Get_武将番号【配列用】(顔番号::佐々成政); int i明智BushouID = Get_武将番号【配列用】(顔番号::明智光秀); if (0 <= i佐々BushouID && i佐々BushouID < 最大数::武将情報::配列数) { if (0 <= i明智BushouID && i明智BushouID < 最大数::武将情報::配列数) { // 架空の親顔番号 を共有することで、血は繋がっていないが2人だけ義兄弟のようになる // 顔番号::7000 という架空の武将が二人の共通の親として存在したというい想定 p武将情報[i佐々BushouID].親顔番号 = 7000; p武将情報[i明智BushouID].親顔番号 = 7000; } } }
p武将情報[ix].所属大名【大名番号】
この項目はとても重要ですので理解が必須です。
ScenarioModが自由に使いこなせるか否かの境界線は、概ねこのあたりを理解しているかどうかがカギです。
p武将情報[ix].所属大名【大名番号】-1
とすることで、
大名 にアクセスするための【配列用】の番号を得ることが出来ます。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::柴田勝家); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { // 武将が所属する大名家の番号【配列用】を求める int iDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1; // 大名番号 ⇒ 大名番号【配列用】 if (0 <= iDaimyoID && iDaimyoID < 最大数::大名情報::配列数) { int i大名のBushouID = p大名情報[iDaimyoID].大名【武将番号】 - 1; // こんどは大名家を支配する武将の武将番号【配列用】を得ている if (0 <= i大名のBushouID && i大名のBushouID < 最大数::武将情報::配列数) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は、" << Get_名字(i大名のBushouID) + Get_名前(i大名のBushouID) << "の支配する大名家に帰属しています。" << endl; } } } }
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int i信長のBushouID = Get_武将番号【配列用】(顔番号::織田信長); if (0 <= i信長のBushouID && i信長のBushouID < 最大数::武将情報::配列数) { // 信長が大名なら if (p武将戸籍情報[i信長のBushouID].状態 == 状態::大名) { int i織田信長の帰属する大名番号 = p武将情報[i信長のBushouID].所属大名【大名番号】; for (int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { if (p武将情報[iBushouID].所属大名【大名番号】 == i織田信長の帰属する大名番号) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は、信長の支配する大名家に帰属しています" << endl; } } } } }
データの辻褄があわなくなり、崩壊します。
Set_武将転居(...) などを利用してください。
p武将情報[ix].所属軍団【軍団番号】
この項目はとても重要ですので理解が必須です。
ScenarioModが自由に使いこなせるか否かの境界線は、概ねこのあたりを理解しているかどうかがカギです。
p武将情報[ix].所属軍団【軍団番号】-1
とすることで、
軍団 にアクセスするための【配列用】の番号を得ることが出来ます。
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int iBushouID = Get_武将番号【配列用】(顔番号::柴田勝家); if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) { // 武将が所属する軍団家の番号【配列用】を求める int iGundanID = p武将情報[iBushouID].所属軍団【軍団番号】 - 1; // 軍団番号 ⇒ 軍団番号【配列用】 if (0 <= iGundanID && iGundanID < 最大数::軍団情報::配列数) { int i軍団長のBushouID = p軍団情報[iGundanID].軍団長【武将番号】 - 1; // こんどは軍団を支配する軍団長の武将としての武将番号【配列用】を得ている if (0 <= i軍団長のBushouID && i軍団長のBushouID < 最大数::武将情報::配列数) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は、" << Get_名字(i軍団長のBushouID) + Get_名前(i軍団長のBushouID) << "の支配する軍団に帰属しています。" << endl; } } } }
void カスタム::On_プレイヤ担当ターン《メイン画面》() { int i光秀のBushouID = Get_武将番号【配列用】(顔番号::明智光秀); if (0 <= i光秀のBushouID && i光秀のBushouID < 最大数::武将情報::配列数) { // 信長が軍団なら if (p武将戸籍情報[i光秀のBushouID].状態 == 状態::軍団長) { int i明智光秀の帰属する軍団番号 = p武将情報[i光秀のBushouID].所属軍団【軍団番号】; for (int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { if (p武将情報[iBushouID].所属軍団【軍団番号】 == i明智光秀の帰属する軍団番号) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は、光秀の支配する軍団に帰属しています" << endl; } } } } }
データの辻褄があわなくなり、崩壊します。
Set_武将転居(...) などを利用してください。
p武将情報[ix].所属居城【城番号】
この項目はとても重要ですので理解が必須です。
ScenarioModが自由に使いこなせるか否かの境界線は、概ねこのあたりを理解しているかどうかがカギです。
p武将情報[ix].所属居城【城番号】-1
とすることで、
城 にアクセスするための【配列用】の番号を得ることが出来ます。
for ( int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { // 死んでない if (p武将戸籍情報[iBushouID].状態 != 状態::死亡 && p武将戸籍情報[iBushouID].戦死 == false) { int iCastleID = p武将情報[iBushouID].所属居城【城番号】 - 1; if (0 <= iCastleID && iCastleID < 最大数::城情報::配列数) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は" << Get_城名(iCastleID) + Get_城称(iCastleID) << "に居ます" << endl; } } }
void カスタム::On_プレイヤ担当ターン《メイン画面》() { for ( int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) { // 死んでない if (p武将戸籍情報[iBushouID].状態 != 状態::死亡 && p武将戸籍情報[iBushouID].戦死 == false) { int iCastleID = p武将情報[iBushouID].所属居城【城番号】 - 1; if (iCastleID == 城配列番号::二条城) { デバッグ出力 << Get_名字(iBushouID) + Get_名前(iBushouID) << "は" << Get_城名(iCastleID) + Get_城称(iCastleID) << "に居ます" << endl; } } } }
データの辻褄があわなくなり、崩壊します。
Set_武将転居(...) などを利用してください。
「武将 - 所属」に関する主な所は以上となります。
詳しくは「武将情報型.h」や「武将情報列挙.h」を参照してください。