No.003: 箱庭諸島2.30スクリプト解説

私の乏しい知識ではどこまで解説できるかわかりませんが、箱庭諸島2.30のスクリプトを解説します。
改造、改良の助けになれば幸いです。

間違い、不足などがありましたら教えてください。(掲示板/メール)

 


 

概略

箱庭諸島2.30はPerlのVersion 5以降で動くように製作されたCGIです。
(確かPerl 5の最初ぐらいから動いた気はしますが、Perl 5.003ぐらいだと確実に動くでしょう。)
5つのスクリプトに分かれていて、全部足しても200kBに満たないぐらいです。
(それでもPerlで書かれたCGIの中ではかなり大きなものだと思います)
ごめん!まだhako-mente.cgiの解説しかできてないです!!

  1. hako-main.cgi

    箱庭諸島のメインルーチン。このスクリプトが状況に応じてhako-turn.cgi、hako-map.cgi、hako-top.cgiを呼び出します。
    他のモジュールに対して変更をした場合、このスクリプトにも改造をしなくてはならない事がほとんどです。

    モジュールの最初の方はCGIやゲームのパラメータを設定する部分があります。
    ここを設定しないと動きません。

  2. hako-top.cgi

    箱庭諸島のTOP画面を表示する為のルーチンです。島の一覧と「島を発見しに行く」「開発しに行く」などの画面です。

  3. hako-map.cgi

    各島のMAPを表示するルーチンです。観光モード、開発モードの表示と、開発モードにおけるコマンドの入力処理を行っています。

  4. hako-turn.cgi

    ターン更新処理を行うルーチンです。「新しい島の発見」にも使われます。

  5. hako-mente.cgi

    新しいゲームを始める時のデータファイル/ディレクトリの作成。バックアップからのデータ復旧などを行う為のモジュールです。
    このモジュールだけはhako-main.cgiから呼ばれるのではなく単独で実行可能です。

    このモジュールの最初にも若干パラメータを設定しなくてはならない部分がありますが、そこの設定はhako-main.cgiの同じ名前のパラメータとあわせておかないとなりません。

動作

ゲーム中の箱庭諸島は、必ず最初にhako-main.cgiが呼ばれます。
そこで「今のモード」、「入力されたコマンド」などによりそれぞれのルーチンを呼び出します。

hako-main.cgiが動き出した直後はhako-main.cgi単独で動いていますが、他のルーチンが必要だと判断された時に、そのモジュールを自分のスクリプトの後ろにインクルードして呼び出します。
これはPerlの仕様上、「実行されるスクリプトはファイルごとにコンパイルされてから実行される」ということを考慮したもので、以前は全部のモジュールが1つの大きなファイルでしたが、CGIとして起動するだけで大量なCPUパワーとメモリーを食ってしまうものでした。
その負担を減らす為に「必要なものは必要な時に読み込んでコンパイルする」という方式に改められたのです。

(この辺の動作が良く分からない人はCGIの仕組みと、Perlの実行される様子を勉強してください。)

hako-main.cgiを実行した時点でいきなり「Internal Server Error:500」が出るときはhako-main.cgiにエラーがあるか、他のモジュールが見つからない時です。

それとは別に、画面の上部に「スクリプト配布元」しか表示されなくなってしまう時は、hako-main.cgi以外のモジュールに何かしらのエラーがあるときです。
直前に行った操作からどこのモジュールでエラーが起きているか推察してください。


設置

一番簡単なのはスクリプトと一緒に配布されているreadme.txtを読む事ですが、ちょっと分かりづらいかもしれないので「超・初心者向け」に書き直します。これを読んで分からない人は頑張って勉強しましょう!!

原文+注釈

―――――――――――――――――――――――――――――――――――
箱庭諸島 ver2.3

字: 徳岡宏樹(tokuoka@taurus.bekkoame.ne.jp)
絵: 小川克人
題字: 稲葉修吾
テストプレイ他協力: 井上友博、小澤武史、さかもと、ほえほえ、ありづか
箱庭諸島のページ: http://www.bekkoame.ne.jp/~tokuoka/hakoniwa.html
―――――――――――――――――――――――――――――――――――

―――――――――――――――――――――――――――――――――――
使用条件
―――――――――――――――――――――――――――――――――――
箱庭諸島2のスクリプトについては、自己責任で使用する限り、基本的には
自由に利用してもらってかまいません。ただし、変更を加えた場合は、変更
したものを配布するには、後述の「配布条件」に従って下さい。

また、ゲーム画面の最上部にある、箱庭諸島スクリプト配布元へのリンク
を外すのは禁止します。デザイン上の変更は構いませんが、必ず最上部に
'http://www.bekkoame.ne.jp/~tokuoka/hakoniwa.html' へのリンクが
存在し、そこでスクリプトが入手できる事がわかるようにして下さい。

