スクリプト間の移動

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を書くのを忘れないでください。

サブルーチンの中から、さらに別のサブルーチンを呼び出すことも可能です。 ただし、自分自身を呼び出すと無限ループする可能性があるので、注意してください。