WOLF RPGエディター(ウディタ)/演出・システム【サイトトップへ戻る】
■ゲーム中にマウスでツボを置く
(更新:2024/05/12)


ゲーム中にマウスでクリックしたマスにツボを置く処理を設定します。



以下の事が学べます。

●マウスポインタがあるマスのXY座標を調べる方法。
●クリックするとツボを設置し、ツボがある場合はツボを撤去。
●マップ上にあるツボの位置を保存&読み込み。
●自作システムの基本的な作り方。

ショートカット
■仕様の確認
■マウスポインタの位置に四角いカーソルを表示
■マウスでクリックするとツボを設置or撤去
■4種類の保存方法
■保存&読込「XY座標のみ」
■保存&読込「XY座標+チップID」
■保存&読込「全マス+チップID」
■保存&読込「全マス+二進法」
■可変DBでマップごとに保存
■マップ移動時に可変DBから読み込む
■補足


  
■仕様の確認

当ページの処理は、ツボを置くだけの処理なので、これだけでは何の意味もありません。

しかし処理構造が単純なので「自作システムを作ってみたい」と言ったウディタ初心者の方には、
ちょうど良いレベルになっているかと思います。



今回のイベント設定では、
少し追加して動作テスト、少し追加して動作テスト」を繰り返して、徐々にイベント処理を完成させています。

この「少し追加して動作テスト」の作り方は自作システムの基本的な作り方と言えます。

自作システムを作り慣れていない方から見ると、
「少し追加して動作テスト」と言った作り方は非効率的に思えるかもしれませんが、
しかし大量にイベントを設定してから動作テストを行って、バグが発生した時には、
どこにバグの原因があるのかが分かりにくくなり、その原因を特定するのに時間がかかる事があります。

また何度も動作テストを行う事で、修正した方が良い部分や追加した方が良い部分などが見つかる事があります。

今回は自作システムを制作する練習も兼ねているため、「少し追加して動作テスト」で制作していきます。



ツボの表示は「レイヤー3」に地形チップで表示します。

マップイベントでツボを表示する方法もありますが、
マップイベントの場合は事前にツボ用のマップイベントをマップ上に置いておく必要があるため、
今回は地形チップでツボを表示します。



ツボのチップ画像はチップID「889」を使用します。
違うチップ画像を使う場合は、そのチップIDを確認しておいてください。





1つのコモンイベントで「並列実行」で処理します。



ツボの位置はセルフ変数[5]文字列として保存され、[S]キーで保存、[D]キーで読み込みが実行されます。

保存の処理は全マスを調べる仕様なので、レイヤー3に最初からあるツボの位置も保存します。


▲トップへ戻る▲


  
■マウスポインタの位置に四角いカーソルを表示

マウスポインタがあるマスに四角いカーソルを表示します。





コモンイベントのセルフ変数
番号 名前 使用内容
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。

【変数の一覧を別ウィンドウで表示】



▼コモンイベントの設定

ウディタのサンプルゲームのコモンイベントに以下のイベントを追加設定してください。

【イベントコード表示】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

設定を終えたらテストプレイを実行して、カーソルがちゃんと表示されるかどうかを確認してください。



▼解説

0
1
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値

この処理では、マウスポインタの表示位置スクロール値をセルフ変数に代入しています。

スクロール値とは、マップの左上から現在表示されている画面の左上まで、
どれくらいスクロールしているのかをピクセル値で設定したものです。

スクロール値とマウスポインタの表示位置を合わせる事で、
マップの左上からマウスポインタまでのピクセル値を調べる事ができます。

下図は黄色がスクロール値(システム変数[104][105])を表示し、
水色がマウスポインタの位置(システム変数[71][72])を表示しています。



上図の場合、マップの左上からマウスポインタまでの距離は、
横が「88100188ピクセル」、
縦が「22474298ピクセル」になります。



2 ■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0

この処理で、マウスポインタがあるマスのXY座標(標準)が算出されます。

なお、XY座標(精密)で算出する場合は…
2 ■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ
と設定してください。



3
4
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ

この処理により、
マップの左上からマウスポインタがあるマスの左上までのピクセル値がセルフ変数[12][13]に代入されます。



XY座標(精密)の場合は…
3
4
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX]〜CSelf13[カーソルY] /= 2 + 0
と1行追加してください。



5
6
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0

マップの左上からのピクセル値からスクロール値を減算する事でセルフ変数[12][13]には、
現在映っているゲーム画面の左上からマウスポインタがあるマスの左上までのピクセル値が算出されます。



7 ■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

マウスポインタがあるマスに四角いカーソルを表示します。

イベントコマンド【ピクチャ】の初期設定からの変更箇所は以下のとおりです。

表示タイプ [4]お手軽ウィンドウ
ファイル <SQUARE>
生成サイズ 9000118
1600012
1600013
不透明度 120




▲トップへ戻る▲


  
■マウスでクリックするとツボを設置or撤去

マスをクリックするとツボを設置し、ツボがある場合はツボを撤去します。





レイヤー3に何らかのチップが設定されている場合は、ツボは設置しません。
また通行不可になっているマスもツボは設置しません。

▼置けないマスはカーソルを赤く表示




▼コモンイベントのセルフ変数

■マウスポインタの位置に四角いカーソルを表示から新たに追加された変数は緑色で表示。

コモンイベントのセルフ変数
番号 名前 使用内容
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。
20 クリック クリックしているかどうかを取得。
21 クリックX座標 クリックしたX座標を設定。
22 クリックY座標 クリックしたY座標を設定。
23 チップID レイヤー3のチップIDを取得。
24 通行判定 通行できる場合は「0」、できない場合は「1」を取得。

【変数の一覧を別ウィンドウで表示】



■マウスポインタの位置に四角いカーソルを表示から追加されたイベントコマンドは黄色で表示。

【イベントコード表示(黄色で表示された追加分のみ)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

43
44
45

46
47
48
49
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム


設定を終えたらテストプレイを実行して、ツボの設置&撤去を確認してください。



▼解説

8 ■変数操作+: CSelf20[クリック] = マウス左クリック状態

マウスのボタンが押されているかどうかをセルフ変数[20]に取得します。

今回はドラッグ移動による複数マスへの連続設定も可能するため、
セルフ変数[20]が1以上=ツボの設置or撤去」とします。



9 ■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)

マウスポインタがあるマスのレイヤー3のチップIDをセルフ変数[23]に取得します。

XYの設定は、変数呼び出し値「1600010」「1600011」で設定します。



10 ■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)

クリックしたマスが通行できるマスかどうかを調べます。
通行不可のチップやマップイベントがあって、
通行できないマス(セルフ変数[24]=1)である場合は、ツボが置けないようにします。



11


12
13
14
15


16
17
18
19


20
21
22
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇

ツボのチップID(889)があった場合は、そのまま条件分岐を通過します。

レイヤー3にツボ以外のチップID(1以上)があった場合と通行不可のマスであった場合は、
カーソルの表示を赤色に変えて、セルフ変数[20]の値を「0(クリックしていない)」に変えます。

イベントコマンド【ピクチャ】(15行目、19行目)の初期設定からの変更箇所は以下のとおりです。

表示タイプ [4]お手軽ウィンドウ
ファイル <SQUARE>
生成サイズ 9000118 9000118
1600012
1600013
不透明度 120
カラー 100 0 0





23
24
25
26
27
28
■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇

クリックしていない場合は、
セルフ変数[21][22]を「-1(二重設定の防止を解除)」にしてから、ここで処理を終了させます。



