洞窟物語改造ソフト:Sue's Workshop 総合マニュアル

スクリプト読解

最終更新:

suesworkshop

- view
管理者のみ編集可
目次

スクリプトの書き方の基本

スクリプトとは洞窟物語を動かすために必要な文章です。
プログラミング言語に当たるのがスクリプトです。
ただ、本物のプログラミング言語と比べるとはるかに簡単です。(自分が思うには。)
このページではスクリプトの書き方、読み方を解説していきます。

まず、スクリプトのイメージを大雑把に捉えましょう。
机に紙がいっぱい散らかっている状況をイメージしてください。
ちなみに、このイラスト、何か派手に散らかってます(汗)。
ここで、机が(1つのマップの)スクリプト全体と考えてください。
そして、紙がたくさんあります。これがイベントに当たります。また、紙1枚1枚には番号が付いてます。これがイベントの番号に当たります。
紙には文字が書かれていますね。実はこれ、普通の人が見ても全然分かりません。分かる人にしか分からない言葉なのです(つまり暗号です)。これがコマンドです。

スクリプトには重要な暗号が2種類あります。この2種類を覚えてしまいましょう。
以下、*は任意の数字1文字を表します。ちなみ、<の直後の3文字の場合は指定された任意の英数字1文字を表します。

#****
 イベントの番号です。
<で始まる3文字以上の英数字や:(コロン)
 コマンドを表します。詳細についてはコマンドのページで紹介します。

これを使った書き方の例はこんな感じです。

#0094
<MNA<CMU0009<FAI0004<END
(スペースが入ってますが、これはこのWiki仕様のため入っています。実際は入れません。)

基本的なものはこの2つです。この2つが分かるのと分からないのとでは改造方法の理解に大きな差が出るので、ぜひとも覚えておいてください。

さて、次回からはスクリプトの読解に関する演習問題を用意します。これを通してスクリプトの読解および編集方法をマスターしてください。

スクリプトの読み方の基本

原則は前回の「スクリプトの書き方の基本」と同じです。

ここではコマンドの実行される優先順位をメインに話していきます。

コマンドの実行される優先順位は、原則前に来るものが先です。要は早い者勝ちです。
以下の例を見てみましょう。これはミミガーの村でのイベントです。なお、
  • 300 トロ子
  • 301 キング
  • 302 このイベント
  • 309 倒れるクォートに変化するスプライト
です。

#0302
<KEY<FL+0320<FL+0321<FON0302:0016<MNA<FAI0004<CMU0000<WAI0100
<MSG<FAC0007カギをよこすんだ。<NOD<CLR<FAC0008いやだ!!<NOD<CLR<FAC0007スーをかばう気か?<NOD
やつはよそ者なんだぞ。<NOD<CLR<FAC0006スーはいい人だもの。<NOD
あたしはスーを裏切れねえ。<NOD<CLR<FAC0007トロ子…<NOD
今度ドクターが来たら、
また誰か連れて行かれる…<NOD
スーを渡さなかったら、
お前が危ないんだぞ。<NOD<CLR
<FAC0006だけんど…<NOD<CLR<FAC0007いいからカギをよこせ!!<NOD
<FAC0000<CLO
<MOV0013:0022
<WAI0075<HMC<CNP0309:0150:0002<ANP0309:0010:0002<QUA0030
<MSG?!<NOD<CLO
<WAI0010
<ANP0300:0006:0002
<ANP0301:0006:0000
<WAI0100
<ANP0300:0006:0002
<WAI0080
<DNP0300
<CMU0009
<FOM0016<SMC<DNP0309<END

