/
nobu_mod_the_snmod_understand_practice.html
119 lines (104 loc) · 6.39 KB
/
nobu_mod_the_snmod_understand_practice.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
%(hilight)s
<div class="content-box mb-3 content-lighten">
<h2><i class="fa fa-book fa-fw"></i>練習1</h2>
</div>
<div class="content-box mb-3 content-lighten">
<h3>概要</h3>
<p>この節では、とにかくScenarioModのソースを実際にいじくってみて、感覚をつかみます。</p>
</div>
<div class="content-box mb-3 content-lighten">
<h3>セリフの条件と内容を変更してみる</h3>
<p>前節のソースを見てください。<br>
</p>
<p>これを少し編集することで、まずは、感覚を掴みましょう。<br>
</p>
<div class="code"><pre class="brush:cpp;highlight:[3,4,5]">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
if (武将名 == "真田幸隆") {
return "マジかよ…最悪だぉ!!";
}
// 変更しない場合""
return "";
}
</pre></div>
<p>まず、常に「マジかよ…最悪だぉ」と言ってるのをなんとか直したいところです。<br>
</p>
<p>そうです、戦場で士気MAX時に「鼓舞」をした時のメッセージだけ、<br>
書き換えるようにしてみましょう!!</p>
<p>でも、戦場での鼓舞とは、元々どんなメッセージだったでしょうか?</p>
<p>Message.n6pをLS11Archieveで解凍するのが正確なメッセージを知る方法ですが、<br>
今回は練習ですので簡略的に <a href="http://www19.atwiki.jp/nobu6/pages/268.html">天翔記 Wikiに掲載されているセリフ</a> を参照してみましょう。</p>
<p>どうやら士気MAX時にいうセリフは</p>
<blockquote>「わが隊はすでに(改行)士気旺盛…鼓舞する(改行)必要…(以下メッセージが分かれる)」</blockquote>
<p>といったことになっているようです。</p>
<p>天翔記内には他に似たようなメッセージもないようですから、</p>
<p>「 <b>わが隊はすでに(改行)士気旺盛</b> 」</p>
<p>ぐらいまで含まれれば、ちゃんと <b>士気MAX時のメッセージに絞る</b>ことが出来そうです。</p>
<p>では、そうしてみましょう。</p>
<div class="code"><pre class="brush:cpp;">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
if (武将名 == "真田幸隆") {
if (Is_文字列マッチ(元メッセージ, "わが隊はすでに\x0A士気旺盛")) {
return "士気旺盛じゃ!?";
}
}
// 変更しない場合""
return "";
}
</pre></div>
<p>プログラム未経験者の方は、いきなりのことで「げげ!!」と思われる方もいるかもしれません。</p>
<p>しかし、 <b>「メッセージ中に『ほげほげ』な文字が含まれる」というのは、このように書くものだ</b> と覚えてしまうのも手でしょう。</p>
<p>『 <font face="MS ゴシック">\x0A</font> 』は(エン エックス ゼロ エー)となります。(オー エー)ではないので注意して下さい。</p>
</div>
<div class="content-box mb-3 content-lighten">
<h3>動作の確認</h3>
<p>さて、</p>
<ul>
<li>再び「<b>Release</b>」でビルドして、
<li>エラーが出ていないことを確認して
<li>ScenarioMod.dllを天翔記ディレクトリにコピーしましょう。
<li>天翔記を起動させたままだとコピー出来ないので注意しましょう。
</ul>
<p>このあたりは、「ビルド」の項目を見返して下さい。</p>
<p>セーブデータエディタなどで、真田幸隆の兵士を100、兵士の忠誠度(=士気)を98など、動作を確認しやすい状況にして、確認してみましょう。</p>
<p><img src="./cnt_mod/mod_snmod/cnt_mod_scenario_mod_14.png"></p>
</div>
<div class="content-box mb-3 content-lighten">
<h3>天気による条件分岐を加えてみる</h3>
<p>最後にこのメッセージ変更が「天気」によって内容を分岐するようにしてみましょう。</p>
<div class="code"><pre class="brush:cpp;">
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 "";
}
</pre></div>
<p>行は増えましたが、難しいものではありません。</p>
<p>「Get_天気()」で「現在の天候(番号)」を得て、これを「天候::○○(日本語ですが、その中身は実は番号)」と比較することで、if文で振り分けているのです。</p>
<p>このあたりはまだ説明されていませんので、「へ~、そういう風に書けるんだー」程度の認識で良いでしょう。</p>
</div>
<div class="content-box mb-3 content-lighten">
<h3>動作の確認</h3>
<p>さて、</p>
<ul>
<li>再び「<b>Release</b>」でビルドして、
<li>エラーが出ていないことを確認して
<li>ScenarioMod.dllを天翔記ディレクトリにコピーしましょう。
<li>天翔記を起動させたままだとコピー出来ないので注意しましょう。
</ul>
<p>ちゃんと「真田幸隆」が士気MAX時に「鼓舞」すると、「天候」によって発言内容が変化しましたか?</p>
<p>変化したことを確認出来れば、この練習項目は終了です。 <br>
お疲れ様でした。</p>
</div>