29
30
31
32
33
34
35
36
37
38
39
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0

クリックしてツボの表示有無を変更したマスカーソルがある現在のマス同じマス座標である場合は、
ここで処理を終了させます。

ここの終了させる設定が無い場合は、同じマス座標をクリックし続けると、
ツボの設置と撤去が高速で何度も実行されてしまう不具合が発生します。

クリックを開始した時やドラッグ移動で別のマスへマウスポインタを移動させた時には、
ここの条件分岐を通過し、現在マウスポインタがあるマス座標をセルフ変数[21][22]に保存します。



40
41
42

43
44
45

46
47
48
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

クリックしたマスに、
ツボのチップ(チップID[889])が設定されている場合は透明なチップ(チップID[0])を設定し、
透明なチップが設定されている場合はツボのチップを設定します。

そしてSEを演奏します。

イベントコマンド【マップチップ上書き】の設定は以下のとおりです。

なお、X座標には「1600010」、Y座標には「1600011」を設定してください。

▼透明なチップ(チップID[0])


▼ツボ(チップID[889])



▲トップへ戻る▲


  
■4種類の保存方法

ツボの設定位置を保存する処理方法は4種類用意しました。

単にツボの位置を保存するだけでしたら「XY座標のみ」があれば良いですが、
複数のチップIDを保存したい」「別の保存方法の作り方も知りたい
などを求める方のために、他の保存方法も紹介しています。

設定する場合は、どれか1つを選択してください。

▼左側の緑の文字をクリックするとその説明部分までジャンプします。
XY座標のみ 1種類のチップIDのXY座標を保存します。
保存するチップがマップ内の5分の1以上のマスにある場合は、
全マス+二進法」の方が保存容量が少なくなります。
100×100マスに全てツボを置いた場合の保存容量:76.1 KB
XY座標+チップID レイヤー3に設置してある全てのチップのXY座標とチップIDを保存します。
レイヤー3にあまりチップが設定されていない場合は有効的ですが、
マップ内の3分の1以上のマスにチップが設置してある場合は、
全マス+チップID」の方が保存容量が少なくなります。
100×100マスに全てツボを置いた場合の保存容量:125 KB
全マス+チップID レイヤー3の全てのマスのチップIDを保存します。
同じチップIDが続いた時には「前と同じチップを設定」と処理し、
保存容量を抑えるように処理します。
そのため、横並びに同じチップIDが続くと保存容量が少なくなり、
横並びに違うチップIDが続くと保存容量が多くなります。
100×100マスに全てツボを置いた場合の保存容量:19.5 KB
全マス+二進法 レイヤー3の全てのマスを対象に、1種類のチップの設置有無を保存します。
チップを「有る=1」「無い=0」で処理し、
30個のチップの情報を1つの値(10桁)にまとめて保存します。
大量にツボが置かれている場合は、この保存方法が有効的ですが、
少量のツボを保存する場合は、あまり効果的ではありません。
また文字列タイプの変数ではなく、
数値タイプの変数で保存した方が保存容量が少なくなります。
処理構造としては、4つの処理方法の中で最も難しいです。
100×100マスに全てツボを置いた場合の保存容量:3.91 KB

文字列は文字数が多くなると、文字列を操作する時に処理落ちが発生しやすくなります。

処理落ちはパソコンの処理能力で左右するので、制作しているパソコンでは問題が無くても、
別のパソコンで処理する時には処理落ちが発生する場合があります。

そのため、出来る限り文字数は少ない方が良いです。


▲トップへ戻る▲


  
■保存&読込「XY座標のみ」

レイヤー3にあるツボ(チップID[889])の設置情報をセルフ変数[5](文字列)に保存します。



セルフ変数[5]には、ツボが置いてあるXY座標を保存します。

文字列の設定は、例えば「X2、Y6」を保存する場合は…
2
6
と2行に分けて保存します。

2個目のツボ(X13、Y8)を保存する場合は…
2
6
13
8
と3〜4行目にXY座標を保存します。



保存データを読み込む場合は、まずレイヤー3にあるツボのチップを全て消去します。

そしてセルフ変数[5]の情報をコピーしたセルフ変数[6]を使い…
X座標を読み取り→Y座標を読み取り→ツボを配置
の処理を文字列が無くなるまで繰り返します。



■マウスでクリックするとツボを設置or撤去から新たに追加された変数は緑色で表示。

コモンイベントのセルフ変数
番号 名前 使用内容
5 保存データ ツボがあったXY座標の情報を保存。
6 データコピー セリフ変数[5]の情報をコピーし、読み込みの処理で使用。
7 1行切り出し用 セリフ変数[6]の1行を切り出す時に使用。
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。
20 クリック クリックしているかどうかを取得。
21 クリックX座標 クリックしたX座標を設定。
22 クリックY座標 クリックしたY座標を設定。
23 チップID レイヤー3のチップIDを取得。
24 通行判定 通行できる場合は「0」、できない場合は「1」を取得。
30 [S]キー [S]キーのキーコード(131)を取得。
31 [D]キー [D]キーのキーコード(132)を取得。
32 二度押し防止 キーを押し続けても1回だけ実行する処理で使用。
33 保存時の横マス数 保存&読み込みを行うマップの横マス数を取得。
34 保存時の縦マス数 保存&読み込みを行うマップの縦マス数を取得。
35 保存X座標 保存&読み込み時にX座標の設定で使用。
36 保存Y座標 保存&読み込み時にY座標の設定で使用。
37 保存チップID 保存&読み込み時にチップIDの設定で使用。

【変数の一覧を別ウィンドウで表示】



■マウスでクリックするとツボを設置or撤去から追加されたイベントコマンドは黄色緑色で表示。

【イベントコード表示(黄色で表示された追加分のみ)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

80
81
82

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

152
153
154

155
156
157
158
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

設定を終えたらテストプレイを実行して、適当にツボを置いて[S]キーを押し、
さらに適当にツボを置いてから[D]キーを押し、
[S]キーを押した時のツボの並びになっているかどうかを確認してください。



▼解説

23
24
25

26
27
28
29
30

64
65
66
67
68
69
70

126
127
128
129
130
131
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

[S]キーが押されている時には「保存処理」を実行し、
[D]キーが押されている時には「読み込み処理」を実行します。

