スクリプト間の移動
Ponkanはstart.ponから始まりますが、
別のスクリプトへ移動したり、別のスクリプトをサブルーチンとして呼び出すことができます。
start.ponにすべての処理を書くと、スクリプトの見通しが悪くなるため、適切にファイルを分割しましょう。
分割の仕方としては、
- マクロの定義をするのは
macro.pon - タイトル画面は
title.pon - メインシナリオの1番は
scenario01.pon
といった風に、役割ごとに分割しておくのがおすすめです。
スクリプトを移動する
スクリプトを移動する場合は、jumpコマンドを使用します。
jumpコマンドの用途には以下の2つがあります。
- 同じスクリプトの別の場所にジャンプする
- 別のスクリプトにジャンプする
同じスクリプトの別の場所にジャンプする
同じスクリプト内で移動したい場合は、labelパラメータに移動先のラベルを指定します。
# ゲーム開始スクリプト
;call file: "script/init_system.pon"
こんにちは。
;linebreak
;br
;jump label: "jump_target_label"
上のjumpコマンドで移動するので、この部分は表示されません。
*jump_target_label
ジャンプしました。
別のスクリプトにジャンプする
別のスクリプトにジャンプしたい場合は、
fileパラメータに移動先のスクリプトを、
labelパラメータに移動先のラベルを指定します。
# ゲーム開始スクリプト
;call file: "script/init_system.pon"
# title.ponの*start_titleの位置へジャンプする
;jump file: "title.pon"
labelパラメータは省略することもできます。
省略した場合、ファイルの先頭にジャンプします。
# ゲーム開始スクリプト
;call file: "script/init_system.pon"
# title.ponの先頭へジャンプする
;jump file: "title.pon"
サブルーチン
いくつかの処理をまとめたものをサブルーチンと呼びます。
サブルーチンはcallコマンドでほかの場所から呼び出して使います。
jumpコマンドが純粋にスクリプトを移動するだけなのに対し、
サブルーチンでは呼び出し元の場所に戻るという違いがあります。
以下の例にそって説明します。
# ゲーム開始スクリプト
;call file: "script/init_system.pon"
# サブルーチンを呼び出す
サブルーチンを呼び出します。
;linebreak
;br
;call label: "subroutine"
サブルーチンから戻りました。
;s
# サブルーチン
*subroutine
この部分はサブルーチンの処理です。
;linebreak
;br
returnコマンドで呼び出し元に戻ります。
;linebreak
;br
;return
このスクリプトでは、最初に「サブルーチンを呼び出します。」とメッセージを表示します。
次に、callコマンドで*subroutineをサブルーチンとして呼び出しています。
呼び出されたサブルーチンでは、
「この部分はサブルーチンの処理です。」
「returnコマンドで呼び出し元に戻ります。」
のメッセージを表示します。
そして、returnコマンドで呼び出し元へ戻ります。
サブルーチンから呼び出し元に戻るので、最後に「サブルーチンから戻りました。」とメッセージを表示します。
以上が、サブルーチンの基本的な使い方になります。
;call file: "script/init_system.pon"と書かれていました。
ここまで説明してきませんでしたが、これはシステム初期化用のスクリプトをサブルーチンとしてい呼び出している処理でした。
同じスクリプト内で呼び出す
jumpコマンドと同じく、同じスクリプト内にあるサブルーチンを呼び出す場合は、
labelパラメータのみ指定します。
別のスクリプトのサブルーチンを呼び出す
異なるスクリプトファイルのサブルーチンを呼び出す場合は、fileパラメータとlabelパラメータを指定します。
labelパラメータを省略することもできます。その場合は、ファイルの先頭から呼び出されます。
サブルーチンの注意点
サブルーチンでは、必ず最後にreturnを書くのを忘れないでください。
サブルーチンの中から、さらに別のサブルーチンを呼び出すことも可能です。 ただし、自分自身を呼び出すと無限ループする可能性があるので、注意してください。