ウディタ解体記06

ウディタ解体記 学習紹介~learning~

ウディタ解体記

おさらい

まずは、これまでのおさらい。
ウディタ初期にあるコモンイベントで並列実行(常時)を起動条件とするものは2つある。

コモンイベント番号 名前 (コマンド行数)
048 X[共]基本システム自動初期化 (217行)
126 X[移]歩行時_並列キー処理 (126行)

[X[共]基本システム自動初期化]コモンEv048は下記の流れになっていた。

1.可変データベースの「主人公ステータス」内の「装備中の武器」の開始番号をセット。
2.初期化が終わってるかどうかの確認。終わってる場合は以下の処理をキャンセル。
/*画面サイズ補正値と基本フォントサイズを格納*/
3.Game.exeのバージョンの確認後、画面サイズの補正値と基本フォントサイズの格納をしている。
4.1~3が終わったら終了フラグに1を入れる。/*その他のパラメータ初期化*/
5.主に可変データベースの「基本システム変数」の下記の各値を初期化および設定。
・敵/味方の最大数
・セーブ可能数
1ページのセーブ数/何ページまでかの値/セーブ可能かのフラグ
・コンフィグの設定
キー位置保存/戦闘時キー連打などのフラグ
・キーリピートフレーム数の設定
・決定、選択、キャンセルの各SE
・文字影をつけるかのフラグ
・選択肢のカーソル表示時に中央部分の処理の設定
・メッセージ速度
・仲間の車間距離
その後に仲間内の隙間の処理や重複の処理が呼ばれていた。/*キャラクターの装備を、武器(コード20000~)と防具(コード30000~)に変換する*/
6.主人公になりうるデータ数分の装備を検索し武器20000~か防具30000~に分類し設定する内容だった。
7.自然回復値を0に戻す設定。
8.各主人公になりえるキャラクターの装備のない状態でのステータスを一時DBに上書き<初期化>する。
9.装備補正の処理を一時DBに加える。
10.状態補正の処理を一時DBに加える。
※この時順序がおかしいと、補正の重複等が起こってしまう。
11.[X[移]パラメータ増減コモンEv70](685行)を呼び出し、22:HPのパラメータ増減の処理
12.[X[移]パラメータ増減コモンEv70](685行)を呼び出し、23:SPのパラメータ増減の処理。/*最新セーブデータの取得*/
13.文字列操作で”このコモンセルフ5:[Cself5])”に”Save/System.sav”を設定。
14.”一時保存コード”にセーブデータ[Cself5](1600005)のV0[[サンプルゲーム]コック出現](2000000)を渡す。
15.変数操作で”Sys25:現在セーブデータ番号(0~)”に”一時保存コード”を渡す。
/*黒から徐々にフェードイン*/
16.1フレームのウェイト

[X[移]歩行時_並列キー処理]コモンEv126の解体を開始した。

Sys13:イベント実行中?(1=ON)が0と同じOR「上位以外の場合」で分岐し、
その後、「直前のイベント実行中がオンなら10フレームはメニューを出さない処理」をすることが分かった。

上位以外の場合」の分岐後は
CSelf3に4方向とキャンセルボタンのキー入力受付
の処理があり、その後に「直前のイベント実行中がオンなら10フレームは~」に続く。

Sys13:イベント実行中?(1=ON)が0と同じだった場合、
CSelf13[キー入力状態]で入力情報を確認し、
CSelf16[直前イベント実行中?]を1減算する。

前日はここまでやった。
今日はその後の、
CSelf16[直前イベント実行中?]が0以下で条件分岐
からになる。

【前半】[X[移]歩行時_並列キー処理]コモンEv126の解体25行~

コマンド44
25行
条件分岐はCSelf16[直前イベント実行中?]が0以下のみ、
CSelf16[直前イベント実行中?]が1以上の場合は処理が飛んで、
その後の
コマンド45
100行 コメント/「直前キー入力状態」を更新
からコマンドの処理が始まる。