最初にキーロックがかかり、フラグが2種類かかります。そして、イベントが始まります(<FON0302から)。このあとマップ名表示、フェードイン、音楽再生停止となります。長い……。
途中を省略して青い箇所の後ろを見てみましょう。<ANP0300と<ANP0301があります。これは、キングとトロ子が飛び上がる場面です。でも、これを見る限りトロ子が先に飛び上がる、となりますが、実際はキングも同時に飛び上がります。コマンドの優先順位は早い者勝ちですが、実行される際の時間差は(<WAIや<NODによる待ちを除いて)ほとんど差がないのです。
じゃあ、時間差を出すには?簡単です。先ほど(<WAIや<NODによる待ちを除いて)と言いました。つまり、<WAIをうまく用いればコマンドを実行する際に時間差をつけることが出来ます。いわば<WAIを使ってサンドイッチにするのです。

演習問題

問1 以下のスクリプトはミミガーの村でのイベントの一部である。この中で、赤色で示したコマンドを青色[ ]で示した箇所のどこかに移しても、ゲーム実行時にこのイベントが全く変わらないようにしたい。入れるのに問題がないと思われる場所を答えなさい。解答は最も大きい数字を答えること。
#0420
<KEY<HMC<CMU0000
<CNP0410:0042:0002
<CNP0411:0074:0000
<ANP0610:0000:0000
[1]<WAI0100[2]<MSG[3]
<FAC0007[4]俺たちが殺人兵器?[5]<NOD[6]<CMU0009[7]<FAI0004[8]<CLR[9]<FAC0002[10]そうよ。[11]<NOD[12]<CLR[13]ドクターは赤い花を使って
あなたたちに人間を襲わせる
つもりなの。[14]<NOD[15](略)

問2 以下のスクリプトはあるイベントの一部である。この6つの<ANPのうち、同時に実行されるものはいくつあるか。数字で答えなさい。
#0204
(略)<NOD<CLO
<ANP0250:0010:0005
<ANP0251:0010:0005
<ANP0252:0010:0005
<ANP0253:0010:0005
<ANP0254:0010:0005
<ANP0255:0010:0005
<END

イベントの順番を読み取る

今回は主にイベントのジャンプを読み取る方法を紹介します。
以下のイベントはチャコの家でのイベントです。途中の赤と青の箇所に注目してください。
なお、以下のイベントに出てくる要素について
  • イベント
    • 0 なし
    • 19 ベッド(通常)
    • 200番台 暖炉
    • 210番台 ベッド
    • 300番台 チャコ
  • アイテム
    • 8 液体クラゲ
    • 37 チャコのルージュ
  • フラグ
    • 241 サンタからファイアボールを入手
となっています。

#0200
<ITJ0008:0202
<KEY<MSGゆれる炎の向こうに穴が見える。<NOD<FLJ0241:0201<END
#0201
<MSG炎が邪魔で通れない…<NOD<CLO
<FLJ0261:0000<WAI0030<FL+0261<FL+0263
(略)
<MSG
「その暖炉を通りたいの?<NOD<CLRそれならヤブクラゲが持っている
=液体クラゲ= が必要だわ。<NOD<END
#0202
<KEY<GIT1008<MSG=液体クラゲ= を使いますか?<YNJ0000<CLO
<FL+0213<IT-0008
(略)

#0210
<PRI<ITJ0037:0019<FLJ0263:0211<EVE0019
#0211
<KEY<MSG
休みますか?<YNJ0000<FAO0004<CMU0000<WAI0020<CLR・・・・・。<IT+0037<NOD<CLO
(略)<MSG
体力が回復した。<NOD<CLO<RMU<FAI0004<END

#0300
<ITJ0008:0302
<FLJ0261:0301
<FLJ0241:0303

<KEY<MSG「いらっしゃい~。<NOD<CLR
弱虫のサンタ君には会った?<NOD<END
#0301
<KEY<MSG「暖炉の火を消すなら
=液体クラゲ= が必要よ。<NOD<CLR(略)
#0302
<KEY<MSG「=液体クラゲ= を手に入れたの?!<NOD
やるわね!<NOD<CLR
(略)
#0303
<KEY<MSG「いらっしゃい~。<NOD<CLR物騒なもの持ってるわね。<NOD
旅の人かしら?<NOD<END

