最終更新日 2024-09-25

練習1

概要

この節では、とにかくScenarioModのソースを実際にいじくってみて、感覚をつかみます。

セリフの条件と内容を変更してみる

前節のソースを見てください。

これを少し編集することで、まずは、感覚を掴みましょう。

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

    if (武将名 == "真田幸隆") {
        return "マジかよ…最悪だぉ!!";
    }

    // 変更しない場合""
    return "";
}

まず、常に「マジかよ…最悪だぉ」と言ってるのをなんとか直したいところです。

そうです、戦場で士気MAX時に「鼓舞」をした時のメッセージだけ、
書き換えるようにしてみましょう!!

でも、戦場での鼓舞とは、元々どんなメッセージだったでしょうか?

Message.n6pをLS11Archieveで解凍するのが正確なメッセージを知る方法ですが、
今回は練習ですので簡略的に 天翔記 Wikiに掲載されているセリフ を参照してみましょう。

どうやら士気MAX時にいうセリフは

「わが隊はすでに(改行)士気旺盛…鼓舞する(改行)必要…(以下メッセージが分かれる)」

といったことになっているようです。

天翔記内には他に似たようなメッセージもないようですから、

わが隊はすでに(改行)士気旺盛

ぐらいまで含まれれば、ちゃんと 士気MAX時のメッセージに絞ることが出来そうです。

では、そうしてみましょう。

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

  if (武将名 == "真田幸隆") {

    if (Is_文字列マッチ(元メッセージ, "わが隊はすでに\x0A士気旺盛")) {
      return "士気旺盛じゃ!?";
    }
  }

  // 変更しない場合""
  return "";
}

    

プログラム未経験者の方は、いきなりのことで「げげ!!」と思われる方もいるかもしれません。

しかし、 「メッセージ中に『ほげほげ』な文字が含まれる」というのは、このように書くものだ と覚えてしまうのも手でしょう。

\x0A 』は(エン エックス ゼロ エー)となります。(オー エー)ではないので注意して下さい。

動作の確認

さて、

このあたりは、「ビルド」の項目を見返して下さい。

セーブデータエディタなどで、真田幸隆の兵士を100、兵士の忠誠度(=士気)を98など、動作を確認しやすい状況にして、確認してみましょう。

天気による条件分岐を加えてみる

最後にこのメッセージ変更が「天気」によって内容を分岐するようにしてみましょう。

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

  if (武将名 == "真田幸隆") {

     if (Is_文字列マッチ(元メッセージ, "わが隊はすでに\x0A士気旺盛")) {
        if ( Get_天気() == 天気::晴れ ) {
            return "今日は晴天じゃ\x0A兵どもも士気旺盛じゃ";

        } else if ( Get_天気() == 天気::曇り ) {
            return "今日は曇りじゃ\x0A涼しくて士気旺盛じゃ";

        } else if ( Get_天気() == 天気::雨 ) {
            return "今日は雨じゃ\x0A潤って士気旺盛じゃ";

        } else if ( Get_天気() == 天気::雪 ) {
            return "今日は雪じゃ\x0Aカッチコチじゃ";

        }
     }
  }

  // 変更しない場合""
  return "";
}

行は増えましたが、難しいものではありません。

「Get_天気()」で「現在の天候(番号)」を得て、これを「天候::○○(日本語ですが、その中身は実は番号)」と比較することで、if文で振り分けているのです。

このあたりはまだ説明されていませんので、「へ~、そういう風に書けるんだー」程度の認識で良いでしょう。

動作の確認

さて、

ちゃんと「真田幸隆」が士気MAX時に「鼓舞」すると、「天候」によって発言内容が変化しましたか?

変化したことを確認出来れば、この練習項目は終了です。
お疲れ様でした。