タイトル画面で、はじめから遊ぶ場合はSTARTを。
続きから遊ぶ場合はLOADを選んでください。
そして、使用するセーブデータを選択することで始まります。
以下は、存在していることが必須のファイルです(編集はルールの範囲内で可能)。
※……但し、GraphicsフォルダとScriptフォルダは、ファイルパック時にフォルダごとファイルパッキングされるので、 配布時は不要です。
以下のことを頭に置いて、Initialize.txtとその他のtxtファイルに書く スクリプトの内容を決めましょう。
・新しく始める場合プレイ中、セーブデータに記録される内容は以下の通りになります。
また、保存されるのは、最後にセーブポイントを通過した瞬間のデータになります。
上記以外のものに関する状態は保存できませんのでご注意ください。
つまり、スプライト、メッセージウィンドウ、選択肢ウィンドウ等の状態は保存されません。
また、後述もしますがサブルーチンの中にはセーブポイントを置かないで下さい。
サブルーチンの中からジャンプした先もサブルーチンの中と扱うのでお間違いのないようお願いします。
以上のことを考慮した上でセーブポイント設置を行ってください。
HANE Engineには、"FilePacker.exe"という実行ファイルが同梱されています。
(上の画像で選択されているファイル)
これを実行すると、Graphicsフォルダ丸ごとと、Scriptフォルダが丸ごとが、一つの"GameData.pac"というファイルに
パッキングされます。
HANE Engineは、Graphicsフォルダやその中のファイル、Scriptフォルダやその中のファイルがない場合、
この"GameData.pac"というファイルからデータを取り出して実行するので、配布の際は、次の画像で示すものを
配布してください。
"HANE Engine.exe"、"Music"フォルダ丸ごと、"Parts"フォルダ丸ごと、"GameData.pac"の4つで配布用のワンセットになります。
スクリプトとは、ゲームの動作を指示する命令を書き連ねたものを言います。
HANE Engineは、一定の規則に沿って書かれたスクリプトを読み込むことで、ゲームとして動作します。
この規則に沿わないスクリプトを書くと、HANE Engineはエラーを起こして正常に動作しません。
しかし、各命令の機能を理解し、正しくスクリプトを書いていけば、思い描いたものをどんどん実現していけます。
ここでは、スクリプトの基本的な記述の仕方を示します。
まず覚えておくべきことは、全ての命令やオブジェクト名は、半角英数字で書くことです。
行頭の文字を#(半角のシャープ)にすると、その行はコメント扱いになり読み飛ばされます。
メモ書きや、スクリプトの意味を記すことで、製作をスムーズにしていきましょう。
こういった開発では、出来る人程こまめにコメントを書きます。コメントを書くことが上達のコツでもあります。
まず、一文、1ワードで書ける命令があります。
例:WaitOK
後でも解説しますが、スクリプトにWaitOKと書くことで、プレイヤーがOKボタンを押すまで、スクリプトの実行を止めます。
また、命令の中には、引数を必要とするものがあります。
この命令は、()内に記述されたフレーム数だけスクリプトの実行を止めます(1秒=60フレーム)。
この場合は30フレーム、つまり0.5秒スクリプトの実行が停止されます。
この30という数値は好きなように変えてください。また、後述する変数というものも引数に使えます。
複数の引数をとる命令の場合、(30,40,50)のように、コンマ( , )で各引数を区切ります。
また、引数には""で囲んで書かれているものもありますが、これは、""で括ることでひとまとまりであることを示すために
使います。これは主に、文字列や負の数字を使う時に用いる書き方です。
オブジェクトとは、命令で操作する対象、または機能の集合という意味で捉えると良いでしょう。
後述するオブジェクト番号も指定するパターンを含めれば、HANE Engine用のスクリプトはこのパターンが最も多いです。
そして、文法の形式としては……
という形を取ります。オブジェクト名と命令は、ピリオド( . )で区切ります。
例:Background.Set("湖.jpg")この例では背景を意味するBackgroundオブジェクトのSetという命令を呼び出し、背景画像を湖.jpgにしています。
パターン3・オブジェクト、オブジェクト番号、命令の組み合わせHANE Engineのスクリプトで最も多いパターンがこれです。
例:MessageWindow[0].Open(20,20,600,440)メッセージウィンドウ担当のMessageWindowオブジェクトのような、複数使用できるオブジェクトの場合、オブジェクト名の後に
数字を[ ]で括って書くことで、何番のオブジェクトに命令するのかを示します。そして、ピリオド( . )の後に、それに対する命令を書きます。
例の場合は、メッセージウィンドウをスクリーン上のx,y座標20,20に幅600,高さ440で開くという意味になります。
変数とは、数字や文字列(文)等を保存しておき、取り出せるものを意味します。
HANE Engineで使える変数は3種類あります。
そして、それぞれのスクリプト中での表記は、以下のようになります。
(各idは、数字に置き換えてください)
これらの変数は、単純な計算やシナリオの分岐など、様々な使い道が存在します。
スクリプトリファレンスのメニューへ戻るスクリプトの命令の中には、Jump(ジャンプ命令)とSubrutine(サブルーチン)を呼び出すCallSubという命令が存在します。
この二つは、その機能が少々似ているため、混同し間違った(推奨されない)使い方をしてしまう場合があるので、
ここで両者の機能と使い分けを説明します。
まず、Jump命令を使った場合、指定したファイル内のタグの位置へスクリプトの処理を飛ばし、 そこから続きの処理が行われます。
例……#ジャンプ命令 Jump("ジャンプ先1") #(中略……この部分は何を書いても飛ばされる) #タグはこのように、*から始める。Jumpでここまで処理が飛ばされる。 *ジャンプ先1
Jumpでは、指定したタグまで処理が飛ぶのがポイントです。
一方、Subrutine(サブルーチン)は、呼び出し時に指定したタグからReturnまでの処理を、
呼び出し元の処理を一時中断して行います。
つまり、例で示しますと……
#ここでサブルーチンを呼び出す。すると、こちら側の処理は一時停止され、 #サブルーチン内の処理が行われる。 CallSub("サブルーチン1") #Return後、ここから処理が再開される #(中略) #サブルーチン開始地点のタグ *サブルーチン1 #(サブルーチンの処理) #ここで、サブルーチン終了。呼び出し元の処理が再開される。 Return
このようになります。
JumpとCallSubの違いを端的な言葉で表すなら……
Jumpは行ったっきり
CallSubは戻ってくるのが前提
となります。
そして、使い分けとしては……
Jumpは、シナリオそのものの分岐や処理を戻すなどに利用
CallSubは、予め作った機能を使うのに利用する
と考えればよいでしょう。
また、JumpとCallSubは、別のテキストファイルの内容へ移ったり呼び出したりすることもできます。
その場合は、以下の例のように記述してください。
プレイヤーがOKボタン(Enterキーなど)を押すまでスクリプトの処理を中断し、待つ。
指定した待ちフレーム数だけ、スクリプトの処理を中断する
指定したID番号の変数に、0≦結果の値<上限値の範囲で値が格納される。
指定したセーブポイント名のセーブポイントを設置。
この時、セーブポイント名もセーブデータに記録される。
セーブポイント名は、そのファイル名で重複してはならない。
また、ここでは文字列変数も使用してはいけない。
スクリプトを終了する(タイトル画面に戻る)
Background.Set("(文字列)ファイル名","(文字列、省略可)入れ替えエフェクト名",(数値、省略可)入れ替え時間)
指定した背景に指定したエフェクトで変更する。
入れ替えエフェクト:"flash","crossfade","crossfade2"……デフォルトは"flash"
Background.Effect("(文字列)エフェクト名",(数値、省略可)エフェクト時間)
背景を揺らしたりする
エフェクト名:"shake_h","shake_v"
エフェクト時間:0以上(フレーム)
Background.ColorTone((数値)不透明度,(数値)赤,(数値)緑,(数値)青)
色調を変更する。
それぞれ、数値の範囲は0〜255
Character[id].SetGraph("(文字列)ファイル名","(文字列、省略可)入れ替えエフェクト名",(数値、省略可)エフェクト時間,(数値、省略可)x座標
,(数値、省略可)y座標,"(文字列、省略可)移動エフェクト名",(数値、省略可)移動時間)
キャラクターのグラフィックを設定する。
実際に記述する際は途中で改行しないこと。
入れ替えエフェクト:"flash","crossfade","crossfade2"……デフォルトは"flash"
長いので記述例
Character[0].SetGraph("ヤク0.png","crossfade2",30,0,0)
この例の場合、Graphics/Charフォルダ内のヤク0.pngという画像を、30フレームかけたクロスフェードでx,y=0,0の位置に表示し、移動エフェクトは
無しという扱いになる。
省略可と書かれた引数は省略が可能だが、左から順に見て最初に省略した引数以降は全て省略すること。
Character[id].MovePos((数値)x座標,(数値)y座標,"(文字列、省略可)移動エフェクト名",(数値、省略可)移動時間)
キャラの位置移動。
Character[id].SetReverse((フラグ)左右反転)
キャラの左右反転設定。
Character[id].SetVisible((フラグ)可視)
キャラの可視、不可視を設定。Visibleに変更する?
以下は、[id]による指定をしない、Characterオブジェクト全体に出す命令
Character.SetFocus((数値)フォーカスするキャラの番号)
フォーカスを移す。
フォーカスするキャラの番号は0〜6.
-1だと誰にもフォーカスしない。
100だと全員にフォーカスする
フォーカスされたキャラクターは明るく、そうじゃないキャラは暗く表示される
Character.EraseAll("(文字列、省略可)入れ替えエフェクト名",(数値、省略可)エフェクト時間)
全キャラ消去。
Picture[id].Load("(文字列)画像ファイル名")
画像をメモリにロード。この命令を呼んだとき、実際は暗示的に先にReleaseが実行されている
Picture[id].Release
画像をメモリから開放する
画像を使い終わったら開放するのがメモリ節約の鉄則
TextPicture[id].Create((数値)画像幅,(数値)画像高さ)
完全空白のテキストピクチャ(文字列画像)を生成。この命令を呼んだとき、実際は暗示的に先にReleaseが実行されている
TextPicture[id].Write("(文字列)描画する文")
生成したテキストピクチャ(文字列画像)に字を書き込む。
TextPicture[id].Release
テキストピクチャ(文字列画像)をメモリから開放
画像を使い終わったら開放するのがメモリ節約の鉄則
TextPicture.FontType("(文字列)フォント名")
これから書き込む文字列のフォントを設定
TextPicture.FontSize((数値)フォントサイズ)
これから書き込む文字列のフォントサイズを設定
TextPicture.FontColor((数値)不透明度,(数値)赤,(数値)緑,(数値)青)
これから書き込む文字列のフォント色を設定
それぞれ、0〜255
TextPicture.FontShade((フラグ)影の有無のフラグ,(数値)不透明度,(数値)赤,(数値)緑,(数値)青)
フォントの影を設定
フラグはtrueかfalse,trueで影有り
数値はそれぞれ、0〜255
Sprite[id].SourcePicture((フラグ)テキストピクチャフラグ,(数値)ピクチャ番号)
描画の基とする画像を設定
ピクチャ番号は、Picture,又はTextPictureのindexの値である。
Sprite[id].SourceRect((数値)左,(数値)上,(数値)右,(数値)下)
基画像の切り取る範囲(四角形)を設定
Sprite[id].MovePos((数値)x座標,(数値)y座標,(数値)移動時間,(フラグ)並列動作フラグ)
描画位置を設定。
並列動作フラグは、将来拡張を考えて用意したもの。今は原則的にtrueを指定すること
Sprite[id].SetMagni((数値)x方向拡大率%,(数値)x方向拡大率%,(数値)拡大にかける時間,(フラグ)並列動作フラグ)
拡大率を設定。拡大率は百分率(単位が%になる)で指定。
つまり、100と入力すれば100%のサイズということになる。
Sprite[id].SetColor((数値)不透明度,(数値)赤,(数値)緑,(数値)青,(数値)変更にかける時間,(フラグ)並列動作フラグ)
色調を設定。全て
Sprite[id].SetVisible((フラグ)可視フラグ)
可視、不可視の設定
trueで可視
Sprite[id].Init
初期化する
Sprite[id].Copy((数値)コピー元のスプライト番号)
指定した番号のスプライトから内容をコピーして貰う
コピー元のスプライト番号=コピー元のスプライトのid
Sprite[id].Swap((数値)入れ替えるスプライトの番号)
指定したスプライトと内容を入れ替える
MessageWindow[id].Open((数値)x座標,(数値)y座標,(数値)幅,(数値)高さ,"(文字列)開くエフェクト",(フラグ)可視フラグ,(フラグ)スキン可視フラグ)
ウィンドウを開く。全ての引数が省略化
開くエフェクト:flash(デフォルト),expand(伸びるように開く),fade(フェードイン)
スキン……文字の後ろ側にある、ウィンドウの下地画像のこと
可視フラグ……trueで見える。falseで見えない。
MessageWindow[id].Close
ウィンドウを閉じる
MessageWindow[id].SetVisible((フラグ)可視フラグ)
ウィンドウの可視設定
trueで見える。falseで見えない。
MessageWindow[id].SkinVisible((フラグ)可視フラグ)
ウィンドウスキンの可視設定
trueで見える。falseで見えない。
MessageWindow[id].SkinType((数値)ウィンドウスキンタイプ番号)
ウィンドウスキンのタイプ設定。
現在、0番で青地の枠有ウィンドウ。1番で枠無しグレーのグラデーションウィンドウ。
(デフォルト素材の場合)
MessageWindow[id].PrintText("(文字列)文章")
新規文章描画。""(ダブルクォーテーション)の中に書き、文中の改行も反映される。
それまでこのウィンドウに既に書かれていた文章は一度消される。
MessageWindow[id].AddText("(文字列)文章")
文章追加描画。""(ダブルクォーテーション)の中に書き、文中の改行も反映される。
それまでにこのウィンドウに書かれていた文章の続きに文章が書かれる。
MessageWindow[id].FontType("(文字列)フォント名")
今後描画する文字のフォントを設定
MessageWindow[id].FontSize((数値)フォントサイズ)
今後描画する文字のフォントサイズを設定
今後描画する文字のフォント色を設定
MessageWindow[id].FontColor((数値)不透明度,(数値)赤,(数値)緑,(数値)青)
MessageWindow[id].FontShade((フラグ)影の有無)
今後描画する文字の影の有無を設定
trueで影有り
MessageWindow[id].FontShadeColor((数値)不透明度,(数値)赤,(数値)緑,(数値)青)
フォントの影の色の設定
SelectWindow[id].ContentsNum((数値)選択肢の数)
選択肢の数を設定。1以上、上限は特になし(ハードウェア依存だが実用上は基本的に上限無し)
SelectWindow[id].SetColumn((数値)段数)
段組み設定。指定した数値分だけ、横に段が増える
段組みの補足。配置としては
1段1列 | 2段1列 | 3段1列 |
1段2列 | 2段2列 | 3段2列… |
0 | 1 | 2 |
3 | 4 | 5 |
Sound.BGM("(文字列)BGMファイル名")
Music/bgmフォルダ内にあるBGMファイルを再生
Sound.BGS("(文字列)BGSファイル名")
Music/bgsフォルダ内にあるBGSファイルを再生
Sound.SE("(文字列)SEファイル名")
Music/seフォルダ内にあるSEファイルを再生
Sound.StopBGM
BGMを止める
Sound.StopBGS
BGSを止める
Sound.StopSE
SEを止める
SaveData[id].Save
index番のデータにセーブする。
SaveData[id].Refer((数値)文字列変数ID)
id番のセーブデータに記録されている、セーブポイント名を、文字列変数ID番の文字列変数に格納する
セーブデータが無い場合は"NO DATA"が格納される
スクリプト中で
Calc(計算式)
と書いた時、()内の計算式で代入計算/演算が行える。
ただし、実行できるパターンは以下のように限られている。
実行できるパターン1
$num[id] (演算子1) 数値1 (演算子2) 数値2
演算子1 =(左辺の変数に右辺の結果を代入)
+=(左辺の変数自身に右辺の結果を加えて代入)
-=(左辺の変数自身から右辺の結果を引いて代入)
*=(左辺の変数自身に右辺の結果をかけて代入)
/=(左辺の変数自身を右辺の結果で割って代入)
%=(左辺の変数自身を右辺の結果で割った余りを代入)
演算子2 +、-、*、/、%(左から順に、足し算、引き算、掛け算、割り算、剰余(割り算の余り))
パターン1の例
Calc( $num[10] = $num[1] + 10 )
Calc( $num[10] += $num[1])
パターン2
$num[id](演算子3)
演算子3 ++(左辺の変数の持つ値を1増やす)
--(左辺の変数の持つ値を1減らす)
パターン2の例
Calc($num[20]++)
パターン3
文字列変数の操作
$str[id](文字列演算子1)文字列1(文字列演算子2)文字列2
文字列演算子1 =(左辺の文字列変数に右辺の結果を代入)
+=(左辺の文字列変数の値に右辺の結果を繋げて代入する)
文字列演算子2 +(文字列1と文字列2を繋げる)
パターン3の例
Calc($str[10] = "あいうえお")
Calc($str[20] = $str[10] + "かきくけこ")
パターン4
$flag[id] = フラグ1(フラグ演算子1)フラグ2
フラグ演算子1 +(フラグ1とフラグ2の論理和演算(OR))
*(フラグ1とフラグ2の論理積演算(AND))
フラグ1、フラグ2は、!(半角のビックリマーク)を頭につけることで、trueとfalseを反転させることができる。
パターン4の例
Calc($flag[0] = !$flag[1] * $flag[2])
もし$flag[1]がfalseの値を持っているなら、!$flag[1]はtrueとして扱われ、逆ならfalseとして扱われる。
if($flag[0])
#$flag[0]がtrueなら、この部分が実行される
end
#end以降は通常通りに。
if($num[10] >= 20)
#$num[10]の値が20以上ならこの部分が実行される。
else
#そうっじゃない($num[10]の値が20未満)ならこの部分が実行される。
end
#条件分岐終了。ここ以降は通常通りに。
if($num[1] < 10)
#$num[1]の値が10未満ならこの部分が実行される。
else if($num[1] < 20)
#$num[1]の値は10以上だが20未満ならこの部分が実行される。
else
#それ以外($num[1]の値は20以上)ならここが実行される。
end
#条件分岐終了。ここ以降は通常通りに。
if($num[1] == 20)
#$num[1]の値が20と同じ場合
if($str[20] == "aiueo")
#$num[1]の値が20と同じ場合で$str[20]に入っている文字列が"aiueo"なら、ここが処理される。
end
#$num[1]の値が20と同じ場合なら、$str[20]が"aiueo"だろうとそうでなかろうとここは処理される。
end
#条件分岐終了。ここ以降は通常通りに。
#ifとendはワンセットになっていることが重要。
以下は、コピー&ペーストし、必要に応じて書き変えるだけで使えるスクリプトのサンプル・テンプレート集(コメント付き)です。
メッセージウィンドウのサンプル一番上へ戻る#メッセージウィンドウ使い方のサンプル #x,y座標=20,20の位置に、幅600,高さ440のウィンドウを開く。 #エフェクトはexpand MessageWindow[0].Open(20,20,600,440,"expand") MessageWindow[0].PrintText("表示したい文章をここに。") #一旦区切る WaitOK #追加表示。 #次の行から始めたいという場合は、このように一文字目で改行を入れる。 MessageWindow[0].AddText(" 文章を追加表示したい場合はこう。") #一旦区切る WaitOK #メッセージウィンドウを閉じる MessageWindow[0].Close
選択肢ウィンドウのサンプル#――Initialize.txtの方に書いておくと良いこと―― #3種類のSEを設定(音を鳴らしたくないなら設定不要) SelectWindow[0].SelectSeFile("cursor8.wav") SelectWindow[0].CancelSeFile("bahu.wav") SelectWindow[0].CursorMoveSeFile("mokin.wav") #ウィンドウスキンタイプを設定 SelectWindow[0].SkinType(0) #選択肢の説明文用ウィンドウのスキンタイプを設定 SelectWindow[0].DescriptionSkinType(0) #選択肢の枠の高さを設定 SelectWindow[0].ContentsHeight(25) #――Initialize.txtの方に書いておくと良いこと。ここまで―― #――以降、本文中に書くこと―― #この選択肢を何度か利用する場合、このようにタグを用意しておく *サンプル選択肢の開始地点 #――Openの前に書くこと―― #選択肢の数を設定。(ここでは3個) SelectWindow[0].ContentsNum(3) #段数の設定(ここでは1段) SelectWindow[0].SetColumn(1) #――Openの前に書くこと、ここまで―― #選択肢ウィンドウを開く SelectWindow[0].Open(20,100,600,200,16,"expand") #(必要なら書く)項目についての説明ウィンドウを表示 SelectWindow[0].OpenDescription(20,60,600,40,"expand") #――Openの後に書くこと―― #選択肢の項目設定。ここで書かれた内容が選択肢として表示される SelectWindow[0].SetContents(0,"最初の選択肢(0番)") SelectWindow[0].SetContents(1,"2番目の選択肢(1番)") SelectWindow[0].SetContents(2,"3番目の選択肢(2番)") #(必要なら書く)項目についての説明文を設定 SelectWindow[0].SetDescription(0,"最初の選択肢についての説明文") SelectWindow[0].SetDescription(1,"2番目の選択肢(1番)についての説明文") SelectWindow[0].SetDescription(2,"3番目の選択肢(2番)についての説明文") #どれかを必ず選ばせる時に使うテクニックのポイント1 *キャンセル時に戻る場所1 #プレイヤーに選択してもらう。選択の結果はこの場合なら$num[0]に格納される。 SelectWindow[0].Select(true,0) #どれかを必ず選ばせる時に使うテクニックのポイント2 #キャンセルができないようにするなら、これを書く。 if($num[0] == "-1") #選んでもらえるよう戻る Jump("キャンセル時に戻る場所1") end #どれかを必ず選ばせる時に使うテクニックのポイント2ここまで #選択肢ウィンドウを閉じる(同時に説明文用ウィンドウも閉じられる) SelectWindow[0].Close #また、キャンセル専用処理を用意する場合はif〜endの中を書き変える。 if($num[0] == 0) #最初の選択肢が選ばれた場合の処理を書く else if($num[0] == 1) #(中略) end
システムメニューのサンプル#Sub.txtなどに書いておき、CallSub("Menu","Sub.txt")として呼び出す。 #必要に応じてウィンドウのid番号や変数のid番号などを変えるなど、改良してみよう。 *Menu #メニューサブルーチン開始 #ContentsHeightはInitialize.txtで設定済み SelectWindow[0].SetColumn(1) SelectWindow[0].ContentsNum(3) SelectWindow[0].Open(380,0,260,100,12,"expand") SelectWindow[0].SetContents(0,"セーブする") SelectWindow[0].SetContents(1,"ゲームを終了する") SelectWindow[0].SetContents(2,"システムメニュー終了") *MenuStartPoint SelectWindow[0].Select(true,1) if($num[1] == "-1") #キャンセルされた場合は閉じて終わる。 SelectWindow[0].Close Return else if($num[1] == 0) #セーブするを選んだ場合 MessageWindow[0].Close MessageWindow[0].Open(0,0,380,40,"expand") MessageWindow[0].PrintText("どのデータにセーブしますか?") #6つのセーブデータについてチェックし、選択肢に入れる処理開始。 #まずは選択肢ウィンドウを開く SelectWindow[1].SetColumn(1) SelectWindow[1].ContentsNum(6) SelectWindow[1].Open(0,40,380,300,12,"expand") #セーブデータのセーブポイント名を文字列変数0番に格納し表示する SaveData[0].Refer(0) Calc($str[1] = "1 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(0,"$str[0]") SaveData[1].Refer(0) Calc($str[1] = "2 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(1,"$str[0]") SaveData[2].Refer(0) Calc($str[1] = "3 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(2,"$str[0]") SaveData[3].Refer(0) Calc($str[1] = "4 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(3,"$str[0]") SaveData[4].Refer(0) Calc($str[1] = "5 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(4,"$str[0]") SaveData[5].Refer(0) Calc($str[1] = "6 > ") Calc($str[0] = $str[1] + $str[0]) SelectWindow[1].SetContents(5,"$str[0]") #セーブデータを選んでもらう。結果は数値変数1番$num[1]に格納される。 SelectWindow[1].Select(true,1) #キャンセルした場合は何もせずメニューに戻る if($num[1] == "-1") MessageWindow[0].Close SelectWindow[1].Close Jump("MenuStartPoint") else #選択した場合は、対応する番号のセーブデータに記録しメニューに戻る SaveData[$num[1]].Save MessageWindow[0].Close SelectWindow[1].Close Jump("MenuStartPoint") end else if($num[1] == 1) #終了するを選んだ場合 MessageWindow[0].Open(200,130,240,40,"expand") MessageWindow[0].PrintText("本当に終了しますか?") SelectWindow[1].SetColumn(1) SelectWindow[1].ContentsNum(2) SelectWindow[1].Open(200,170,240,96,16,"expand") SelectWindow[1].SetContents(0,"はい") SelectWindow[1].SetContents(1,"いいえ") SelectWindow[1].Select(true,1) if($num[1] == "-1") MessageWindow[0].Close SelectWindow[1].Close Jump("MenuStartPoint") else if($num[1] == "1") MessageWindow[0].Close SelectWindow[1].Close Jump("MenuStartPoint") else if($num[1] == "0") EndScript end MessageWindow[0].Close SelectWindow[1].Close Jump("MenuStartPoint") else if($num[1] == 2) #システムメニュー終了を選んだ場合 SelectWindow[0].Close Return end #サブルーチンここまで Return