| ■戦国史コラム:イベント技術集 記事一覧■ |
|
・[戦国史]目標は必携シナリオ作成!条件イベントチートシート 2011年09月21日
・サブルーチン・ループ実装に関して 2007年12月30日 ・質問文YES/NOの分岐 2007年08月04日 ・ゲームスイッチ(ツクール系)を再現 2007年08月02日 ・捕虜・人質移動のバグとその回避方法 2007年07月22日 |
2011年09月21日
こんばんは、蛛賢です。
先日、戦国史がバージョンアップされて、更に条件イベントが充実してきております。
シナリオ作者さん歓喜な内容だったわけですが、
充実すればするほど、関数、発生条件、発生イベントの数が増えるわけですから、
「この機能を実装するためには、この関数とこの発生イベントを組み合わせれば良い!」
…なーんてことを、何も見ずに瞬時にイメージするのは、そんなに容易ではないと思います。
そこで、今回とても便利な(であって欲しい)戦国史の条件イベント関連チートシートを作りました。

チートシートというのは、本来はカンニングペーパーの意味です。
巷では、ソフトウェアのショートカットキー一覧や、プログラミング言語の便利な関数、など
覚えておくと便利なものたちを、(印刷も考慮して)PDF数枚にまとめ上げてしまったものを指しているようです。
私が作成しましたチートシートは全3ページ。
■関数
■発生条件
■発生イベント
となっております。
対応する戦国史のバージョンは Ver.1.16c です。
少しでも戦国史シナリオ作者同志の皆さんの助力に繋がればと思います。
ちなみに、LibreOffice Draw で作成しました。参考になれば。
[DownLoad] 戦国史条件イベント チートシート Ver.1.16c.1
レッツ戦国史!

先日、戦国史がバージョンアップされて、更に条件イベントが充実してきております。
シナリオ作者さん歓喜な内容だったわけですが、
充実すればするほど、関数、発生条件、発生イベントの数が増えるわけですから、
「この機能を実装するためには、この関数とこの発生イベントを組み合わせれば良い!」

…なーんてことを、何も見ずに瞬時にイメージするのは、そんなに容易ではないと思います。
そこで、今回とても便利な(であって欲しい)戦国史の条件イベント関連チートシートを作りました。


チートシートというのは、本来はカンニングペーパーの意味です。
巷では、ソフトウェアのショートカットキー一覧や、プログラミング言語の便利な関数、など
覚えておくと便利なものたちを、(印刷も考慮して)PDF数枚にまとめ上げてしまったものを指しているようです。
私が作成しましたチートシートは全3ページ。
■関数
■発生条件
■発生イベント
となっております。
対応する戦国史のバージョンは Ver.1.16c です。
少しでも戦国史シナリオ作者同志の皆さんの助力に繋がればと思います。
ちなみに、LibreOffice Draw で作成しました。参考になれば。

