ウディタでパスワード(暗証番号)コモンイベント。作り方と解説、講座

自作コモンイベント配布

▼ 数字の操作部分です

▼ //シリンダー合わせループ
■変数操作: CSelf22[選択中パネル] = 0 + 0
■ループ開始
|▼ //キー入力
|■条件分岐(変数): 【1】CSelf61[インターバルカウンター] が 0以下
|-◇分岐: 【1】 [ CSelf61[インターバルカウンター] が 0以下 ]の場合↓
| |■キー入力:このコモンEvセルフ変数20 / [入力待ち]  4方向 決定(10) キャンセル(11)
| |▼ //入力があれば間隔をあける
| |■条件分岐(変数): 【1】CSelf20[キー入力受付] が 1以上
| |-◇分岐: 【1】 [ CSelf20[キー入力受付] が 1以上 ]の場合↓
| | |■変数操作: CSelf61[インターバルカウンター] = CSelf60[インターバル] + 0
| | |■
| |◇分岐終了◇
| |▼ //選択桁移動
| |■条件分岐(変数): 【1】CSelf20[キー入力受付] が 4と同じ 【2】CSelf20[キー入力受付] が 6と同じ
| |-◇分岐: 【1】 [ CSelf20[キー入力受付] が 4と同じ ]の場合↓
| | |■変数操作: CSelf22[選択中パネル] -= 1 + 0
| | |■条件分岐(変数): 【1】CSelf22[選択中パネル] が 0未満
| | |-◇分岐: 【1】 [ CSelf22[選択中パネル] が 0未満 ]の場合↓
| | | |■変数操作: CSelf22[選択中パネル] = CSelf21[パネル総数] - 1
| | | |■
| | |◇分岐終了◇
| | |▼ //左に移動。選択中のパネルは\cself[22]番です
| | |■
| |-◇分岐: 【2】 [ CSelf20[キー入力受付] が 6と同じ ]の場合↓
| | |■変数操作: CSelf22[選択中パネル] += 1 + 0
| | |■条件分岐(変数): 【1】CSelf22[選択中パネル] が CSelf21[パネル総数]以上
| | |-◇分岐: 【1】 [ CSelf22[選択中パネル] が CSelf21[パネル総数]以上 ]の場合↓
| | | |■変数操作: CSelf22[選択中パネル] = 0 + 0
| | | |■
| | |◇分岐終了◇
| | |▼ //右に移動。選択中のパネルは\cself[22]番です
| | |■
| |◇分岐終了◇
| |▼ //選択桁シリンダー回転
| |▼ //変数アドレス取得
| |■変数操作: CSelf23[選択中アドレス] = CSelf22[選択中パネル] + 1600040
| |■条件分岐(変数): 【1】CSelf20[キー入力受付] が 2と同じ 【2】CSelf20[キー入力受付] が 8と同じ
| |-◇分岐: 【1】 [ CSelf20[キー入力受付] が 2と同じ ]の場合↓
| | |■変数操作: CSelf10[現在ピクチャ番号] = CSelf19[下矢印開始ピクチャ番号] + CSelf22[選択中パネル]
| | |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| | |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| | |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] + CSelf87[パネル間隔Y]
| | |■ピクチャ表示:CSelf10[現在ピクチャ番号] [中心]ファイル「SystemGraphic/パスコード_↓ボタン 押.png」 X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / 10(0)フレーム  / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
| | |▼ \cself[10]
| | |■変数操作: V[CSelf23[選択中アドレス]] -= 1 + 0
| | |■変数操作: CSelf27[選択中数値] = V[CSelf23[選択中アドレス]] + 0
| | |■条件分岐(変数): 【1】CSelf27[選択中数値] が 0未満
| | |-◇分岐: 【1】 [ CSelf27[選択中数値] が 0未満 ]の場合↓
| | | |■変数操作: V[CSelf23[選択中アドレス]] = 9 + 0
| | | |■
| | |◇分岐終了◇
| | |▼ //下に回す(+1)。\cself[23]を選択しました。選択中の数値は、\cself[27]です
| | |■
| |-◇分岐: 【2】 [ CSelf20[キー入力受付] が 8と同じ ]の場合↓
| | |■変数操作: CSelf10[現在ピクチャ番号] = CSelf18[上矢印開始ピクチャ番号] + CSelf22[選択中パネル]
| | |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| | |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| | |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] - CSelf87[パネル間隔Y]
| | |■ピクチャ表示:CSelf10[現在ピクチャ番号] [中心]ファイル「SystemGraphic/パスコード_↑ボタン押.png」 X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / 10(0)フレーム  / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
| | |■変数操作: V[CSelf23[選択中アドレス]] += 1 + 0
| | |■変数操作: CSelf27[選択中数値] = V[CSelf23[選択中アドレス]] + 0
| | |■条件分岐(変数): 【1】CSelf27[選択中数値] が 9超
| | |-◇分岐: 【1】 [ CSelf27[選択中数値] が 9超 ]の場合↓
| | | |■変数操作: V[CSelf23[選択中アドレス]] = 0 + 0
| | | |■
| | |◇分岐終了◇
| | |▼ //上に回す(-1)。\cself[23]を選択しました。選択中の数値は、\cself[27]です
| | |■
| |◇分岐終了◇
| |▼ //開錠、キャンセル
| |■条件分岐(変数): 【1】CSelf20[キー入力受付] が 10と同じ 【2】CSelf20[キー入力受付] が 11と同じ
| |-◇分岐: 【1】 [ CSelf20[キー入力受付] が 10と同じ ]の場合↓
| | |▼ //開錠判定用番号作成(10桁)
| | |■変数操作: CSelf70[開錠判定] = CSelf43[ナンバー4] * 1
| | |■変数操作: CSelf70[開錠判定] += CSelf42[ナンバー3] * 10
| | |■変数操作: CSelf70[開錠判定] += CSelf41[ナンバー2] * 100
| | |■変数操作: CSelf70[開錠判定] += CSelf40[ナンバー1] * 1000
| | |■デバッグ文:pass_num = \cself[0]\nset_num = \cself[12]
| | |▼ //開錠判定 \cself[0]  \cself[70]
| | |■条件分岐(変数): 【1】CSelf0[暗証番号] が CSelf70[開錠判定]と同じ
| | |-◇分岐: 【1】 [ CSelf0[暗証番号] が CSelf70[開錠判定]と同じ ]の場合↓
| | | |■変数操作: CSelf70[開錠判定] = 1 + 0
| | | |■
| | |-◇上記以外
| | | |■変数操作: CSelf70[開錠判定] = 0 + 0
| | | |■
| | |◇分岐終了◇
| | |▼ 決定。
| | |■ループ中断
| | |■
| |-◇分岐: 【2】 [ CSelf20[キー入力受付] が 11と同じ ]の場合↓
| | |▼ //キャンセル
| | |■変数操作: CSelf70[開錠判定] = -1 + 0
| | |■ループ中断
| | |■
| |◇分岐終了◇