では戻って25行の続きから見ていこう
CSelf16[直前イベント実行中?]が0以下の場合{
27行
条件分岐、CSelf13[キー入力状態]がCSelf14[直前キー入力状態]以外の場合。
今度はCSelf13[キー入力状態]CSelf14[直前キー入力状態]以外の時のみ実行である。
(23行で「新しくキーが押された場合(コモン3と4が異なる値のとき)のみ処理する」とあるので、
これの条件分岐となる。)
29行 コメント/キャンセルキーが押されたらメニュー画面起動フラグをオンにする
30行
条件分岐、Sys35:主人公移動中?(1=YES)マスの間にいるかどうが0と同じor「上記以外の場合」。
Sys35:主人公移動中?(1=YES)マスの間にいるかどうが0と同じではない場合は、
コマンド46
51行の上記以外に飛ぶ。

Sys35:主人公移動中?(1=YES)マスの間にいるかどうが0と同じ場合は、{
32行
条件分岐、Sys13:イベント実行中?(1=YES)が0と同じ
34行
条件分岐、CSelf13[キー入力状態]が11と同じ
コマンド47
36行 コメント/起動に成功する場合は、ここへ来る
38行 コメント/「直前キー入力状態」を更新
39行
CSelf14[直前キー入力状態]CSelf13[キー入力状態]を入力。
40行 コメント/主人公の動きを1フレームだけ止める(止めないと、このままさらに一歩歩いてしまうことがある)
41行
↓、←、→、↑キーのキー入力禁止
42行 コメント/予約で起動すると、「一度だけ起動する自動イベント」として実行できる
43行
イベント操作処理。予約「このコモンから1つ下のコモンEv」(=コモンEv127[X[移]メニュー起動])
44行
1フレームのウェイト
45行
↓、←、→、↑キーのキー入力禁止解除


コマンド46
51行 上記以外{
52行 コメント/移動中にキャンセルキーを押した場合、先行入力として扱う
53行
条件分岐、CSelf13[キー入力状態]が11(キャンセルボタン)と同じ
55行 コメント/もし移動中なら、移動が終わるまで待つ (5フレーム過ぎたら無視)
56行
CSelf11[旧マップID]現在のマップIDを入れる。
57行
5回のループ開始
58行
1フレームのウェイト
59行 コメント/マップが変わっていた場合も、メニュー起動待ち状態を解除する
60行
CSelf12[新マップID]現在のマップIDを入れる。
61行
条件分岐、CSelf11[旧マップID]がCSelf12[新マップID]以外
63行 ループ中断
65行 分岐終了

おっと、そろそろ1時間か。
前半はここでおしまい。色々ルーティン後に後半の開始だ。

【後半】[X[移]歩行時_並列キー処理]コモンEv126の解体66行~

後半は66行から、
コマンド48
66行 コメント/イベントが起動しておらず、移動中でもない場合にメニューを起動
67行
条件分岐、Sys13:イベント実行中?(1=YES)が0と同じor上記以外
Sys13:イベント実行中?(1=YES)が0と同じ場合{
69行
条件分岐、Sys35:主人公移動中?(1=YES)マスの間にいるかどうが0と同じ場合{
コマンド51
71行 コメント/起動に成功する場合は、ここへ来る
73行 コメント/「直前キー入力状態」を更新
74行
CSelf14[直前キー入力状態]CSelf13[キー入力状態]を入力。
75行 コメント/主人公の動きを1フレームだけ止める(止めないと、このままさらに一歩歩いてしまうことがある)
76行
↓、←、→、↑キーのキー入力禁止
77行 コメント/予約で起動すると、「一度だけ起動する自動イベント」として実行できる
78行
イベント操作処理。予約「このコモンから1つ下のコモンEv」(=コモンEv127[X[移]メニュー起動])
79行
1フレームのウェイト
80行
↓、←、→、↑キーのキー入力禁止解除
(71~80行は36~45行と同じ流れ)
81行 ループ中断


上記以外の場合{
コマンド49
85行 上記以外
86行 コメント/もしイベントが一瞬でも行われたらメニュー起動待ちをキャンセル
87行 ループ中断
89行 分岐終了(67行の条件分岐)

91行 ループここまで(57行の5回のループ)
93行 分岐終了(53行の条件分岐)

95行 分岐終了(30行の条件分岐)

97行 分岐終了(27行の条件分岐)

99行 分岐終了(25行の条件分岐)

コマンド45
100行 コメント/「直前キー入力状態」を更新
101行
CSelf14[直前キー入力状態]CSelf13[キー入力状態]を入力。
102行 コメント/一歩でも動いていたら歩行定期処理を呼び出す
103行
CSelf20[現在主人公座標X]主人公のX座標(精密)を入力。
104行
CSelf21[現在主人公座標Y]主人公のY座標(精密)を入力。
105行
条件分岐
CSelf20[現在主人公座標X]がCSelf22[前回主人公座標X]以外or上記以外
CSelf20[現在主人公座標X]がCSelf22[前回主人公座標X]以外の場合{
107行
[X[移]状態更新コモンEv76]を呼び出し状態更新処理をする。
コマンド50
処理内容
一歩あるいた時の状態更新処理

109行
上記以外の場合{
110行
CSelf21[現在主人公座標Y]がCSelf23[前回主人公座標Y]以外
112行
[X[移]状態更新コモンEv76]を呼び出し状態更新処理をする。
処理内容
一歩あるいた時の状態更新処理
114行 分岐終了(110行の条件分岐)

116行 分岐終了(105行の条件分岐)

117行
CSelf22[前回主人公座標X]CSelf20[現在主人公座標X]を入力。
118行
CSelf23[前回主人公座標Y]CSelf21[現在主人公座標Y]を入力。

120行 上記以外(20行での条件分岐)
121行
CSelf34方向とキャンセルボタンのキー入力受付
123行 分岐終了(20行での条件分岐)
124行 コメント/直前のイベント実行中がオンなら10フレームはメニューを出さない
125行
CSelf16[直前イベント実行中?]に「Sys13:イベント実行中?(1=ON)*10を入力。
(直前のイベント実行中がオンなら10フレームはメニューを出さない処理)
(24行でCSelf16[直前イベント実行中?]の減算をして、25行で条件分岐をしている。減算で0になるまでが10Fということだろう。)

いい具合に1時間か。
これで、[X[移]歩行時_並列キー処理]コモンEv126の解体も一旦終わった感じかな。

[X[移]歩行時_並列キー処理]コモンEv126まとめ

処理内容に書いてある通りの事だった。

メニュー起動の際に、
・イベント中はメニューが起動しないようにする
→20行の条件分岐
・マスとマスの間を移動中は、メニューの表示を待つ(一定時間が過ぎたら入力キャンセル)
→55~65行の移動待ち+5フレーム処理
・メニューを開いたときは次の一歩を歩き出さないようにする
→40~45行の方向キー入力不可区間
の処理。

一歩あるいた時の処理
→107、112行
メニュー表示用のキャンセルキー受付
→メインのコアな部分は43行or78行で実行される。
予約で起動し、「一度だけ起動する自動イベント」として実行している。
呼び出されるイベントは[X[移]メニュー起動]コモンEv127(205行)である。
[X[移]メニュー起動]コモンEv127(205行)の6行にも書いてある。
「X[移]歩行時_並列キー処理」イベントから「予約」処理で呼び出されています
と……。

[X[移]メニュー起動]コモンEv127(205行)内にメニューのレイアウト関係がのっているんだろうな。
次が楽しみだ♪

明日もレッツウディタ♪

コメント

タイトルとURLをコピーしました