最終更新日 2024-09-25

ScenarioModVer2 更新履歴 v2.3.0.0~v2.4.0.0

v2.3.7.5 追記

v2.3.7.4 ⇒ v2.3.7.5

v2.3.7.4 追記

戦場において、武将が「混乱」や「大混乱」しているかどうか判定する関数が追加された。

v2.3.7.3 ⇒ v2.3.7.4

会話用吹き出しメッセージを更新するための「構文糖」関数が追加された。

v2.3.7.0 ⇒ v2.3.7.3

任意のタイミングで、新たな会話用吹き出しメッセージを出す関数が追加された。

v2.3.7.0 追加項目

v2.3.4.6 ⇒ v2.3.7.0

ScenarioModのイベントハンドラ名や引数が数点変化しました。

シナリオタイトル名や、シナリオ説明文の変更方法が、全然異なるものへと変わりました。

v2.3.4.4 ⇒ v2.3.4.6

画像ダイアログ表示の関数が追加された。

v2.3.4.3 ⇒ v2.3.4.4

v2.3.4.1 ⇒ v2.3.4.3

選択式ダイアログ関数が2点追加された。

v2.3.4.0 ⇒ v2.3.4.1

「家宝種類名」の名前を柔軟に変えられるイベントハンドラが追加された。

v2.3.3.9 ⇒ v2.3.4.0

姫を誰かと結婚(再婚・略奪婚)させたり、離婚させることが出来るようになった。
但し、同盟関係等は一切操作されない。

v2.3.3.8 ⇒ v2.3.3.9

特定の大名が、どのような軍団割当番号を支配しているのかのリストを得る関数が追加された。

v2.3.3.7 ⇒ v2.3.3.8

武将Aと武将Bの2人の関係を判定可能な、関数が多数追加された。

v2.3.3.6 ⇒ v2.3.3.7

v2.3.3.5 ⇒ v2.3.3.6

v2.3.3.4 ⇒ v2.3.3.5

会見意向に関する、値の取得、設定の関数が2点追加された。

v2.3.3.2 ⇒ v2.3.3.4

v2.3.3.0 ⇒ v2.3.3.2

通常武将→浪人へとする関数、また、浪人→通常武将へとする関数、の2つが追加された。

武将状態の変更は、様々な波及的計算や値の更新が必要であるため、単純に「p武将戸籍情報[x].状態」の値を変更してもダメである。
これらの関数を通すことで、状態の変更が可能となる。
状態の変更に失敗した場合は、原則、何も行われず、関数の返り値として、falseが返ってくる。

v2.3.2.8 ⇒ v2.3.3.0

2D位置型、2Dベクトル型、3D位置型、3Dベクトル型、といったクラスが加えられた。
これらはScenarioModというよりも、汎用的な、2次元、3次元用プログラムに利用されるものであるため、ここでは、利用方法は、解説しない。
その使い方も他の一般的利用法に習う。(但し、メソッド名やフィールド名などは日本語となっている。)

v2.3.2.8 ⇒ v2.3.3.0

v2.3.1.2 ⇒ v2.3.2.8

v2.3.1.0 ⇒ v2.3.1.2

v2.3.0.6 ⇒ v2.3.1.0

戦場の情報に関する、多数の関数が加えられた。
説明するよりもサンプルの方がわかりやすいであろう。
下記プログラムを動かしつつ、1つ1つの関数や簡易クラスの使い方を習得してください。
非常に直感的で簡単に使えるように配慮しています。