数字が実際に動いている部分。どこで切ったらいいかわからなかったため、とりあえずそのまま載せています。

「キー入力受付」でキー入力を待ち、4・6(左右キー)なら、選択しているパネル番号を変更。

2・8(上下キー)なら、パネルはそのままで数字を変更しています。それと同時に、上もしくは下向き矢印の画像を切り替えて、押されたのを演出します。

10(決定キー)が押されたら、数字があらかじめ設定してあるものと合っているかを確かめます。そして『0:失敗』もしくは『1:成功』を、『セルフ70:開錠判定』に入れておきます。

11(キャンセルキー)の場合、『セルフ70:開錠判定』に『‐1:キャンセル』を入れておきます。

決定キーとキャンセルキーの場合はループを中断します。それ以外の場合はループ続行し、決定キーかキャンセルキーが押されるまで、同じ処理を繰り返します。

▼ 枠を移動します

| |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] + 0
| |■ピクチャ移動:CSelf14[枠ピクチャ番号]  X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / 0(0)フレーム  / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

選択しているパネルの番号を元に、パネルの位置を移動しておきます。

▼ 上の段の矢印をもとに戻します

| |■変数操作: CSelf10[現在ピクチャ番号] = CSelf18[上矢印開始ピクチャ番号] + CSelf22[選択中パネル]
| |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] - CSelf87[パネル間隔Y]
| |■ピクチャ表示:CSelf10[現在ピクチャ番号] [中心]ファイル「SystemGraphic/パスコード_↑ボタン.png」 X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / 10(10)フレーム  / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

▼ 下の段の矢印を元に戻します

| |■変数操作: CSelf10[現在ピクチャ番号] = CSelf19[下矢印開始ピクチャ番号] + CSelf22[選択中パネル]
| |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] + CSelf87[パネル間隔Y]
| |■ピクチャ表示:CSelf10[現在ピクチャ番号] [中心]ファイル「SystemGraphic/パスコード_↓ボタン.png」 X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / 0(10)フレーム  / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

矢印が押されている場合があるので、元の凹んでいない画像に戻します。一瞬ではなく、10フレームかけて、ちょっとゆっくり戻ってくるようにしました。

▼ 数字描画

