サンプル用コモンイベント のバックアップソース(No.6)

-コモンイベントを自作するや改造するときなどに参考にするコード。
-要バックアップ。別途にWRPGを入れて使うのがいいか(?)。
-※こちらはテキストベースです。コモンファイルのものは[[自作コモンイベント]]に追加編集してください。

#contents


//更新時メモ
//08-11-04
//いくら視覚的に分かりやすくても煩雑になってきているので改良を考え中。それと解説がおかしい箇所は直してくださいorz


*アニメーションのサンプル例 [#e9f0edc5]
-ピクチャ番号10000を使って5フレーム間隔でアニメーションさせるコモン。
-ピクチャ番号や各Evセルフは必要に応じて変更。

 入力は整数:4,文字列:1で
 セルフ0,1が表示座標,2,3が画像の分割数,
 5が画像ファイル名

 ■変数操作: このコモンEvセルフ4 = このコモンEvセルフ2 * このコモンEvセルフ3
 ■ピクチャ表示:10000 ファイル(このコモンEvセルフ5) X:このコモンEvセルフ0 Y:このコモンEvセルフ1 0(0)フレーム ※位置は中心,分割数は横このコモンEvセルフ2,縦このコモンEvセルフ3
 ■変数操作: このコモンEvセルフ10 = 1 + 0
 ■変数操作: このコモンEvセルフ11 = 0 + 0
 ■回数付きループ [ このコモンEvセルフ4 ]回
 |■ピクチャ移動:10000 相対X:0 Y:0 0(このコモンEvセルフ11)フレーム ※パターンはこのコモンEvセルフ10,他は同値
 |■変数操作: このコモンEvセルフ10 += 1 + 0
 |■変数操作: このコモンEvセルフ11 += 5 + 0
 |■
 ◇ループここまで◇
 ■ピクチャ消去:10000  0(このコモンEvセルフ11)フレーム
 ■

*ロード時、最後にセーブしたデータに初期位置を合わせる改造例 [#e9458fce]
-コモンEV054 323行目に以下を追加(目印は「▼ セーブの場合」)
-各セーブデータのこの変数を比較し、最も数値の大きい位置にカーソルを合わせる。

 |||■変数操作: このコモンEvセルフ51 = Sys77:現在の[年] * 10000
 |||■変数操作: このコモンEvセルフ51 += Sys78:現在の[月] * 100
 |||■変数操作: このコモンEvセルフ51 += Sys79:現在の[日] + 0
 |||■変数操作: このコモンEvセルフ52 = Sys80:現在の[時] * 10000
 |||■変数操作: このコモンEvセルフ52 += Sys81:現在の[分] * 100
 |||■変数操作: このコモンEvセルフ52 += Sys82:現在の[秒] + 0

*タイトル画面の前にロゴを表示してみる [#l2e17f96]
-最初に読み出されるマップは0番なので0番のイベントから呼び出すなり書き込むなりする。
-タイトルに戻るを選ぶと毎回ロゴが表示されて喧しいのでタイトル画面をマップ1番に指定している。
-ピクチャ表示番号やウェイト数値は任意のものを指定する(サンプルは0番)。

 Evセルフ5=ロゴファイルを指定
 Evセルフ6=ブラックアウトなら黒塗り画像。ホワイトアウトなら白塗り画像を指定
 

 ■トランジションタイプ指定:[なんかのトランジション]100フレーム
 ■トランジション準備
 ■トランジション実行
 ■ピクチャ表示:0ファイル (このコモンEvセルフ5) X:0 Y:0 0(0)フレーム ※位置は中心
 ■ウェイト:100
 ■トランジション指定:[なんかのトランジション]100フレーム
 ■トランジション準備
 ■トランジション実行
 ■ピクチャ消去:0(0フレーム)
 ■ピクチャ表示:0ファイル (このコモンEvセルフ6) X:0 Y:0 0(0)フレーム ※位置は中心
 ■ウェイト:100
 ■ピクチャ消去:1(0フレーム)
 ■トランジションタイプ指定:[瞬間移動]50フレーム
 ■トランジション準備
 ■場所移動 マップ1番 位置適当
 ■トランジション実行
 ▼以降タイトル画面起動時のイベントをがちゃがちゃ挿入


*キーを押したときに動するイベントと押し続けた場合の変数を求める [#ga9598f2]
-サンプルでは「決定キー」となっているが変更すれば特定キーでイベントを起こせる。
-押された分の変数を求めているので求めた変数を用いて色々動かせる。

**押しただけの場合を取り扱う一例 [#ke7cf6f7]
-「入力待ち」ではないので押しっぱなしにしても動く

 コモンEvセルフ0は決定キー(10)が押されているか否か
 コモンEvセルフ1は現在イベントを実行中か否か

 ■ループ開始
 |■キー入力:このコモンEvセルフ変数0 / 決定(10)
 |■条件分岐(変数):【1】このコモンEvセルフ0がこのコモンEvセルフ1以外
 |◇分岐: 【1】[このコモンEvセルフ0がこのコモンEvセルフ1以外]の場合↓
 ||■条件分岐(変数): 【1】このコモンEvセルフ0が10と同じ
 ||◇分岐: 【1】[このコモンEvセルフ0が10と同じ]の場合↓
 |||■処理実行
 ||◇分岐終了◇
 ||■
 |◇分岐終了◇
 |■変数操作: このコモンEvセルフ1 = このコモンEvセルフ0 + 0
 |■ウェイト:1 フレーム
 |■
 ◇ループここまで◇


**押し続けていた場合の変数を求めてみる一例 [#y8c0e438]
-通常変数V0を用いてどれだけ決定キーが押されているかを調べるサンプル。

 V0とは決定キーを押し続けていた場合に変動する変数(初期値0/上限2)
 こちらは1ずつ加算される。

 ■キー入力:このコモンEvセルフ変数0 / 決定(10)
 ■条件分岐(変数): 【1】このコモンEvセルフ0が0と同じ
 ◇分岐: 【1】 [ このコモンEvセルフ0が0と同じ ]の場合↓
 |■変数操作: V0[GetKey_Z] = 0 + 0
 |■
 ◇上記以外
 |■変数操作: V0[GetKey_Z] += 1 + 0
 |■変数操作: V0[GetKey_Z] 上限= 2 + 0
 |■
 ◇分岐終了◇

並列実行ならばシンプルに考えてこちらを先に動かしてしまうといいかもしれない。

 V0とは決定キーが押されたフレーム数の分だけ10になる変数(押されていないときは0)
 単純にキーが押されているかいないかだけを取りたいなら、
 そのイベント内で別に入力待ち無しのキー入力コマンドを使用すればよい。

 ■ループ開始
 |■変数操作:V0=0
 |■キー入力:V0/決定キー(入力待ち)
 |■
 ◇ループここまで◇

*時間計測のサンプル例 [#d590c01d]
-フレームではなくミリ秒単位の時間計測をしてウェイトをかけるためのコモンです。
-ミリ秒単位とは言っても、1フレームの長さより短い単位では計測できません。
-FPSに左右されずにほぼ正確なウェイトがかけれるので、音楽と画面表示との同期などに使用できるかと思います。

 入力は整数:2
 セルフ0:処理内容(選択肢手動設定で、0:基点設定、1:指定時間までウェイト)
 セルフ1:待ち時間(ミリ秒)

 ■条件分岐(変数): 【1】このコモンEvセルフ0が0と同じ 【2】このコモンEvセルフ0が1と同じ
  ◇分岐: 【1】 [ このコモンEvセルフ0が0と同じ ]の場合↓
 |▼ 時間計測の基点を設定する。とりあえずここは現在のプレイ時間を保存するだけ
 |■変数操作: このコモンEvセルフ10 = Sys29:[読]プレイ時間(1秒単位) + 0 
 |■変数操作: このコモンEvセルフ11 = Sys30:[読]プレイ時間(ミリ秒単位) + 0 
 |■
  ◇分岐: 【2】 [ このコモンEvセルフ0が1と同じ ]の場合↓
 |▼ 基点からの時間経過が待ち時間(ミリ秒)を超えるまでウェイトする
 |■ループ開始
 ||■変数操作: このコモンEvセルフ12 = Sys29:[読]プレイ時間(1秒単位) - このコモンEvセルフ10 
 ||■変数操作: このコモンEvセルフ12 *= 1000 + 0 
 ||■変数操作: このコモンEvセルフ12 += Sys30:[読]プレイ時間(ミリ秒単位) - このコモンEvセルフ11 
 ||■条件分岐(変数): 【1】このコモンEvセルフ12がこのコモンEvセルフ1以上
 || ◇分岐: 【1】 [ このコモンEvセルフ12がこのコモンEvセルフ1以上 ]の場合↓
 |||■ループ中断
 |||■
 ||◇分岐終了◇◇
 ||■ウェイト:1 フレーム
 ||■
 |◇ループここまで◇◇
 |■
 ◇分岐終了◇◇
 ■

*データベースコピーの例 [#i862476f]
-汎用性を付けたデータベースコピーのコモン。
-コピー元udbタイプに100〜、300〜を指定することで、可変DB、システムDBからのコピーも可能。

 入力は整数:4
 セルフ0:コピー元udbタイプ
 セルフ1:コピー元データNo.
 セルフ2:コピー先cdbタイプ
 セルフ3:コピー先データNo.

 ■DB読込(ユーザ): このコモンEvセルフ10 = ユーザDB[タイプこのコモンEvセルフ0の内容数]
 ■変数操作: このコモンEvセルフ11 = 1100000000 + 0 
 ■変数操作: このコモンEvセルフ11 += このコモンEvセルフ2 * 1000000 
 ■変数操作: このコモンEvセルフ11 += このコモンEvセルフ3 * 100 
 ■変数操作: このコモンEvセルフ12 = 0 + 0 
 ■回数付きループ [ このコモンEvセルフ10 ]回
 |■DB読込(ユーザ): V[このコモンEvセルフ11] = ユーザDB[このコモンEvセルフ0:このコモンEvセルフ1:このコモンEvセルフ12]
 |■変数操作: このコモンEvセルフ10〜このコモンEvセルフ11 += 1 + 0 
 |■
 ◇ループここまで◇◇
 ■


*データベースのデータ入れ替えの例 [#p0a293b1]
-データ1とデータ2を入れ替えます。

 入力は整数:3
 セルフ0:可変DBタイプ番号
 セルフ1:データ1
 セルフ2:データ2

 ■DB読込(可変): このコモンEvセルフ10 = 可変DB[タイプこのコモンEvセルフ0の内容数]
 ■変数操作: このコモンEvセルフ11 = 1100000000 + 0 
 ■変数操作: このコモンEvセルフ11 += このコモンEvセルフ0 * 1000000 
 ■変数操作: このコモンEvセルフ11 += このコモンEvセルフ1 * 100 
 ■変数操作: このコモンEvセルフ12 = 0 + 0 
 ■回数付きループ [ このコモンEvセルフ10 ]回
 |■変数操作: このコモンEvセルフ13 = V[このコモンEvセルフ11] + 0 
 |■文字列操作:このコモンEvセルフ5 = "\cdb[\cself[0]:\cself[1]:\cself[12]]"
 |■変数操作: V[このコモンEvセルフ11] = 0 + 0 
 |■文字列操作:このコモンEvセルフ6 = "\cdb[\cself[0]:\cself[1]:\cself[12]]"
 |■DB読込(可変): V[このコモンEvセルフ11] = 可変DB[このコモンEvセルフ0:このコモンEvセルフ2:このコモンEvセルフ12]
 |■条件分岐(文字): 【1】このコモンEvセルフ変数6 が"" と同じ 【2】このコモンEvセルフ変数6 が"0" と同じ
 | ◇分岐: 【1】 [ このコモンEvセルフ変数6 が"" と同じ ]の場合↓
 ||■可変DB書込:DB[このコモンEvセルフ0:このコモンEvセルフ2:このコモンEvセルフ12]  =  このコモンEvセルフ5
 ||■
 | ◇分岐: 【2】 [ このコモンEvセルフ変数6 が"0" と同じ ]の場合↓
 ||■可変DB書込:DB[このコモンEvセルフ0:このコモンEvセルフ2:このコモンEvセルフ12]  =  このコモンEvセルフ13
 ||■
 |◇分岐終了◇◇
 |■変数操作: このコモンEvセルフ11〜このコモンEvセルフ12 += 1 + 0 
 |■
 ◇ループここまで◇◇
 ■

-補足説明&br;
一見ではおそらく理解できないだろうと思います。この処理は一体何なんだろうと思うようなものがいくつかあるでしょう。&br;
データの型が文字列か整数かによって処理方法が変わるためにこのような方法を取っています。&br;
まずは6、7行目。この時点では、データの型は不明です。そこで、とりあえずバックアップを取っておきます。&br;
この代入方法では、型が違っていてもエラーは発生しません。ただし、文字列をセルフ13に代入しても0になるだけです。&br;
8行目では、バックアップを取ったデータに0を代入しています。&br;
この方法で文字列変数に数値を代入すると普通はエラーが発生しますが、なぜか0を代入したときに限ってエラーが発生しません。&br;
その代わり、文字列の内容は空になります。&br;
つまり、データ型が文字列の場合は内容が""に、整数の場合は0になるわけです。&br;
後はこれを文字列として比較することで、データ型の判別ができる、というわけです。&br;


*開平法によるルート計算 [#x2bbf037]
-ほんの十数行でできるルート近似値の計算。
-入力値(開く数)=コモンEvセルフ0、結果=このコモンEvセルフ20
 ■変数操作: このコモンEvセルフ10 = -1 + 0 
 ■変数操作: このコモンEvセルフ20 = 0 + 0 
 ■ループ開始
 |■条件分岐(変数): 【1】このコモンEvセルフ0が0以下
 | ◇分岐: 【1】 [ このコモンEvセルフ0が0以下 ]の場合↓
 ||■ループ中断
 ||■
 |◇分岐終了◇◇
 |■変数操作: このコモンEvセルフ10 += 2 + 0 
 |■変数操作: このコモンEvセルフ0 -= このコモンEvセルフ10 + 0 
 |■変数操作: このコモンEvセルフ20 += 1 + 0 
 |■
 ◇ループここまで◇◇
 ■
-精度を高めたい場合は入力値としてこのコモンEvセルフ1を小数点以下桁数とし、一行目で
 ■変数操作: このコモンEvセルフ11 = 1 + 0 
 ■ループ開始
 |■条件分岐(変数): 【1】このコモンEvセルフ1が0以下
 | ◇分岐: 【1】 [ このコモンEvセルフ1が0以下 ]の場合↓
 ||■ループ中断
 ||■
 |◇分岐終了◇◇
 |■変数操作: このコモンEvセルフ11 *= 100 + 0 
 |■変数操作: このコモンEvセルフ1 -= 1 + 0 
 |■
 ◇ループここまで◇◇
 ■このコモンEvセルフ0 *= このコモンEvセルフ11 + 0 
 とでもしてやれば良い。&br;
 ただし、あまり小数点以下桁数を増やすと開平中に1フレーム当たりの処理が50000を越えてしまうので、1000周に一回程度のウェイトを挟んでやると良いかもしれない。