付属しているgifファイルは、小川克人氏が著作権をもっています。このゲー
ム用以外の用途に許可なく使用するのは禁止しますし、再配布も禁止します。
(議論を呼んだ1行ですが、箱庭諸島に使う限り、再配布可能だと思います。)

バグを発見した場合等は上記のページまでお知らせ下さい。
(でも本家でのサポートは2001年4月いっぱいで終了してしまいます^^;)

―――――――――――――――――――――――――――――――――――
配布条件
―――――――――――――――――――――――――――――――――――
箱庭諸島2のスクリプトを改変し、それを他人に譲渡、配布する場合には、
以下の制約を課します。

・無料配布であること。
・ゲーム画面のトップに表示される、スクリプトの配布元へのリンクを
消すのを禁止すること。また、それ以外の改造は許可すること。
・本条件と同等に、改造したものの配布を許可すること。
・配布するページにおいて、オリジナルスクリプトの配布元として当サイトへ
のリンクを置くこと。

―――――――――――――――――――――――――――――――――――
設置方法の説明
―――――――――――――――――――――――――――――――――――
――必要なファイル――
必要なファイルは以下の6つ、及び画像ファイルです。

箱庭諸島のページからダウンロードするもの(5つ)
hako-main.cgi
hako-top.cgi
hako-map.cgi
hako-turn.cgi
hako-mente.cgi

これらのファイルは本家からだと「hako-main.txt」の形で入手できます。
ただし、これから後は本家からの配布が終了してしまうといやなので、特別にここにも置いておきます。
LZHで圧縮されているので解凍してからUploadして下さい。サーバにUPしてしまってから解凍するのはめんどくさいと思いますよ。



日本語変換モジュール(1つ)
jcode.pl (ver2以降)

jcode.plはここにあります。ただし、配布条件に違反してるかもしれないので消えるかもしれません。

なお、ダウンロードした段階では、拡張子が'.txt'になっていると思いますが、
それぞれ'.cgi'に変更して下さい。

単純に、ダウンロードした後で名前を「hako-main.txt」から「hako-main.cgi」に直すだけです。
ただ、Windowsのエクスプローラの設定で「設定してある拡張子は表示しない」にチェックが入っていると「hako-main」としか見えなくて混乱するかもしれません。
CGIを設置したい人は「設定してある拡張子は表示しない」のチェックを外しておいた方が良いでしょう。

jcode.plに関しては、ベッコアメなど、サーバーにあらかじめ用意されている
場合もあります。


――設置の手順――
'hako-main.cgi'中の、「各種設定値」のところにある設定値を、適切な値に
設定します。(hako-main.cgiの解説を参照)

hako-mente.cgi中の、「各種設定値」のところにある設定値を、上記で決めた
hako-main.cgi中の値に合うように設定します。
同じにしないとデータファイルが読めないなどの症状が出ます。

CGIが実行可能なディレクトリを作り、パーミッションを755に設定します。
なお、755ではうまく行かないサーバーもあります。その場合は777にして下さい。

そのディレクトリに、前述の5つ(jcode.plを合わせると6つ)のファイルを置きます。
なお、漢字コードは全てEUCにしておく必要があります。
漢字コードの変換できるエディタ、もしくはEUCのまま編集のできるエディタを用意しましょう。詳しくはコラム No.1を参照)

'hako-main.cgi'及び'hako-mente.cgi'のパーミッションを755に設定します。
これも、755でなく、777や、701にすべきケースもあるようです。

CGI実行用でない、通常にアクセス出来る場所に、付属するgifファイルをすべて
置きます。

'hako-mente.cgi'を実行し、「新しいデータを作る」を実行します。

'hako-main.cgi'を実行するとゲームが始まるはずです。

――ファイルの構成――

(カッコの中は設定すべきパーミッションです。サーバによって異なるかもしれません。)

cgi実行可能なディレクトリ(755)/
|
|-- hako-main.cgi (755)
|-- hako-mente.cgi (755)
|-- hako-top.cgi (644)
|-- hako-turn.cgi (644)
|-- hako-map.cgi (644)
|-- jcode.pl (644) ※必要な場合のみ(プロバイダで用意していない場合)
|-- data (hako-mente.cgiによって生成されるディレクトリ)
|-- data.bak0〜3 (hako-mente.cgiによって生成されるディレクトリ)

上記では、'data'とありますが、ディレクトリの名前は設定可能です。
セキュリティのために、なるべく変更するようにして下さい。
hako-main.cgi中で設定できます。
(これは絶対にするようにして下さい。これがされていないでdataディレクトリの名前がバレバレだと他の島の情報、コマンドなどが全部見えてしまいます!!)

―――――――――――――――――――――――――――――――――――

以上です。

 

戻る