■戦国史コラム:イベント技術集 記事一覧■
鉱山の開山・閉山・有限化処理  2007年07月22日
条件によって季節イベントの確率を変える  2007年07月22日
ランダム変数の保持  2007年07月17日
マクロのすすめ  2007年07月17日
文章の文字色の変更  2007年07月17日



2007年07月22日

鉱山の開山・閉山・有限化処理


鉱山を開山すること。それは思っているより簡単です。
その城の鉱山最大値を0以上にすれば開山になります。
0以上だと、鉱山の画像が表示されます。

また逆に閉山するには、現在の鉱山値を0にし、
更に最大値も0にすることで閉山することができます。
これで鉱山の画像も表示されなくなります。

考え方は簡単です。しかし、鉱山毎にイベントを設置しなければいけないので、
もっと多くのイベントを使用したい場合には、かさばるかも知れません。
ただ、特に導入するイベントはないな。と思う方は入れてみてはどうでしょう。


at 05:43|Edit

Comment

条件によって季節イベントの確率を変える


季節イベントとは、大雨、台風、大雪…などが有名どころでしょうか。
この確率は一見変更できないように見えます。確かに、直接変更は出来ません。

ではどのように変更するか、それでイベントです。
要は確率を変更すれば良いので、以下のようにすればOKです。

例:1年交替で大雨・大雪が降る確率が変わる
◇発生条件
変数 YEARFLAG に 1 を加算
変数 YEARFLAG = 1
変数 YEARFLAG に 0 を代入

◇発生イベント
季節イベント E_OOYUKI を発生させる
季節イベント E_OOAME

◇もう一つの方の発生条件
変数 YEARFLAG = 0
関数 #Random < 0.50

◇発生イベント
季節イベント E_OOYUKI を発生させる
季節イベント E_OOAME を発生させる
こんな感じです。
これで1年交替で大雨・大雪の確率が2分の1になります。

また、これで設定できるのは全体的な確率変更です。
現状では地域限定は出来ません。年月は条件で変更は出来るでしょう。

ところで、季節イベントは毎回イベントを設定しなくても発生しますので、
あらかじめ季節イベントの方を絶対に発生しない期間(0年より前など)に
設定しておいてください。設定によっては二度発生してしまいます。

また、「季節イベントを発生させる」イベントは、内部の確率に準じ、
発生しないと判断すると表示されません。
ここらへんは普通の季節イベントと同じです。
イベントで呼び出せば必ず100%起こるとは限りません。
(起こしたいのであればその月を100%にするしかありません(例:征西府の勢力紹介等))

年数や、季節イベントの組み合わせ、季節イベントごとに確率を設定、
などで、「冷夏」の年や「エルニーニョ」「ラニーニャ」の年を
再現できるのではないでしょうか。

また季節イベントで表せるのは「災害」や「兵数減少」だけではなく、
単なる情報表示(例:征西府の勢力紹介、天皇勅令発布等)にも使えます。
そして条件は年月だけでなく、ある特定の城占拠や、資金等にしても良いと思います。
ぜひどうぞ。

at 00:21|Edit

Comment
2007年07月17日

ランダム変数の保持


ランダム関数の桁落としは以前説明しましたが、今回はランダム変数の保持です。
(ここではランダム関数を代入した変数をランダム変数と呼ぶことにします)

保持する理由は戦国史のシステムに沿ったイベント作成のためです。
戦国史のシステムにはある程度の規則性があり、
嫌な結果が発生したからといって、いくらデータロードを繰り返しても
結果が180度変わることはありません。(何かしら明らかに違う行動を取らない限り)

…が、ランダム変数はそういった戦国史のバランスを崩してしまいます。
それはプレー毎にランダムになってしまうので、
「この嫌なイベントは起こさせたくないなぁ…」と言う人がロードして始めると
条件に当てはまらなくなるまでランダム変数を変えることで乗り越えてしまいます。
(ランダム変数を用いなければ良いという方もおられるでしょうが^^;)

それを防ぐための変数保持です。
今回はその一つの方法である「ターン保持」です。
つまりはターンごとに使用するランダム変数を変え、残りの変数を保持しておくのです。
以下は「3ターン保持」のランダム変数です。
◇初期設定としてランダム関数の有理化等で
RAND1 RAND2 RAND3 の3つを生成しておく。

◇ランダム変数をターンごとに使用する。(変数切崩法)
(変数RANDCNTは初期値0、変数RANDが実際に使用するランダム変数)
変数RANDCNT に 1 を加算
変数RAND に 変数RAND1 を代入
RANDCNT > 1
変数RAND に 変数RAND2 を代入
RANDCNT > 2
変数RAND に 変数RAND3 を代入
変数RANDCNT に 0 を代入

◇使用したランダム変数に違う値を代入する(例は変数RAND1の場合)
RANDCNT = 1
変数RAND1 に #Random を代入
(以下有理化)
以上のように構成することで、
実際に使われるランダム変数は3ターン前に生成されることになります。
(ただし、最初から始めて1~3ターン目までは結果が変わります)

確かに3ターンまで遡れば結果は変わってきますが、
そこまですると戦国史本体の結果も変わってくるので、
それは「想定内」「戦国史本体に似たシステムになった」と思って頂ければ^^;