まず、200番から行ってみましょう。冒頭に<ITJがあります。ここで、
  • 液体クラゲを持っていたら
    202にジャンプ

    次に<YNJがありますね。メッセージも考慮すると、
    • 液体クラゲを使う
      先へ進む
    • 液体クラゲを使わない
      終わり
  • 液体クラゲを持っていなかったら
    メッセージ「ゆれる炎の……」

    直後に<FLJがあります。これはサンタのイベント完了にでます。つまり、
    • サンタのイベントを完了してたら
      201にジャンプ メッセージ「炎が邪魔で……」

      その後、また<FLJがあります。ここではフラグ261がかかっていたら終了です。つまり、
      • フラグ261があれば
        終わり
      • フラグ261がなければ
        フラグ261と263をかける

        チャコが歩いてきてアドバイスして終わり
    • サンタのイベントを完了してなかったら
      何もなし

つまり、これをまとめると、
  • 液体クラゲがある
    • 進むかやめるか
  • 液体クラゲがない
    • サンタからファイアボールをもらった
      • 暖炉に初めて調べる
        • 「ゆれる炎の……」「炎が邪魔で……」チャコが来る
      • 暖炉を調べるのは2回目以降
        • 「ゆれる炎の……」「炎が邪魔で……」
    • サンタからファイアボールをもらってない
      • 「ゆれる炎の……」
となります。
<**Jは、条件を満たしていれば指定されたイベントにジャンプします。ここでは<FLJや<ITJなどが該当します。こうしてみるとジャンプしたらややこしくならない?と思うかもしれませんが、いずれも共通点は#で始まる箇所からスタートします。ですから、ジャンプするときは#に行く、このことを覚えておくとイベントの順番の整理もできるはずです。

演習問題
問1 上記の300~303番のイベントはチャコとの会話のイベントである。チャコは4種類の台詞を言うが、これらの台詞を言うための条件について、空欄に「済み」または「未完」を埋めて完成させなさい。
ファイアボール入手 暖炉を調べる 液体クラゲ入手
300「いらっしゃい~。弱虫のサンタ君……」 [1] [2] [3]
301「暖炉の火を消すなら……」 [4] [5] [6]
302「●液体クラゲ● を……」 [7] [8] [9]
303「いらっしゃい~。物騒なもの……」 [10] [11] [12]

問2 (以下のリンクからテキストを開くかダウンロードすること。)
以下のスクリプトはマ・ピニョン戦前のイベントの一部である。
演習テキスト
(エンコードがUnicodeだと文字化けしますので、日本語に設定してください。
ダウンロードの場合、エンコードの設定は不要です。)
(1) きのこバッジをもらう正規ルートを覚えていないと仮定する。イベント番号403~407の5つのメッセージの中で、きのこバッジをもらうために「はい」を選ぶべきイベント番号と「いいえ」を選ぶイベント番号をそれぞれ答えなさい。
(2) ゲームの進行のために必要なイベントに関して、以下のフローチャートを埋めなさい。
  • マ・ピニョンに話す (イベント番号 400)
  • [1(はい/いいえ)]を選択
  • 「え?記憶喪失?……」 (イベント番号 [2])
  • はい/いいえ選択ラッシュ (イベント番号 403~407)
  • 「それじゃ、あげる~。」きのこバッジ入手 (イベント番号 [3])
  • きのこバッジを調べる (ここでフラグ番号[4]がかかる)
  • マ・ピニョンに話す (イベント番号 [5])
  • 「にっはー!……」ボス戦へ (イベント番号 420)


対象動作のコマンドを探し出す

(ただいま執筆中……)

演習問題
(ただいま執筆中……)

コマンドの検索をする

(ただいま執筆中……)

演習問題
(ただいま執筆中……)

目安箱バナー