| |■変数操作: CSelf10[現在ピクチャ番号] = CSelf13[数字開始ピクチャ番号] + 0
| |■変数操作: CSelf10[現在ピクチャ番号] += CSelf22[選択中パネル] * 10
| |■変数操作: CSelf23[選択中アドレス] = CSelf22[選択中パネル] + 1600040
| |■変数操作: CSelf24[ループ用変数] = 0 + 0
| |■回数付きループ [ 10 ]回
| | |■変数操作: CSelf25[ループ用判定] = CSelf24[ループ用変数] - V[CSelf23[選択中アドレス]]
| | |▼ \cself[25]=\cself[24]-\cself[23]
| | |■条件分岐(変数): 【1】CSelf25[ループ用判定] が 5以上 【2】CSelf25[ループ用判定] が -5未満
| | |-◇分岐: 【1】 [ CSelf25[ループ用判定] が 5以上 ]の場合↓
| | | |■変数操作: CSelf25[ループ用判定] -= 10 + 0
| | | |■
| | |-◇分岐: 【2】 [ CSelf25[ループ用判定] が -5未満 ]の場合↓
| | | |■変数操作: CSelf25[ループ用判定] += 10 + 0
| | | |■
| | |◇分岐終了◇
| | |■変数操作: CSelf26[ループ用判定絶対値] 絶対値= CSelf25[ループ用判定] + 0
| | |■条件分岐(変数): 【1】CSelf26[ループ用判定絶対値] が 2以上
| | |-◇分岐: 【1】 [ CSelf26[ループ用判定絶対値] が 2以上 ]の場合↓
| | | |■変数操作: CSelf52[不透明度] = 0 + 0
| | | |■
| | |-◇上記以外
| | | |■変数操作: CSelf52[不透明度] = 255 + 0
| | | |■
| | |◇分岐終了◇
| | |■変数操作: CSelf25[ループ用判定] 下限= -1 + 0
| | |■変数操作: CSelf25[ループ用判定] 上限= 1 + 0
| | |■変数操作: CSelf30[現在X座標] = CSelf89[次パネルまでのX] * CSelf22[選択中パネル]
| | |■変数操作: CSelf30[現在X座標] += CSelf88[1つ目パネルX] + 0
| | |■変数操作: CSelf31[現在Y座標] = CSelf81[中心Y座標] + 0
| | |■変数操作: CSelf31[現在Y座標] -= CSelf87[パネル間隔Y] * CSelf25[ループ用判定]
| | |■ピクチャ移動:CSelf10[現在ピクチャ番号]  X:CSelf30[現在X座標] Y:CSelf31[現在Y座標] / CSelf60[インターバル](0)フレーム  / パターン 1 / 透 CSelf52[不透明度] / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
| | |■変数操作: CSelf10[現在ピクチャ番号] += 1 + 0
| | |■変数操作: CSelf24[ループ用変数] += 1 + 0
| | |■
| |◇ループここまで◇◇
| |■
|-◇上記以外
| |▼ //キーから指を離さない場合間隔を置く
| |■キー入力:このコモンEvセルフ変数20 /  4方向 決定(10) キャンセル(11)
| |■条件分岐(変数): 【1】CSelf20[キー入力受付] が 0と同じ
| |-◇分岐: 【1】 [ CSelf20[キー入力受付] が 0と同じ ]の場合↓
| | |■変数操作: CSelf61[インターバルカウンター] = 0 + 0
| | |■
| |-◇上記以外
| | |■変数操作: CSelf61[インターバルカウンター] -= 1 + 0
| | |■変数操作: CSelf20[キー入力受付] = 0 + 0
| | |▼ //1フレームウェイト
| | |■ウェイト:1 フレーム
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■
◇ループここまで◇◇

数字の操作部分です。「ダイヤル錠」コモン様をかなり参考にさせていただいています。特にインターバルカウンターにまつわる処理。これは独力では無理でした。

▼ 終了します

■ピクチャ消去:CSelf13[数字開始ピクチャ番号] ~ CSelf15[数字終了ピクチャ番号]  / 5(9)フレーム
■ピクチャ消去:CSelf11[開始ピクチャ番号] ~ CSelf12[終了ピクチャ番号]  / 6(10)フレーム

決定キーもしくはキャンセルキーが押されていたら、画像を消して終了します。

このとき、数字を早めに消し、枠などが続いて消えるようにしています。

こうしないと、矢印が残ってしまうケースがあります。(ディレイの関係で、『表示→消去』とならなければならないところが『消去→表示』になってしまうため)

まとめ

ウディタでパスコード(暗証番号)コモンイベントを作成する方法についてご紹介しました。いかがでしたでしょうか?

コモンイベントデータ配布

パスコードコモン(Spread Root)

↑ここで作ったコモンイベントはこちらにあります。ZIPファイルになっています。もしよろしければご参考にどうぞ。

画像加工について

[kanren id=”1482″]

↑画像については、こちら。

ここに書いてある、形に合う画像を用意していただければ、今回ご紹介したコモンイベントはそのまま使えます。ちょっと豪華なパスコード入力画面が実装できます。

コメント

トップへ戻る
タイトルとURLをコピーしました