まだまだ保持させたい方は5ターンでも10ターンでも良いと思います。
良いとは思いますが、結局1ターンで使用できるのは1つのランダム変数です。

(抽出された)いくつものランダム変数を使う場合には、
3ターン程度が目安ではないかと思います。

at 22:37|Edit

Comment

マクロのすすめ


皆さんはイベントを作るときに変数に代入すると思いますが、
「直接数字を代入」していますか?
それとも「マクロから変数に代入」していますか?

マクロとは簡単に言うと、良く使う数値については
(見た目は変数ですが、)「名前」を付けてしまおうということです。

以下にサンプルを2つ並べます。
上がノンマクロ、下がマクロ定義したイベントです。
◇条件
#プレイヤー大名 = 100

◇発生イベント
変数KANSEN に 1 を代入
エンディング
◇マクロ定義用イベント・条件
変数PLAYER_KANSEN に 100 を代入

◇条件
#プレイヤー大名 = 変数PLAYER_KANSEN

◇発生イベント
変数KANSEN に 1 を代入
エンディング
上記二つとも「観戦モード」を選んだ場合にエンディングへ強制移行するイベントです。
(参照:観戦モードの大名家IDについて

さて、ここで大名家数が150に増えた場合どうすれば良いでしょうか。
上なら #プレイヤー大名 = 100 の「100」を変更しますよね。
下なら 変数PLAYER_KANSEN に 100 を代入の「100」を変更します。

これの何処が違うかというと、今は登場回数が1回なのでそこまで便利そうに見えませんが、
これがいたるところで観戦モードかどうかを調べるのでしたら、作業量は桁違いです。

例えば、観戦モードを調べるイベントが10箇所あるとします。
するとマクロを使わない場合だと10箇所全てを変更しなければなりません。
ちまちま更新しているシナリオだと何回も何回も大名家数に合わせないといけません。

が、マクロ定義していると、その変数名は変わらないわけですから、
最初に代入している値を変更するだけで、全ての変数の内容が変わりますので、
変更は1箇所で済みます。

ですので、「大規模シナリオじゃないから…」と言わずに、
一番最初のイベントにマクロ定義のイベントを付け加えては如何でしょうか。

これは観戦モードに限ったことではないので、
「これはマクロ定義しておいた方がいいな」と思ったらすぐにでも設定しましょう。
ただし、最初の一回だけ設定すればいいので、マクロ定義イベントは「一回のみ」で良いでしょう。
無駄に動作が重くなります。

マクロ定義の例:
PLAYER = #プレイヤー大名
VER = 0.01 (文章などにバージョンを表示させる等)
HOIMOU_D = 30 (残り30家になったら包囲網発動…等)

名前は皆さんのお好きなように付けると良いと思います。
ポイントとしては入力しやすい短めの名前を付けることです。

NOKORI_DAIMYOUKE_HOUIMOU = 30

…と名前を付けたら逆に面倒だと思いますし、
名前を変更しようとなると、ノンマクロの時のように全てを変更しないとですからね。

at 21:52|Edit

Comment

文章の文字色の変更


文字色の変わった文章を表示するシナリオをよく見かけますが、
あれはどのようなことを行っているのでしょう。

答えは「color」と言うタグを用いているからです。
このタグから、次の「color」タグが宣言されるまでの間の文字色を変更します。

「color」タグは以下のように宣言します。
$color=0xFFFFFF$
このタグでは、以下全て白色に着色されます。

「color」の後に「=」で後の後ろに「0xFFFFFF」で色のRGBを設定します。
「0x」は16進数で表しますよという宣言なのですが、
ここでは「書くのがお約束なんだ」と理解しておけば十分です。

その後にウェブページ作成でおなじみの色設定をすればOKです。
(例:赤FF0000 黄FFFF00 黄緑00FF00 青0000FF 黒000000など)

詳しいカラーチャートはウィキペディアに載っています。

以下はサンプルです。
$color=0x55FF55$--------------------------------------------------------
$color=0xFFFFFF$
Scenario Name : CyberForce

Chapter : 1 Sub Title : Overprescription
$color=0x55FF55$
--------------------------------------------------------
$color=0xFFFFFF$
◇Requirement Of Victory◇ (勝利条件)

 ・この地域全ての『Cross-Eye』圏化

◇Difficulty◇ (難易度 S → A ~ E )

 ・NormalMode …$color=0x55FF55$E$color=0xFFFFFF$
 ・ExMode … $color=0xFF5555$A$color=0xFFFFFF$
これは以下のように表示されます。
--------------------------------------------------------
Scenario Name : CyberForce

Chapter : 1 Sub Title : Overprescription

--------------------------------------------------------
◇Requirement Of Victory◇ (勝利条件)

 ・この地域全ての『Cross-Eye』圏化

◇Difficulty◇ (難易度 S → A ~ E )

 ・NormalMode …
E
 ・ExMode …
A

上記サンプルは自作シナリオのCyberForceのオープニングの上部です。

ちなみに、この文字色変更が適応されるのはオープニング、エンディング、イベント文章です。
武将名や大名家名などに適応することは出来ませんのでご注意を。

◇付記
「color」があるなら「size」や「bold」などもあるだろうと思われる方も居るかもしれません。
しかしながら、今のところ「color」しかタグは存在しないそうです。(asakaさん談)


at 02:01|Edit

Comment