セルフ変数[32]二度押し防止用であり…
セルフ変数[32]=0 キーを押していない(保存や読み込みの処理が実行可能
セルフ変数[32]=1 キーを押し続けている(保存や読み込みの処理が実行不可
となっています。

そのため、キーを押すと「セルフ変数[32]=1」になり、
キーを押し続けても連続的に保存や読み込みが実行されません。

そして両方のキーを押されていない時(◇上記以外)には「セルフ変数[32]=0」になり、
再びキーを押すと1回だけ処理が実行できるようになります。



31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

マップの左上から右に向かって1マスずつツボ(チップID[889])があるかどうかをチェックし、
もしもツボがあった場合は、ツボがあったX座標、Y座標をセルフ変数[5]に保存します。

コマンド処理数が「4900000以上」の場合は「ウェイト[1]」を実行し、
500万回超えのエラーが発生しないようにしています。



71
72
73
74
75
76
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇

保存を実行すると必ずセルフ変数[33]が「1以上」になるため、
セルフ変数[33]が「0」の場合は保存が実行されていない状態であり、
この場合は読み込み処理を中断します。



77
78
79

80
81
82

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇

保存データがある場合は、
マップの左上から右に向かって1マスずつツボ(チップID[889])があるかどうかをチェックし、
もしもツボがあった場合は消去(チップID[0]を設定)します。



104
105
106
107
108
109
110
111
112
113
114
115

116
117
118
119
120
121
122
123
124
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

セルフ変数[5]の保存データをセルフ変数[6]にコピーして、
セルフ変数[6]から文字列(X座標、Y座標)をセルフ変数[7]に1行切り取り、
その切り取った情報を基にツボのチップを設置します。

【変数操作】セルフ変数[7]の設定は、変数呼び出し値「1600007」で設定してください。


セルフ変数[6]の文字列が何も無くなったら、ループ処理を終了させます。


▼「可変DBでマップごとに保存」が書かれている所までジャンプ▼

▲トップへ戻る▲


  
■保存&読込「XY座標+チップID」

レイヤー3にあるチップID(1以上)の設置情報をセルフ変数[5](文字列)に保存します。



セルフ変数[5]には、チップIDとXY座標を保存します。

文字列の設定は、例えば「X2、Y6、チップID[889]」を保存する場合は…
2
6
889
と3行に分けて保存します。

2個目のチップ(X13、Y8、チップID[891])を保存する場合は…
2
6
889
13
8
891
と4〜6行目にXY座標を保存します。



保存データを読み込む場合は、まずレイヤー3にある全てのチップを消去します。

そしてセルフ変数[5]の情報をコピーしたセルフ変数[6]を使い…
X座標を読み取り→Y座標を読み取り→チップIDを読み取り→チップ配置
の処理を文字列が無くなるまで繰り返します。



■マウスでクリックするとツボを設置or撤去から新たに追加された変数は緑色で表示。

コモンイベントのセルフ変数
番号 名前 使用内容
5 保存データ ツボがあったXY座標の情報を保存。
6 データコピー セリフ変数[5]の情報をコピーし、読み込みの処理で使用。
7 1行切り出し用 セリフ変数[6]の1行を切り出す時に使用。
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。
20 クリック クリックしているかどうかを取得。
21 クリックX座標 クリックしたX座標を設定。
22 クリックY座標 クリックしたY座標を設定。
23 チップID レイヤー3のチップIDを取得。
24 通行判定 通行できる場合は「0」、できない場合は「1」を取得。
30 [S]キー [S]キーのキーコード(131)を取得。
31 [D]キー [D]キーのキーコード(132)を取得。
32 二度押し防止 キーを押し続けても1回だけ実行する処理で使用。
33 保存時の横マス数 保存した時のマップの横マス数を取得。
34 保存時の縦マス数 保存した時のマップの縦マス数を取得。
35 保存X座標 保存&読み込み時にX座標の設定で使用。
36 保存Y座標 保存&読み込み時にY座標の設定で使用。
37 保存チップID 保存&読み込み時にチップIDの設定で使用。

【変数の一覧を別ウィンドウで表示】



■マウスでクリックするとツボを設置or撤去から追加されたイベントコマンドは黄色緑色で表示。

【イベントコード表示(黄色で表示された追加分のみ)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

78
79
80
81
82
83
84
85
86
87
88
89
90
91

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

128
129
130

131
132
133
134
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 1 以上
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 1 以上 ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n\cself[37]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■マップチップ上書き: [ レイヤー 3 / X 0 / Y 0 ] から[ 横CSelf33[保存時の横マス数] /
           縦CSelf34[保存時の縦マス数] ] をチップ[ 0 ]で上書き
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf37[保存チップID] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ CSelf37[保存チップID] ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

設定を終えたらテストプレイを実行して、適当にツボを置いて[S]キーを押し、
さらに適当にツボを置いてから[D]キーを押し、
[S]キーを押した時のツボの並びになっているかどうかを確認してください。

ツボの保存と読み込みが問題無く出来ていれば、
ツボ以外のチップも問題なく保存&読み込みが実行されます。



▼解説

23
24
25

26
27
28
29
30

64
65
66
67
68
69
70

102
103
104
105
106
107
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

[S]キーが押されている時には「保存処理」を実行し、
[D]キーが押されている時には「読み込み処理」を実行します。

セルフ変数[32]二度押し防止用であり…
セルフ変数[32]=0 キーを押していない(保存や読み込みの処理が実行可能
セルフ変数[32]=1 キーを押し続けている(保存や読み込みの処理が実行不可
となっています。

そのため、キーを押すと「セルフ変数[32]=1」になり、
キーを押し続けても連続的に保存や読み込みが実行されません。

そして両方のキーを押されていない時(◇上記以外)には「セルフ変数[32]=0」になり、
再びキーを押すと1回だけ処理が実行できるようになります。



31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 1 以上
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 1 以上 ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n\cself[37]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

マップの左上から右に向かって1マスずつチップIDがあるかどうかをチェックし、
「チップID=1以上」の場合は、セルフ変数[5]にX座標、Y座標、チップIDを保存します。

コマンド処理数が「4900000以上」の場合は「ウェイト[1]」を実行し、
500万回超えのエラーが発生しないようにしています。



71
72
73
74
75
76
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇

保存を実行すると必ずセルフ変数[33]が「1以上」になるため、
セルフ変数[33]が「0」の場合は保存が実行されていない状態であり、
この場合は読み込み処理を中断します。



77 ||■マップチップ上書き: [ レイヤー 3 / X 0 / Y 0 ] から[ 横CSelf33[保存時の横マス数] /
           縦CSelf34[保存時の縦マス数] ] をチップ[ 0 ]で上書き

レイヤー3の全てのマスにチップID[0]を設定して、何もチップが設定されていない状態にします。





78
79
80
81
82
83
84
85
86
87
88
89
90
91

92
93
94
95
100
101
102
103
104
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf37[保存チップID] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ CSelf37[保存チップID] ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

セルフ変数[5]の保存データをセルフ変数[6]にコピーして、
セルフ変数[6]から文字列(X座標、Y座標、チップID)をセルフ変数[7]に1行切り取り、
その切り取った情報を基にチップを設置します。

【変数操作】セルフ変数[7]の設定は、変数呼び出し値「1600007」で設定してください。


セルフ変数[6]の文字列が何も無くなったら、ループ処理を終了させます。


▼「可変DBでマップごとに保存」が書かれている所までジャンプ▼

▲トップへ戻る▲


  
■保存&読込「全マス+チップID」

マップ上の全てのマスのレイヤー3を調べ、
チップID(1以上)の情報をセルフ変数[5](文字列)に保存します。



マップの左上から右に向かって1マスずつチップIDを保存していきます。

例えば…
889
0
889
891
0
889
と言った場合は…
889
0
889
891
0
889
←「X0 Y0」のチップID
←「X1 Y0」のチップID
←「X2 Y0」のチップID
←「X3 Y0」のチップID
←「X4 Y0」のチップID
←「X5 Y0」のチップID
と言った設定になります。


889
889
0
0
0
889
と言ったように同じチップIDが続いた場合は…
889

0


889
と言った感じに、前と同じチップIDだった場合は改行のみにして「改行のみ=前と同じ」と設定します。

改行のみ=前と同じ」のように設定する事で、保存容量(文字数)を減らす効果があります。



保存データを読み込む場合は、セルフ変数[5]の情報をコピーしたセルフ変数[6]を使い…
チップIDを読み取り→チップ配置
の処理を全てのマスで行います。



■マウスでクリックするとツボを設置or撤去から新たに追加された変数は緑色で表示。

コモンイベントのセルフ変数
番号 名前 使用内容
5 保存データ ツボがあったXY座標の情報を保存。
6 データコピー セリフ変数[5]の情報をコピーし、読み込みの処理で使用。
7 1行切り出し用 セリフ変数[6]の1行を切り出す時に使用。
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。
20 クリック クリックしているかどうかを取得。
21 クリックX座標 クリックしたX座標を設定。
22 クリックY座標 クリックしたY座標を設定。
23 チップID レイヤー3のチップIDを取得。
24 通行判定 通行できる場合は「0」、できない場合は「1」を取得。
30 [S]キー [S]キーのキーコード(131)を取得。
31 [D]キー [D]キーのキーコード(132)を取得。
32 二度押し防止 キーを押し続けても1回だけ実行する処理で使用。
33 保存時の横マス数 保存&読み込みを行うマップの横マス数を取得。
34 保存時の縦マス数 保存&読み込みを行うマップの縦マス数を取得。
35 保存X座標 保存&読み込み時にX座標の設定で使用。
36 保存Y座標 保存&読み込み時にY座標の設定で使用。
37 保存チップID 保存&読み込み時にチップIDの設定で使用。
38 保存前のチップID 保存時に1つ前に読み取ったチップIDを保存。

【変数の一覧を別ウィンドウで表示】



■マウスでクリックするとツボを設置or撤去から追加されたイベントコマンドは黄色緑色で表示。

【イベントコード表示(黄色で表示された追加分のみ)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

87
88
89
90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

143
144
145

146
147
148
149
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■変数操作: CSelf38[保存前のチップID] = -1 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が CSelf38[保存前のチップID] 以外
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が CSelf38[保存前のチップID] 以外 ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[37]\n"
||||■
|||-◇上記以外
||||■文字列操作:CSelf5[保存データ] += "\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf38[保存前のチップID] = CSelf37[保存チップID] + 0
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■条件分岐(文字): 【1】 CSelf7[1行切り出し用]が "" 以外
           【2】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf7[1行切り出し用] "" 以外 ]の場合↓
||||■変数操作: CSelf37[保存チップID] = CSelf7[1行切り出し用] + 0
||||■
|||-◇分岐: 【2】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ CSelf37[保存チップID] ]で上書き
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

設定を終えたらテストプレイを実行して、適当にツボを置いて[S]キーを押し、
さらに適当にツボを置いてから[D]キーを押し、
[S]キーを押した時のツボの並びになっているかどうかを確認してください。

ツボの保存と読み込みが問題無く出来ていれば、
ツボ以外のチップも問題なく保存&読み込みが実行されます。



▼解説

23
24
25

26
27
28
29
30

69
70
71
72
73
74
75

117
118
119
120
121
122
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

[S]キーが押されている時には「保存処理」を実行し、
[D]キーが押されている時には「読み込み処理」を実行します。

セルフ変数[32]二度押し防止用であり…
セルフ変数[32]=0 キーを押していない(保存や読み込みの処理が実行可能
セルフ変数[32]=1 キーを押し続けている(保存や読み込みの処理が実行不可
となっています。

そのため、キーを押すと「セルフ変数[32]=1」になり、
キーを押し続けても連続的に保存や読み込みが実行されません。

そして両方のキーを押されていない時(◇上記以外)には「セルフ変数[32]=0」になり、
再びキーを押すと1回だけ処理が実行できるようになります。



31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■変数操作: CSelf38[保存前のチップID] = -1 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が CSelf38[保存前のチップID] 以外
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が CSelf38[保存前のチップID] 以外 ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[37]\n"
||||■
|||-◇上記以外
||||■文字列操作:CSelf5[保存データ] += "\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf38[保存前のチップID] = CSelf37[保存チップID] + 0
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

マップの左上から右に向かって1マスずつチップIDを取得し、
前のマスと異なるチップIDである場合は、チップIDをセルフ変数[5]に保存します。
前のマスと同じチップIDである場合は、チップIDは設定せず、改行のみをセルフ変数[5]に保存します。

コマンド処理数が「4900000以上」の場合は「ウェイト[1]」を実行し、
500万回超えのエラーが発生しないようにしています。



76
77
78
79
80
81
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇

保存を実行すると必ずセルフ変数[33]が「1以上」になるため、
セルフ変数[33]が「0」の場合は保存が実行されていない状態であり、
この場合は読み込み処理を中断します。



82
83
84
85
86

87
88
89
90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■条件分岐(文字): 【1】 CSelf7[1行切り出し用]が "" 以外
           【2】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf7[1行切り出し用] "" 以外 ]の場合↓
||||■変数操作: CSelf37[保存チップID] = CSelf7[1行切り出し用] + 0
||||■
|||-◇分岐: 【2】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ CSelf37[保存チップID] ]で上書き
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

セルフ変数[5]の保存データをセルフ変数[6]にコピーして、
セルフ変数[6]から文字列(チップID)をセルフ変数[7]に1行切り取り、
その切り取ったチップIDでチップを設置します。

セルフ変数[6]から切り取った1行が空欄の場合は、
1つ前のマスと同じチップIDでチップを設置します。

【変数操作】セルフ変数[7]の設定は、変数呼び出し値「1600007」で設定してください。


保存した全てのマスを処理したら、ループ処理を終了させます。


▼「可変DBでマップごとに保存」が書かれている所までジャンプ▼

▲トップへ戻る▲


  
■保存&読込「全マス+二進法」

マップ上の全てのマスのレイヤー3を調べ、
ツボ(チップID[973])の設置情報をセルフ変数[5](文字列)に保存します。



二進法とは「101001」と言った「1」と「0」の情報で保存するもので、
今回は「1=ツボ有り」「0=ツボ無し」となります。

実際にセルフ変数[5]に保存する時には、
30マス分の情報(二進法)10桁(0〜1073741823)(十進法)に変換してから保存します。

30マスには以下の数値を割り当てて、ツボがあった時にはその数値を加算し、
30マス分の合計値をセルフ変数[5]に保存します。

マス 割り当て値
1マス目 536870912
2マス目 268435456
3マス目 134217728
4マス目 67108864
5マス目 33554432
6マス目 16777216
7マス目 8388608
8マス目 4194304
9マス目 2097152
10マス目 1048576
マス 割り当て値
11マス目 524288
12マス目 262144
13マス目 131072
14マス目 65536
15マス目 32768
16マス目 16384
17マス目 8192
18マス目 4096
19マス目 2048
20マス目 1024
マス 割り当て値
21マス目 512
22マス目 256
23マス目 128
24マス目 64
25マス目 32
26マス目 16
27マス目 8
28マス目 4
29マス目 2
30マス目 1

例えば「16マス目(16384)」「21マス目(512)」「26マス目(16)」にツボがあった場合は…
ツボがあったマス(加算する値) 保存する値
16マス目(16384)21マス目(512)26マス目(16) 16912
となり、セルフ変数[5]には「16912」が保存されます。

30マス分の処理が終わったら、次の30マス分の処理を行います。
ツボがあったマス(加算する値) 保存する値
16マス目(16384)21マス目(512)26マス目(16)
13マス目(131072)20マス目(1024)25マス目(32)29マス目(2)
16912
132130



保存データを読み込む場合は、セルフ変数[5]の情報をコピーしたセルフ変数[6]を使い…
十進法の数値(0〜1073741823)を読み取り→30マス分のツボを配置
の処理を全てのマスで行います。



文字列タイプの変数よりも、数値タイプの変数で保存した方が保存容量の削減になります。



■マウスでクリックするとツボを設置or撤去から新たに追加された変数は緑色で表示。

コモンイベントのセルフ変数
番号 名前 使用内容
5 保存データ ツボがあったXY座標の情報を保存。
6 データコピー セリフ変数[5]の情報をコピーし、読み込みの処理で使用。
7 1行切り出し用 セリフ変数[6]の1行を切り出す時に使用。
10 X座標 マウスポインタがあるマスのX座標(標準)を設定。
11 Y座標 マウスポインタがあるマスのY座標(標準)を設定。
12 カーソルX マウスポインタがあるマスの左上のX表示位置(ピクセル値)を設定。
13 カーソルY マウスポインタがあるマスの左上のY表示位置(ピクセル値)を設定。
20 クリック クリックしているかどうかを取得。
21 クリックX座標 クリックしたX座標を設定。
22 クリックY座標 クリックしたY座標を設定。
23 チップID レイヤー3のチップIDを取得。
24 通行判定 通行できる場合は「0」、できない場合は「1」を取得。
30 [S]キー [S]キーのキーコード(131)を取得。
31 [D]キー [D]キーのキーコード(132)を取得。
32 二度押し防止 キーを押し続けても1回だけ実行する処理で使用。
33 保存時の横マス数 保存&読み込みを行うマップの横マス数を取得。
34 保存時の縦マス数 保存&読み込みを行うマップの縦マス数を取得。
35 保存X座標 保存&読み込み時にX座標の設定で使用。
36 保存Y座標 保存&読み込み時にY座標の設定で使用。
37 保存チップID 保存&読み込み時にチップIDの設定で使用。
38 保存設定値 保存&読み込み時に十進法の設定値を保存。
39 保存合計値 保存&読み込み時に十進法の合計値を保存。

【変数の一覧を別ウィンドウで表示】



■マウスでクリックするとツボを設置or撤去から追加されたイベントコマンドは黄色緑色で表示。

【イベントコード表示(黄色で表示された追加分のみ)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

107

108
109

110
111
112

113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176

177
178
179

180
181
182
183
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作: CSelf38[保存設定値] = 536870912 + 0
|||■変数操作: CSelf39[保存合計値] = 0 + 0
|||■回数付きループ [ 30 ]回
||||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
||||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
||||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
|||||■変数操作: CSelf39[保存合計値] += CSelf38[保存設定値] + 0
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf35[保存X座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
||||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
|||||■変数操作: CSelf35[保存X座標] = 0 + 0
|||||■変数操作: CSelf36[保存Y座標] += 1 + 0
|||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||||■ループ中断
||||||■
|||||◇分岐終了◇
|||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||||■ウェイト:1 フレーム
||||||■
|||||◇分岐終了◇
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 CSelf38[保存設定値] が 1 と同じ
||||-◇分岐: 【1】 [ CSelf38[保存設定値] が 1 と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf38[保存設定値] /= 2 + 0
||||■
|||◇ループここまで◇◇
|||■文字列操作:CSelf5[保存データ] += "\cself[39]\n"
|||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■条件分岐(文字): 【1】 CSelf5[保存データ]が "" と同じ
||-◇分岐: 【1】 [ CSelf5[保存データ] "" と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf39[保存合計値] = CSelf7[1行切り出し用] + 0
|||■変数操作: CSelf38[保存設定値] = 536870912 + 0
|||■回数付きループ [ 30 ]回
||||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
||||■条件分岐(変数): 【1】 CSelf39[保存合計値] が CSelf38[保存設定値] 以上
           【2】 CSelf37[保存チップID] が 889 と同じ
||||-◇分岐: 【1】 [ CSelf39[保存合計値] が CSelf38[保存設定値] 以上 ]の場合↓
|||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||||■
||||-◇分岐: 【2】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
|||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf35[保存X座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
||||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
|||||■変数操作: CSelf35[保存X座標] = 0 + 0
|||||■変数操作: CSelf36[保存Y座標] += 1 + 0
|||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||||■ループ中断
||||||■
|||||◇分岐終了◇
|||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||||■ウェイト:1 フレーム
||||||■
|||||◇分岐終了◇
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 CSelf38[保存設定値] が 1 と同じ
||||-◇分岐: 【1】 [ CSelf38[保存設定値] が 1 と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf39[保存合計値] %= CSelf38[保存設定値] + 0
||||■変数操作: CSelf38[保存設定値] /= 2 + 0
||||■
|||◇ループここまで◇◇
|||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

設定を終えたらテストプレイを実行して、適当にツボを置いて[S]キーを押し、
さらに適当にツボを置いてから[D]キーを押し、
[S]キーを押した時のツボの並びになっているかどうかを確認してください。



▼解説

23
24
25

26
27
28
29
30

81
82
83
84
85
86
87

151
152
153
154
155
156
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■〜表示省略〜
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇

[S]キーが押されている時には「保存処理」を実行し、
[D]キーが押されている時には「読み込み処理」を実行します。

セルフ変数[32]二度押し防止用であり…
セルフ変数[32]=0 キーを押していない(保存や読み込みの処理が実行可能
セルフ変数[32]=1 キーを押し続けている(保存や読み込みの処理が実行不可
となっています。

そのため、キーを押すと「セルフ変数[32]=1」になり、
キーを押し続けても連続的に保存や読み込みが実行されません。

そして両方のキーを押されていない時(◇上記以外)には「セルフ変数[32]=0」になり、
再びキーを押すと1回だけ処理が実行できるようになります。



31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作: CSelf38[保存設定値] = 536870912 + 0
|||■変数操作: CSelf39[保存合計値] = 0 + 0
|||■回数付きループ [ 30 ]回
||||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
||||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
||||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
|||||■変数操作: CSelf39[保存合計値] += CSelf38[保存設定値] + 0
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf35[保存X座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
||||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
|||||■変数操作: CSelf35[保存X座標] = 0 + 0
|||||■変数操作: CSelf36[保存Y座標] += 1 + 0
|||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||||■ループ中断
||||||■
|||||◇分岐終了◇
|||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||||■ウェイト:1 フレーム
||||||■
|||||◇分岐終了◇
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 CSelf38[保存設定値] が 1 と同じ
||||-◇分岐: 【1】 [ CSelf38[保存設定値] が 1 と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf38[保存設定値] /= 2 + 0
||||■
|||◇ループここまで◇◇
|||■文字列操作:CSelf5[保存データ] += "\cself[39]\n"
|||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

30回のループの中でツボを有無を調べます。
この30回のループは、全てのマスを調べ終わるとループ回数を残した状態でも強制的に終了します。

30回のループ内では、セルフ変数[38]の値が「536870912」から始まり、
マスを進めるごとに数値が半分になっていきます。

ツボがあったら、その時のセルフ変数[38]の値セルフ変数[39]に加算します。

30回のループが終了すると、30マス分のセルフ変数[39]の値をセルフ変数[5]に設定します。

コマンド処理数が「4900000以上」の場合は「ウェイト[1]」を実行し、
500万回超えのエラーが発生しないようにしています。

「536870912」を設定する場合は、「データを呼ばない」にチェックを入れてください。




88
89
90
91
92
93
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇

保存を実行すると必ずセルフ変数[33]が「1以上」になるため、
セルフ変数[33]が「0」の場合は保存が実行されていない状態であり、
この場合は読み込み処理を中断します。



94
95
96
97
98
99
100
101
102
103
104
105
106

107

108
109

110
111
112

113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf39[保存合計値] = CSelf7[1行切り出し用] + 0
|||■変数操作: CSelf38[保存設定値] = 536870912 + 0
|||■回数付きループ [ 30 ]回
||||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
||||■条件分岐(変数): 【1】 CSelf39[保存合計値] が CSelf38[保存設定値] 以上
           【2】 CSelf37[保存チップID] が 889 と同じ
||||-◇分岐: 【1】 [ CSelf39[保存合計値] が CSelf38[保存設定値] 以上 ]の場合↓
|||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||||■
||||-◇分岐: 【2】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
|||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf35[保存X座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
||||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
|||||■変数操作: CSelf35[保存X座標] = 0 + 0
|||||■変数操作: CSelf36[保存Y座標] += 1 + 0
|||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||||■ループ中断
||||||■
|||||◇分岐終了◇
|||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||||■ウェイト:1 フレーム
||||||■
|||||◇分岐終了◇
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 CSelf38[保存設定値] が 1 と同じ
||||-◇分岐: 【1】 [ CSelf38[保存設定値] が 1 と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■変数操作: CSelf39[保存合計値] %= CSelf38[保存設定値] + 0
||||■変数操作: CSelf38[保存設定値] /= 2 + 0
||||■
|||◇ループここまで◇◇
|||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
|||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム

セルフ変数[5]の保存データをセルフ変数[6]にコピーして、
セルフ変数[6]から文字列(チップID)をセルフ変数[7]に1行切り取り、セルフ変数[39]へ代入し、
30回のループ処理を実行します。
この30回のループは、全てのマスを調べ終わるとループ回数を残した状態でも強制的に終了します。

30回のループ内では、セルフ変数[38]の値が「536870912」から始まり、
セルフ変数[39]の値がセルフ変数[38]の値以上の場合は、ツボを設置します。

そしてセルフ変数[39]の値は、セルフ変数[38]の値で余剰され、次のマスの処理を行います。

30回のループが終了すると、まだ処理するマスが残っている場合は、次の30マスの処理を実行します。

【変数操作】セルフ変数[7]の設定は、変数呼び出し値「1600007」で設定してください。




▲トップへ戻る▲


  
■可変DBでマップごとに保存

今までの処理では、セルフ変数[5]にチップの情報を保存する仕様だったため、
他のマップへ移動しても同じ保存データを使う事になります。

もしもマップごとに異なる保存データを残す場合は、マップごとに保存する変数を変える必要があります。

そこで可変DB[チップデータ]を用意し、マップIDごとに保存データを変える処理を設定します。

※設定手順は全ての保存方法で同じです。



*注意点*

保存するマップが多ければ多いほど、セーブデータの容量が増えていきます。

特に全てのマスを保存する仕様の場合は、
マップサイズが大きいと1つのマップの保存だけでもかなりの保存容量が必要になります。

セーブデータの容量が大きくなると、セーブやロードの画面表示が遅くなるなどの問題が発生するため、
出来る限りセーブデータの保存容量は少なくした方が良いです。



▼可変DBの準備

可変DBが画面を開き、[タイプ数の設定]をクリックして、タイプ数を増やしてください。





画面左上で未使用のタイプを選択した上で、[タイプの内容設定]をクリックして、
タイプの設定画面にて、以下のように設定してください。

タイプ名 チップデータ
項目名0 文字列 保存データ  
項目名1 変数 保存時の横マス数 0



設定が終わりましたら、画面下の[OK]をクリックし、さらに可変DBの画面下の[OK]もクリックしてください。

※データ数は「1」のままで良いです。



▼コモンイベントのセルフ変数

以下のセルフ変数を新たに追加します。

番号 名前 使用内容
40 マップID 主人公がいるマップIDを取得。

【変数の一覧を別ウィンドウで表示】



▼コモンイベントの設定

※保存方法によって行数が変わるため、行数の表示はありません。

保存処理の…
||■デバッグ文:保存完了
がある所に以下のイベントを追加してください。

【イベントコード表示(黄色で表示された追加分のみ)】

||■変数操作+: CSelf40[マップID] = 現在のマップID
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ) =
         CSelf5[保存データ]
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数) =
         CSelf33[保存時の横マス数]
||■文字列操作:CSelf5[保存データ] = ""

||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム



読み込み処理の…
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
がある所に以下のイベントを追加してください。

【イベントコード表示(黄色で表示された追加分のみ)】

|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0

||■変数操作+: CSelf40[マップID] = 現在のマップID
||■DB読込(可変): CSelf33[保存時の横マス数] =
          可変DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数)
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇



読み込み処理の…
||■文字列操作:CSelf6[データコピー] = CSelf5[保存データ]
の処理を削除し、代わりに以下のイベントを設定してください。

【イベントコード表示(追加分のみ)】

||■DB読込(可変): CSelf6[データコピー] =
          可変DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ)



以上で設定完了です。

一応「XY座標のみ」に追加設定した時の設定例を記載しておきます。

【イベントコード表示(全てのイベントコマンド)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

63

64
65
66
67
68
69
70
71
72
73
74
75
76

77
78
79
80
81
82
83
84
85
86

87
88
89

90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120
121
122

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

159
160
161

162
163
164
165
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■変数操作+: CSelf40[マップID] = 現在のマップID
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ) =
        CSelf5[保存データ]
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数) =
        CSelf33[保存時の横マス数]
||■文字列操作:CSelf5[保存データ] = ""

||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■変数操作+: CSelf40[マップID] = 現在のマップID
||■DB読込(可変): CSelf33[保存時の横マス数] =
          可変DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数)
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]

||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
        レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■DB読込(可変): CSelf6[データコピー] =
          可変DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ)

||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
           [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム


▲トップへ戻る▲


  
■マップ移動時に可変DBから読み込む

別のマップへ移動した時に、自動的に可変DB[チップデータ]からデータを読み込む処理を設定します。

上記の■可変DBでマップごとに保存の設定を行っていない場合は、
先に■可変DBでマップごとに保存の設定を行ってから下記の設定例をご覧ください。

※設定手順は全ての保存方法で同じです。



この手の処理を作る場合、通常では主人公の現在のマップIDを監視し、
別のマップIDへ移動した時に読み込み処理を実行するように設定します。

しかし場所移動の条件(サンプルゲームのマップBからマップAに移動する時など)によっては、
読み込み処理がうまく機能しない事があるため、今回は場所移動を行うマップイベントの中に、
このコモンイベント(マウスでツボ置き)を呼び出す設定を追加し、
マップイベントから呼び出された時に読み込み処理が実行されるように設定します。



▼サンプルゲームのマップイベントの設定

場所移動が設定されているマップイベントに、このコモンイベントを呼び出す設定を追加してください。

▼サンプルゲーム「サンプルマップA」にあるマップイベント[06:【場所移動 Bへ】]
【イベントコード表示(黄色で表示された追加分のみ)】

■場所移動:主人公 ▲マップID2[サンプルマップB] X:12 Y:24 [トランジション + 暗転なし]
■イベントの挿入[名]: ["マウスでツボ置き"] <コモンEv 215>

▼サンプルゲーム「サンプルマップA」にあるマップイベント[02:ダンジョンの扉]
【イベントコード表示(黄色で表示された追加分のみ)】

▼ 「ダンジョンのカギ」を持っているか判定し、セルフ変数0へ代入
■イベントの挿入: このEvのSelf0 = コモン17:[ ▲アイテム所持数取得 ] / 19:ダンジョンのカギ
▼ 1個以上持ってたらダンジョンへ場所移動します
▼ (ゲーム中に1個しか手に入らないものでも、
▼ 条件分岐は「1個以上」とするのが安全です)

■条件分岐(変数): 【1】 このEvのSelf0 が 1 以上 【2】 このEvのSelf0 が 0 と同じ
-◇分岐: 【1】 [ このEvのSelf0 が 1 以上 ]の場合↓
|▼ ダンジョン内ではセーブを禁止する
|■イベントの挿入: コモン15:[ ○セーブ許可・禁止設定 ] / 0:セーブを禁止する
|▼ 場所移動
|■場所移動:主人公 ▲マップID3[ダンジョン] X:7 Y:27 [トランジション + 暗転有り]
■イベントの挿入[名]: ["マウスでツボ置き"] <コモンEv 215>
|■
-◇分岐: 【2】 [ このEvのSelf0 が 0 と同じ ]の場合↓
|▼ カギを持っていない場合はメッセージだけ
|■文章:カギがかかっているようだ……\nどこかでカギを見つけないといけない。
|■
◇分岐終了◇

▼サンプルゲーム「サンプルマップB」あるマップイベント[02:Aへの場所移動]
【イベントコード表示(黄色で表示された追加分のみ)】

■トランジション準備
■場所移動:主人公 ▲マップID1[サンプルマップA] X:15 Y:1 [トランジションなし]
■イベントの挿入[名]: ["マウスでツボ置き"] <コモンEv 215>
■トランジション実行

▼サンプルゲーム「サンプルマップB」あるマップイベント[02:Aへの場所移動]
【イベントコード表示(黄色で表示された追加分のみ)】

▼ セーブを許可する
■イベントの挿入: コモン15:[ ○セーブ許可・禁止設定 ] / 100
▼ 場所移動
■場所移動:主人公
■イベントの挿入[名]: ["マウスでツボ置き"] <コモンEv 215>

「サンプルマップB」のマップイベント[02:Aへの場所移動]以外の場所移動では、
画面が表示し終わってからツボがパッと表示される仕様になっています。

もしも画面が表示される前からツボが表示されている状態にする場合は、
マップイベント[02:Aへの場所移動]と同じく、場所移動の設定では「トランジションなし」にして、
場所移動の前に「■トランジション準備」、後に「■トランジション実行」を設定してください。



▼コモンイベントのセルフ変数

以下のセルフ変数を新たに追加します。

番号 名前 使用内容
41 マップイベントID マップイベントから呼び出された場合は「0以上」になる。
42 SE演奏しない マップによる読み込み時に「1」にしてSE演奏を実行させない。

【変数の一覧を別ウィンドウで表示】



▼コモンイベントの設定

※保存方法によって行数が変わるため、行数の表示はありません。

■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
〜この位置〜
■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
〜この位置〜」となっている所に以下のイベントを追加してください。

【イベントコード表示(黄色で表示された追加分のみ)】

■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )

■変数操作+: CSelf41[マップイベントID] = マップイベントID(コモンなら呼び出し元ID)
■変数操作: CSelf42[SE演奏しない] = 0 + 0
■条件分岐(変数): 【1】 CSelf41[マップイベントID] が 0 以上
-◇分岐: 【1】 [ CSelf41[マップイベントID] が 0 以上 ]の場合↓
|■変数操作: CSelf20[クリック] = 0 + 0
|■変数操作: CSelf30[[S]キー] = 0 + 0
|■変数操作: CSelf31[[D]キー] = 132 + 0
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■変数操作: CSelf42[SE演奏しない] = 1 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ

セルフ変数[41]の値は、コモンイベントの「並列実行」で実行された場合は「-1」になり、
マップイベントから呼び出されて実行した場合のセルフ変数[41]の値は「0以上」になります。

マップイベントから呼び出された場合は、
[D]キーを押した時と同じ状態にして、読み込み処理を実行させます。



||■デバッグ文:読み込み完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
のサウンド設定を以下のように変更してください。

なお、マップ移動時にSEが鳴っても良い場合は、この設定変更は不要です。
【イベントコード表示(黄色で表示された追加分のみ)】

||■デバッグ文:読み込み完了
||■条件分岐(変数): 【1】 CSelf42[SE演奏しない] が 0 と同じ
||-◇分岐: 【1】 [ CSelf42[SE演奏しない] が 0 と同じ ]の場合↓
|||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
|||■
||◇分岐終了◇



以上で設定完了です。

一応「XY座標のみ」に追加設定した時の設定例を記載しておきます。

【イベントコード表示(全てのイベントコマンド)】

■コモンイベント「マウスでツボ置き」

起動条件:並列実行(常時)

0
1
2
3
4
5
6
7


8
9

10

11


12
13
14
15


16
17
18
19


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

74

75
76
77
78
79
80
81
82
83
84
85
86
87

88
89
90
91
92
93
94
95
96
97

98
99
100

101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

123
124
125
126
127
128
129
130
131
132
133

134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173

174
175
176

177
178
179
180
■変数操作: CSelf10[X座標] = Sys71:マウスX位置 + Sys104:Xスクロール値
■変数操作: CSelf11[Y座標] = Sys72:マウスY位置 + Sys105:Yスクロール値
■変数操作: CSelf10[X座標]〜CSelf11[Y座標] /= Sys118:[読]タイルサイズ + 0
■変数操作: CSelf12[カーソルX] = CSelf10[X座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf13[カーソルY] = CSelf11[Y座標] * Sys118:[読]タイルサイズ
■変数操作: CSelf12[カーソルX] -= Sys104:Xスクロール値 + 0
■変数操作: CSelf13[カーソルY] -= Sys105:Yスクロール値 + 0
■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[カーソルX] Y:CSelf13[カーソルY] / 0(0)フレーム / パターン 1 /
       透 100 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作+: CSelf20[クリック] = マウス左クリック状態
■変数操作+: CSelf23[チップID] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
■変数操作+: CSelf24[通行判定] = X:CSelf10[X座標] Y:CSelf11[Y座標]の
       通行判定:タイル&イベント(○=0,×=1)
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
         【2】 CSelf23[チップID] が 1 以上
         【3】 CSelf24[通行判定] が 1 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■
-◇分岐: 【2】 [ CSelf23[チップID] が 1 以上 ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
-◇分岐: 【3】 [ CSelf24[通行判定] が 1 と同じ ]の場合↓
|■ピクチャ表示:1 [左上]ウィンドウ「<SQUARE>」サイズ[Sys118:[読]タイルサイズ,Sys118:[読]タイルサイズ]
       X:CSelf12[枠表示X] Y:CSelf13[枠表示Y] / 0(0)フレーム / パターン 1 /
       透 120 / 通常 / 角 0 / 拡 100% / カラー R[100] G[0] B[0]
|■変数操作: CSelf20[クリック] = 0 + 0
|■
◇分岐終了◇
■キー入力:CSelf30[[S]キー]キーボード(100〜) [キーコード[131]のみ判定] ( Sキー )
■キー入力:CSelf31[[D]キー]キーボード(100〜) [キーコード[132]のみ判定] ( Dキー )
■変数操作+: CSelf41[マップイベントID] = マップイベントID(コモンなら呼び出し元ID)
■変数操作: CSelf42[SE演奏しない] = 0 + 0
■条件分岐(変数): 【1】 CSelf41[マップイベントID] が 0 以上
-◇分岐: 【1】 [ CSelf41[マップイベントID] が 0 以上 ]の場合↓
|■変数操作: CSelf20[クリック] = 0 + 0
|■変数操作: CSelf30[[S]キー] = 0 + 0
|■変数操作: CSelf31[[D]キー] = 132 + 0
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■変数操作: CSelf42[SE演奏しない] = 1 + 0
|■
◇分岐終了◇

■条件分岐(変数): 【1】 CSelf30[[S]キー] が 131 と同じ
         【2】 CSelf31[[D]キー] が 132 と同じ
-◇分岐: 【1】 [ CSelf30[[S]キー] が 131 と同じ ]の場合↓
|▼ 保存処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■文字列操作:CSelf5[保存データ] = ""
||■変数操作+: CSelf33[保存時の横マス数] = マップサイズ[横]
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■文字列操作:CSelf5[保存データ] += "\cself[35]\n\cself[36]\n"
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■変数操作+: CSelf40[マップID] = 現在のマップID
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ) =
         CSelf5[保存データ]
||■可変DB書込:DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数) =
         CSelf33[保存時の横マス数]
||■文字列操作:CSelf5[保存データ] = ""
||■デバッグ文:保存完了
||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf31[[D]キー] が 132 と同じ ]の場合↓
|▼ 読み込み処理
|■条件分岐(変数): 【1】 CSelf32[二度押し防止] が 0 と同じ
|-◇分岐: 【1】 [ CSelf32[二度押し防止] が 0 と同じ ]の場合↓
||■変数操作: CSelf32[二度押し防止] = 1 + 0
||■変数操作+: CSelf40[マップID] = 現在のマップID
||■DB読込(可変): CSelf33[保存時の横マス数] =
        可変DB[ チップデータ : CSelf40[マップID] : 1 ] (20 : - : 保存時の横マス数)
||■変数操作+: CSelf34[保存時の縦マス数] = マップサイズ[縦]
||■条件分岐(変数): 【1】 CSelf33[保存時の横マス数] が 0 と同じ
||-◇分岐: 【1】 [ CSelf33[保存時の横マス数] が 0 と同じ ]の場合↓
|||■デバッグ文:保存データがありません
|||■イベント処理中断
|||■
||◇分岐終了◇
||■変数操作: CSelf35[保存X座標]〜CSelf36[保存Y座標] = 0 + 0
||■ループ開始
|||■変数操作+: CSelf37[保存チップID] = X:CSelf35[保存X座標] Y:CSelf36[保存Y座標]の
         レイヤー3のチップ番号(0:透明,1-31:オート,32-:etc)
|||■条件分岐(変数): 【1】 CSelf37[保存チップID] が 889 と同じ
|||-◇分岐: 【1】 [ CSelf37[保存チップID] が 889 と同じ ]の場合↓
||||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
             [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
||||■
|||◇分岐終了◇
|||■変数操作: CSelf35[保存X座標] += 1 + 0
|||■条件分岐(変数): 【1】 CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上
|||-◇分岐: 【1】 [ CSelf35[保存X座標] が CSelf33[保存時の横マス数] 以上 ]の場合↓
||||■変数操作: CSelf35[保存X座標] = 0 + 0
||||■変数操作: CSelf36[保存Y座標] += 1 + 0
||||■条件分岐(変数): 【1】 CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上
||||-◇分岐: 【1】 [ CSelf36[保存Y座標] が CSelf34[保存時の縦マス数] 以上 ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
||||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
|||||■ウェイト:1 フレーム
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■DB読込(可変): CSelf6[データコピー] =
          可変DB[ チップデータ : CSelf40[マップID] : 0 ] (20 : - : 保存データ)
||■ループ開始
|||■条件分岐(文字): 【1】 CSelf6[データコピー]が "" と同じ
|||-◇分岐: 【1】 [ CSelf6[データコピー] "" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf35[保存X座標] = CSelf7[1行切り出し用] + 0
|||■文字列操作:CSelf7[1行切り出し用] =<上1行切出> CSelf6[データコピー]
|||■変数操作: CSelf36[保存Y座標] = CSelf7[1行切り出し用] + 0
|||■マップチップ上書き: [ レイヤー 3 / X CSelf35[保存X座標] / Y CSelf36[保存Y座標] ] から
            [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|||■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 4900000 以上
|||-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 4900000 以上 ]の場合↓
||||■ウェイト:1 フレーム
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■デバッグ文:読み込み完了
||■条件分岐(変数): 【1】 CSelf42[SE演奏しない] が 0 と同じ
||-◇分岐: 【1】 [ CSelf42[SE演奏しない] が 0 と同じ ]の場合↓
|||■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム
|||■
||◇分岐終了◇

||■
|◇分岐終了◇
|■
-◇上記以外
|■変数操作: CSelf32[二度押し防止] = 0 + 0
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf20[クリック] が 0 と同じ
-◇分岐: 【1】 [ CSelf20[クリック] が 0 と同じ ]の場合↓
|■変数操作: CSelf21[クリックX座標]〜CSelf22[クリックY座標] = -1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf21[クリックX座標] が CSelf10[X座標] と同じ
-◇分岐: 【1】 [ CSelf21[クリックX座標] が CSelf10[X座標] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf22[クリックY座標] が CSelf11[Y座標] と同じ
|-◇分岐: 【1】 [ CSelf22[クリックY座標] が CSelf11[Y座標] と同じ ]の場合↓
||■イベント処理中断
||■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: CSelf21[クリックX座標] = CSelf10[X座標] + 0
■変数操作: CSelf22[クリックY座標] = CSelf11[Y座標] + 0
■条件分岐(変数): 【1】 CSelf23[チップID] が 889 と同じ
-◇分岐: 【1】 [ CSelf23[チップID] が 889 と同じ ]の場合↓
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 0 ]で上書き
|■
-◇上記以外
|■マップチップ上書き: [ レイヤー 3 / X CSelf10[X座標] / Y CSelf11[Y座標] ] から
          [ 横1 / 縦1 ] をチップ[ 889 ]で上書き
|■
◇分岐終了◇
■サウンド:SE0「[システム]決定音」再生 / 遅延:0フレーム


▲トップへ戻る▲


  
■補足

保存データがちゃんと保存されているかどうかを確認したい時には…
||■デバッグ文:保存完了
がある所で、保存データをデバッグ文で表示したり、ファイルで出力したりして確認してください。

▼デバッグ文で表示
【イベントコード表示】

||■デバッグ文:保存完了\n\cself[5]

▼テキストファイルで出力
【イベントコード表示(黄色のイベントコマンドのみ)】

||■文字列操作:CSelf5[保存データ] =<を→のファイルに出力> "保存データ確認.txt"
||■デバッグ文:保存完了

▼可変DB[チップデータ]をCSV形式で出力
【イベントコード表示(黄色のイベントコマンドのみ)】

||■DB読込(可変): CSelf14 = 可変DB[タイプチップデータ(20)のデータ数]
||■DBからCSVファイルに保存: 可変DB[チップデータ:0](チップデータ : ) から
             [CSelf14 データ] → ファイル "保存データ確認..csv"
||■デバッグ文:保存完了



||■デバッグ文:保存完了
などのデバッグ文は、イベント設定中の動作確認用に設定したものなので、
イベントが完成したら削除しても問題ありません。



このページのセルフ変数の変数番号は、設定ジャンルごとに10番単位で分かれています。

設定ジャンル別に分けておく事で、どこで使用しているのかが分かりやすくなり、
バグが発生した時のデバッグ作業がやりやすくなります。

セルフ変数の番号はあとから並び替える事ができるので、並び順がごちゃついて分かりづらい時には、
セルフ変数の並び替え作業を行ってみると良いでしょう。

【変数番号を並び替えるのページを開く】


▲トップへ戻る▲



◎関連ページ

◆変数番号を並び替える

YADOT-WOLFトップ  気紛れな空間へ戻る  メール