string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {

    int iBushouID = メッセージ関連情報.第1人称【武将番号】-1;

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

        if ( Is_野戦中() ) {
            // 自分の位置を得てみる。位置が定まってない時や、いない時は、65535(0xFFFF)以上となる。(65535.5などにもなるので、65535で比較したりしないこと)
            ヘックス位置型 p = Get_武将の野戦ヘックス位置(iBushouID);
            デバッグ出力 << "(" << p.X << "," << p.Y << ")" <<  endl;

            // 武将が居るところのHEXの役割をとってみる。
            int eYaku = Get_野戦ヘックス役割(p);

            if ( eYaku == 野戦ヘックス役割::海 || eYaku == 野戦ヘックス役割::湖 ) {
                デバッグ出力 << Get_名前(iBushouID)  << "は今、海か湖に居ます" << endl;
                デバッグ出力("%x", eYaku);

            } else if ( eYaku == 野戦ヘックス役割::高山 ) {
                デバッグ出力 << Get_名前(iBushouID)  << "は今、山のてっぺんに居ます" << endl;
            }
            /*
            enum { 枠外=0x00, 平地=0x1, 道=0x2, 湿地=0x3, 荒れ地=0x4, 森=0x5, 低山=0x6, 中山=0x7, 高山=0x8, 川=0x9, 橋=0xA, 海=0xB, 湖=0xB, 城=0xC };
            */
            デバッグ出力 << endl << endl;
            // あまり使わないだろうが、直接指定も可能
            int 役割 = Get_野戦ヘックス役割(野戦ヘックス::中心X -1.5, 野戦ヘックス::中心Y + 1.0); // 座標の感覚は歩いてたらすぐわかります。
            デバッグ出力("自分の位置とは無関係に、直接、値で指定された座標(%f,%f)",(double)野戦ヘックス::中心X-1.5, (double)野戦ヘックス::中心Y+1.0);
            デバッグ出力("その役割は「%x」 enumと比べてね♪", 役割);
        }

        if ( Is_攻城戦中() ) {
            //
            デバッグ出力 << "戦場全体で出陣しているのは…" << endl;
            番号リスト型 nowlist = Get_出陣中の武将番号リスト【配列用】();
            for each ( int iBushouID in  nowlist ) {
                デバッグ出力 << iBushouID << ":" << Get_名字(iBushouID) << " " << Get_名前(iBushouID) << endl;
            }
            デバッグ出力 << "がいます…" << endl;
            デバッグ出力 << endl;
            デバッグ出力 << endl;

            デバッグ出力 << "今表示中のマップに出陣しているのは…" << endl;
            番号リスト型 nowlist2 = Get_出陣中の武将番号リスト【配列用】《表示中マップ》();
            for each ( int iBushouID in  nowlist2 ) {
                デバッグ出力 << iBushouID << ":" << Get_名字(iBushouID) << " " << Get_名前(iBushouID) << endl;
            }
            デバッグ出力 << "がいます…" << endl;
            デバッグ出力 << endl;
            デバッグ出力 << endl;


            // 自分の座標の役割を取得してみる
            ヘックス位置型 p = Get_武将の攻城戦ヘックス位置(iBushouID);
            int eYaku = Get_攻城戦ヘックス役割(p);
            if ( eYaku == 攻城戦ヘックス役割::櫓 ) {
                デバッグ出力 << Get_名前(iBushouID) << "は櫓にいます!!" << endl;
            } else {
                デバッグ出力 << Get_名前(iBushouID) << "は櫓にはいません。" << endl;
            }


            // 今表示中のマップに2人以上いるならば、「マス距離」を計算してみる。
            if ( nowlist2.size() >= 2 ) {
                // 自分以外を探す。
                int iTargetID = -1;
                // リストのなかで…
                for each( int iTmpID in nowlist2 ) {
                    // 自分ではない人が居たらそいつがターゲット
                    if (iTmpID != iBushouID ) {
                        iTargetID = iTmpID;
                        break;
                    }
                }

                ヘックス位置型 p1 = Get_武将の攻城戦ヘックス位置(iBushouID); // 自分の位置
                ヘックス位置型 p2 = Get_武将の攻城戦ヘックス位置(iTargetID); // 相手の位置

                ヘックスベクトル型 v;
                v = p1-p2;
                デバッグ出力 << "              ──→ " << endl;
                デバッグ出力 << "p2→p1 への方向ベクトルは (" << v.X << "," << v.Y << ") です。" << endl;

                //
                デバッグ出力 << "メス目換算でいうと… " << Get_ヘックス間隔(p1, p2) << " マスです。" << endl;

            }
        }

    }

    return "";
}

v2.3.0.2 ⇒ v2.3.0.6

戦場において、次ターン以降の天気を予約する関数が追加された。

v2.3.0.2 ⇒ v2.3.0.6

v2.2.2.9 ⇒ v2.3.0.2

弓適性を設定する関数が追加された。