[DownLoad] 戦国史条件イベント チートシート Ver.1.16c.1
レッツ戦国史!
2007年12月30日
こんばんは、蛛賢です。
いやはや、更新されましたね、戦国史。
このサブルーチン・ループ実装に関しては、本当に浅香さんに感謝するばかりです。
(実は、きっての願いを叶えて頂いた形でもあります^^;)
何と言うか、非ループでイベントを作成するのは中々な障害であったわけで、
(同じようなイベントでも各大名家・城等ごとに用意する必要があった)
この実装があれば劇的にイベント記述が進化し、シナリオ表現力は飛躍する
…と確信していたということもあります。
例を挙げ、各城を各大名家の家紋に変化させるイベントを考えて見ましょう。
◇従来
・各城ごとにどの大名家領有なのかを調べなければならなかった。
・従って必要なイベント数は、単純に(城数)×(大名家数)という感じ。
総条件イベント数上限は1000ですから、100城、10大名家くらいで一杯でしょうか。
もちろん他のイベントを設定することは出来ません。
◇今回
・城、大名家共にサブルーチン処理で出来ますが、城画像だけ変数指定できません。
・従って必要なイベント数は、1※+(大名家数÷50)+(城画像数)
(※城番号取得ループ)
…ですかね。要は城領有大名家と城画像を一致させることですからね。
÷50は条件イベントの発生イベント上限が50だからです。
サブルーチンを呼び出す命令最大50回。要はサブルーチンのサブルーチンという感じ。
仮に大名家が50家だとすると、城数に関係なく、52個でイベント完成です。
大名家100家でも、城数関係なく、103個です。
(但し城画像上限は50なので51家以上は工夫(※)が必要)
※何故なら1城に2城を重ね、1つを拠点用(石高等も設定されている)、
1つを表示用(全てゼロでも構わない、大名も特に無所属)とする。
重ねられた拠点はIDが若いほど下に隠れ表示されないのを利用する。
そして、表示用は大名関係ないので外交色の6色を利用できるため増える。
従って、拠点用の透明の城画像ID1つ、残り49×6色を表示用に利用できる。
(但し、移動時には灰色設定の画像が表示されるので「×」等の画像にする)
…といった感じでしょうか?サンプルを作ってみても良いですね。
とにかく便利になったのです。分かりやすくなったのですよ。
上記で分からない部分があったら、お気兼ねなくお尋ね下さい。
自分でも良く分かってないかも知れませんが、出来る限りお答えします^^;
いやはや、更新されましたね、戦国史。
このサブルーチン・ループ実装に関しては、本当に浅香さんに感謝するばかりです。
(実は、きっての願いを叶えて頂いた形でもあります^^;)
何と言うか、非ループでイベントを作成するのは中々な障害であったわけで、
(同じようなイベントでも各大名家・城等ごとに用意する必要があった)
この実装があれば劇的にイベント記述が進化し、シナリオ表現力は飛躍する
…と確信していたということもあります。
例を挙げ、各城を各大名家の家紋に変化させるイベントを考えて見ましょう。
◇従来
・各城ごとにどの大名家領有なのかを調べなければならなかった。
・従って必要なイベント数は、単純に(城数)×(大名家数)という感じ。
総条件イベント数上限は1000ですから、100城、10大名家くらいで一杯でしょうか。
もちろん他のイベントを設定することは出来ません。
◇今回
・城、大名家共にサブルーチン処理で出来ますが、城画像だけ変数指定できません。
・従って必要なイベント数は、1※+(大名家数÷50)+(城画像数)
(※城番号取得ループ)
…ですかね。要は城領有大名家と城画像を一致させることですからね。
÷50は条件イベントの発生イベント上限が50だからです。
サブルーチンを呼び出す命令最大50回。要はサブルーチンのサブルーチンという感じ。
仮に大名家が50家だとすると、城数に関係なく、52個でイベント完成です。
大名家100家でも、城数関係なく、103個です。
(但し城画像上限は50なので51家以上は工夫(※)が必要)
※何故なら1城に2城を重ね、1つを拠点用(石高等も設定されている)、
1つを表示用(全てゼロでも構わない、大名も特に無所属)とする。
重ねられた拠点はIDが若いほど下に隠れ表示されないのを利用する。
そして、表示用は大名関係ないので外交色の6色を利用できるため増える。
従って、拠点用の透明の城画像ID1つ、残り49×6色を表示用に利用できる。
(但し、移動時には灰色設定の画像が表示されるので「×」等の画像にする)
…といった感じでしょうか?サンプルを作ってみても良いですね。
とにかく便利になったのです。分かりやすくなったのですよ。
上記で分からない部分があったら、お気兼ねなくお尋ね下さい。
2007年08月04日
質問文の分岐は皆さんご存知だと思いますが、
実際のところYESの時と、NOの時では違う文章を表示。
といったイベントを作成したいという方も居られると思います。
それで今回変数(例:BUNKI)を用いて実装してみましょう。
条件は以下のようにします。)
ミソは分岐をする前にNOが押された場合の変数を設定することです。(逆もアリです)
ただ、分岐をする前に設定するので、
このイベントに来るたびにNOが押された場合の変数になってしまいます。
ですので、それを避けたい場合はNOの変数設定の前に、
また別の条件(上記の例だと 変数BUNKI = 0)を設定して回避しましょう。
戦国史においてユーザ側で操作できる数少ない命令ですので、有効的に利用しましょう。
実際のところYESの時と、NOの時では違う文章を表示。
といったイベントを作成したいという方も居られると思います。
それで今回変数(例:BUNKI)を用いて実装してみましょう。
条件は以下のようにします。)
◆YES/NO表示用・YES押された用イベント以上です。
◇条件
(変数(BUNKI) = 0 ←何度も繰り返す場合はこれで制限しましょう)
変数(BUNKI)に演算式(-1)を代入
質問文(データB)を表示し、YESが選択された
◇発生イベント
(発生時表示メッセージにはYESが押された時のメッセージ)
変数(BUNKI)に演算式(1)を代入
◆NO押された用イベント
◇条件
変数(BUNKI) = -1
◇発生イベント
(発生時表示メッセージにはYESが押された時のメッセージ)
◆上記の分岐を条件にしたイベント
◇条件
変数(BUNKI) = …
◇発生イベント
(これらイベントが連続発生の場合は変数BUNKIを0にするといったことが必要)
ミソは分岐をする前にNOが押された場合の変数を設定することです。(逆もアリです)
ただ、分岐をする前に設定するので、
このイベントに来るたびにNOが押された場合の変数になってしまいます。
ですので、それを避けたい場合はNOの変数設定の前に、
また別の条件(上記の例だと 変数BUNKI = 0)を設定して回避しましょう。
戦国史においてユーザ側で操作できる数少ない命令ですので、有効的に利用しましょう。
2007年08月02日
ツクール系のゲームスイッチって感覚的にオン・オフ分かるので良いですよね。
それを戦国史にも再現してみましょう。
用意するのは変数1個だけです。(例では変数SWITCHを用います)
ここでオフの状態が0じゃないのは切替が楽だからです。
切り替えるためには変数SWITCHに-1を掛けます。
繰り返しイベントで用いる場合などに用いると良いと思います。
そして後は条件にオンの時(変数SWITCH=1)、オフの時(変数SWITCH=-1)と、
(不等号や、足し合わせるのもアリ)することで分岐に用いられるわけです。
ちなみにこの切替スイッチを使えなくするためには、
これで-1を掛けても0のまま。条件もオン・オフに等号の場合は引っ掛かりません。
(注:条件によっては引っ掛かります(変数SWITCH < 1 など))
(追記 2007 8/3)
これを用いることで複雑な条件も1行で表せる。
それを戦国史にも再現してみましょう。
用意するのは変数1個だけです。(例では変数SWITCHを用います)
◇オンの状態とします。
変数SWITCHの中身 = 1
◇オフの状態
変数SWITCHの中身 = -1
ここでオフの状態が0じゃないのは切替が楽だからです。
切り替えるためには変数SWITCHに-1を掛けます。
変数(SWITCH)に演算式(SWITCH*(-1))を代入これでオンの状態のときはオフに、オフの時はオンになります。
繰り返しイベントで用いる場合などに用いると良いと思います。
そして後は条件にオンの時(変数SWITCH=1)、オフの時(変数SWITCH=-1)と、
(不等号や、足し合わせるのもアリ)することで分岐に用いられるわけです。
ちなみにこの切替スイッチを使えなくするためには、
変数(SWITCH)に演算式(0)を代入でOKです。
これで-1を掛けても0のまま。条件もオン・オフに等号の場合は引っ掛かりません。
(注:条件によっては引っ掛かります(変数SWITCH < 1 など))
(追記 2007 8/3)
これを用いることで複雑な条件も1行で表せる。
◇1オン、2オン、3オンの時
条件 SWITCH1 + SWITCH2 + SWITCH3 = 3
◇1と2のオン・オフが逆の時
条件 SWITCH1 + SWITCH2 = 0
又は SWITCH1 = SWITCH2*(-1)
◇1オン、2オフ、3オフ、4オンの時
○ SWITCH1 + (SWITCH2*(-1)) + (SWITCH3*(-1)) + SWITCH4 = 4
× SWITCH1 + SWITCH2 + SWITCH3 + SWITCH4 = 0
⇒1オフ、2オン、3オフ、4オンといった場合でも通るので。
2007年07月22日
ある武将を強制的に当主にさせたり、
特定の城に強制移動させたりするイベントがあります。
例として征西府での阿蘇家の強制当主替えイベントがあります
私もこれで良いと思っていました。
しかし、ここで戦国史本体のバグが発見されました。
阿蘇惟村が他家の捕虜や人質だった場合に、そのターン終了時に
なんと戦国史が強制終了してしまうのです。
他家に捕虜や人質で存在している時はあくまで所属は阿蘇家になっています。
そこでこのイベントの条件にも通り、強制的に惟村は当主になります。
ただし、ここで惟村は強制的に解放されているのです。
この処理がどうも戦国史内ではエラーとなり、強制終了してしまうようです。
ですので、以下のような対処法を提案します。
1.捕虜・人質の場合はイベントを起こさない
2.捕虜・人質の場合も見込んで「惟村2号」を登場させる
場所移動さえしなければ良いので、人質・捕虜を殺した場合でもエラーは出ません。
そこで、捕虜・人質であろうとあるまいと「阿蘇惟村」を強制死亡させ、
そして「阿蘇惟村」と全てが同じパラメータである2号を登場させます。
もちろん、登場年数を9999年にしたりでこのイベント以外では登場しない惟村です。
(注:単に「阿蘇惟村」を強制死亡させ、同じ「阿蘇惟村」を強制登場させても
一回死亡している武将は蘇りません。)
以上です。
このバグはシナリオではなく「戦国史本体」のバグですので、
基本的に作者のせいではありません。ですが、回避方法があるのであれば、
積極的に導入するべきだと思いますので、考えてみた次第です。
これ以外にももしかしたらこういった本体依存バグが存在するかもしれませんので、
その際にはご一報頂ければ是幸いと思います。
これからも拙作をよろしくお願いします。
(サンクス!:大谷さん、元県民1さん)
特定の城に強制移動させたりするイベントがあります。
例として征西府での阿蘇家の強制当主替えイベントがあります
◇発生条件一見これで良い気がします。
武将 阿蘇惟時 が 大名 阿蘇家 の当主
武将 阿蘇惟村 が 大名 阿蘇家 の所属
◇発生イベント(1回のみ)
武将 阿蘇惟時 の継承順位を 1 に変更
武将 阿蘇惟村 の継承順位を 0 に変更
武将 阿蘇惟村 を強制的に当主にする
私もこれで良いと思っていました。
しかし、ここで戦国史本体のバグが発見されました。
阿蘇惟村が他家の捕虜や人質だった場合に、そのターン終了時に
なんと戦国史が強制終了してしまうのです。
他家に捕虜や人質で存在している時はあくまで所属は阿蘇家になっています。
そこでこのイベントの条件にも通り、強制的に惟村は当主になります。
ただし、ここで惟村は強制的に解放されているのです。
この処理がどうも戦国史内ではエラーとなり、強制終了してしまうようです。
ですので、以下のような対処法を提案します。
1.捕虜・人質の場合はイベントを起こさない
#捕虜大名(B_AS_KOREMURA)+#人質大名(B_AS_KOREMURA) = 0上記を条件に含ませることで捕虜・人質のどちらの場合でも回避することが出来ます。
2.捕虜・人質の場合も見込んで「惟村2号」を登場させる
場所移動さえしなければ良いので、人質・捕虜を殺した場合でもエラーは出ません。
そこで、捕虜・人質であろうとあるまいと「阿蘇惟村」を強制死亡させ、
そして「阿蘇惟村」と全てが同じパラメータである2号を登場させます。
もちろん、登場年数を9999年にしたりでこのイベント以外では登場しない惟村です。
(注:単に「阿蘇惟村」を強制死亡させ、同じ「阿蘇惟村」を強制登場させても
一回死亡している武将は蘇りません。)
以上です。
このバグはシナリオではなく「戦国史本体」のバグですので、
基本的に作者のせいではありません。ですが、回避方法があるのであれば、
積極的に導入するべきだと思いますので、考えてみた次第です。
これ以外にももしかしたらこういった本体依存バグが存在するかもしれませんので、
その際にはご一報頂ければ是幸いと思います。
これからも拙作をよろしくお願いします。
(サンクス!:大谷さん、元県民1さん)

