Click here to visit our sponsor

先行者ゲームをmozilla、Netscape6で動かす

はじめに

本ページでは、シルチョフ兄弟社様による「日本製『先行者』開発プロジェクト」の先行者ゲームを、mozilla、Netscape6で動かす際に必要になった作業について紹介します。

なお、私はjavaをあまり触ったことがありませんので、間違ったことを知らず知らずのうちに書いてしまっているかもしれません、御注意下さい。

更新履歴

2001/12/1
閉鎖のお知らせ

早いもので、ネタが無くなり、更新されなくなってから4か月が経とうとしています。
私自身、最近は先行者ゲームで遊ぶこともあまりなく、シルチョフ兄弟社様の掲示板をときどき覗きに行く程度になっています。
また、このページ用に利用させてもらっている、プロバイダのwebページ領域サービスも12月25日で終了することになりました。

ネタや気力があるならば、他のサービスに移行するとは思いますが、残念ながら今の私は両方とも持ち合わせていません。
そんなわけで、勝手ながら本ページを閉鎖することにしました。

12月25日、プロバイダのweb領域サービスの終了と共に本ページも閉鎖します。
今までどうもありがとうございました。

2001/8/5
2001/7/30
2001/7/27
2001/7/21
2001/7/20
2001//7/13
2001/7/6
2001/7/1
2001/6/30
2001/6/29

1. 動作報告のあった環境

現在、以下の環境で動作することが報告されています。

linux
Windows98
Windows ME
Windows 2000

新たな動作報告について、掲示板でお待ちしています。

2. 作業内容

2.1. 原因の追及

まずは、javaコンソールを開いてエラーメッセージを確認しましょう。javaコンソールは、メニューを"タスク"→"ツール"→"javaコンソール"の順で辿っていくと表示されると思います。
この状態で先行者ゲームを読み込むと、javaコンソールに何かメッセージが表示されて、ブラウザのゲーム画面が表示される所には「ctrl+f5キーを押して再読み込みをして下さい」などと表示されると思います。
例えば、私の環境ではjavaコンソールにこんなメッセージが表示されました。

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.audio)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:272)
        at java.security.AccessController.checkPermission(AccessController.java:399)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
        at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1501)
        at sun.applet.AppletSecurity.checkPackageAccess(AppletSecurity.java:169)
        at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:105)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
        at Main.run(Main.java:124)
        at java.lang.Thread.run(Thread.java:484)
    

ここでミソなのが最初の行のメッセージです。「access denied」→「アクセスが拒否された」、つまり、デフォルトの設定ではjavaアプレットは「accessClassInPackage.sun.audio」(audioってことは音関係の機能ってことでしょうか…)に対する「java.lang.RuntimePermission」(アプレットを実行している時点での許可)を持っていないことを意味しています(たぶん…間違いでないことを祈ります…)。

つまり、「許可していない機能を使おうとしたからエラーになる」→「その機能の使用を許可しても安全だと思うなら許可してやれば動くようになる!」という事です(何をもって安全と判断すればいいのかは難しい問題ですが…)。

2.2. オンライン版で遊ぶときに必要な作業

さて、許可の出し方ですが、以下の内容を持つテキストファイルを作成するだけです。

/* 先行者1ノーマルサイズ */
grant codeBase "http://www.hinden5.com/senkousha/robot/robo.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};

/* 先行者1ビスタサイズ */
grant codeBase "http://www.hinden5.com/senkousha/robot/robowide.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};

/* 先行者2ノーマルサイズ */
grant codeBase "http://www.hinden5.com/senkousha/robot2/online.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};

/* 先行者2ビスタサイズ */
grant codeBase "http://www.hinden5.com/senkousha/robot2/onlinewide.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};
    

これをUNIX(linux)では"~/.java.policy"というファイルに、Windows98では"c:\windows\.java.policy"、Windows2000では"c:\Documents and Settings\ユーザ名\.java.policy"というファイルに保存したあと、ブラウザを再起動すれば遊べるようになると思います。
もし動かない場合は、下記の「ツール」の章も御覧下さい。
なお、Windowsでこのファイルを作成しようとすると「ファイル名を入力してください。」などと怒られることもあるかと思います。その場合には、いったん別のファイル名で保存してから、dosプロンプト(Windows NTではコマンドプロンプト)を使ってファイル名を変更する手があります。例えば、c:\windows\java.policyというファイルに保存した場合には、

ren c:\windows\java.policy .java.policy
    

とdosプロンプトに打ち込むことで、無事ファイルが作成できると思います。

2.3. CD版で遊ぶときに必要な作業

CD版で遊ぶ時にも、オンライン版と同様の作業が必要になります。
ただし、オンライン版とは違い、ゲームの置き場所が人によって異なる可能性がありますので、ちょっと話がややこしくなります。
以下に、.java.policyファイルに記述する内容の例を示します。

/* CD版収録の先行者1ノーマルサイズ。
   OSがWindows98で、CD-ROMドライブがDドライブになっていると仮定。
   ビスタサイズはrobowide.jar */
grant codeBase "file:///d:/robot/robo.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};

/* CD版の先行者2ノーマルサイズ
   OSがWindows98で、CD-ROMドライブがDドライブになっていると仮定。
   ビスタサイズはrobowide.jar */
grant codeBase "file:///d:/robot2/robo.jar" {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
};
    

カンの良い人はわかると思いますが、"grant codeBase"の後に、許可を与えたいプログラムの置き場所を、URL形式で指定するようになっています。
Windowsを使われている方でURL形式が分らない人は、CD-ROMドライブ中の"robo.jar"や、"robowide.jar"を検索し、出てきたファイルをmozilla、Netscape6にドラッグ&ドロップすることで、ブラウザに表示されると思います。

私のWindows98では、以上の作業でCD版の先行者ゲームが1、2共に起動できました。

2.4. CD版をUNIXライクなOSで遊ぶときに追加して必要な作業

さて、UNIXライクなOSでは、CD版の先行者ゲームを遊ぼうとすると1、2共に起動途中でファイルが読み込めずに立往生してしまいます。
それらのファイルには、「ファイル名にアルファベットの大文字が含まれている」という共通点があります。
ところが、CD-ROMではファイル名のアルファベットが全て小文字になってしまっています。そのため、「ファイル名の大文字、小文字を区別する」UNIXの流儀によって、「ファイルが見つからない」→「立往生」となってしまうのです。

この状態を解決する方法は2通りありますが、共にファイルの書換えなどの作業を行ないますので、インストールは必須となります。

2.4.1. ファイル名をリネームする方法

CD-ROMのマウントポイントを"/cdrom"とすると、書き換えが必要なファイルは以下のようになります。

先行者1
元のファイル名 書き換え後のファイル名
/cdrom/robot/t5_cannon2.gif T5_cannon2.gif
/cdrom/robot/me2.au ME2.au
/cdrom/robot/olb.au OLB.au
/cdrom/robot/t5_core2.gif T5_core2.gif
/cdrom/robot/me5_.au ME5_.au
/cdrom/robot/me7_2.au ME7_2.au
/cdrom/robot/g_bsh.au G_BSH.au
/cdrom/robot/pressenter.gif pressEnter.gif
/cdrom/robot/land_ok.au LAND_OK.au
/cdrom/robot/t5_body2.gif T5_body2.gif
/cdrom/robot/lostfocus.gif lostFocus.gif
先行者2
元のファイル名 書き換え後のファイル名
/cdrom/robot2/snd/g_bsh.au G_BSH.au
/cdrom/robot2/snd/land_ok.au LAND_OK.au
/cdrom/robot2/s1message.gif S1message.gif
/cdrom/robot2/s2message.gif S2message.gif
/cdrom/robot2/s3message.gif S3message.gif
/cdrom/robot2/s4message.gif S4message.gif
/cdrom/robot2/s5message.gif S5message.gif
/cdrom/robot2/pressenter.gif pressEnter.gif
/cdrom/robot2/s6message.gif S6message.gif
/cdrom/robot2/lostfocus.gif lostFocus.gif

2.4.2. ゲームをバージョンアップする方法

先行者2のバージョン108bからは、プログラムから呼び出すファイル名のアルファベットを全て小文字にすることで、この問題を解決してあります。
そのため、シルチョフ兄弟社様のページから最新の差分をダウンロードすることで、上記の作業は不要になります。

ただし、先行者1はすでにメンテナンスが行われていませんので、この方法を用いることができません。オンライン版で遊ぶか、CDに収録されているものを上記の方法を用いて、遊ぶことになります。

3. ツール

さて、「javaをあまり触ったことが無い」私が何故上記.java.policyファイルの内容を記述できたのかについてなのですが…簡単な話、ツールがあるんです。そのツールは「policytool」(Windowsではpolicytool.exe)という名前です。
このツール、上記の.java.policyファイルを起動時に読み込もうとします。もし失敗した場合には読み込もうとしたファイル名が表示されますので、.java.policyファイルを作成したのにゲームの読み込みに失敗する場合には、.java.policyファイルを表示されているファイル名にリネームしてみて下さい。
まぁ、ツールとは言っても、メッセージが全て英語だったりとあまり初心者向けではないかもしれませんがね…(苦笑)。
とりあえず、簡単な使い方を紹介しておきます。(以下やっぱり自信がないので口調が怪しくなります(汗;))

起動して最初に出てくる画面
最初の画面のスクリーンショット
この画面で権限を与えるjavaアプレットの追加、削除ができるようです。"Policy File"には現在起動時に読み込んだファイルの名前が表示されています。
また、"Add Policy Entry"、"Remove Policy Entry"を押すことで、javaアプレットの追加、削除ができます。
そして、"CodeBase..."の所に表示されているリストを選択してから"Edit Policy Entry"を押すと、選択したアプレットに対してどんな権限を与えるか編集する画面が表示されます。
"Keystore"ってのは…何なんでしょう?(汗;)
権限の追加、削除、編集を行なう画面
権限の追加、削除、編集画面のスクリーンショット
この画面でjavaアプレットに対する権限の追加、削除、編集ができます。
最初の画面でjavaアプレットを追加した場合もこの画面が表示されます。その場合は"CodeBase"の所に権限を与えたいアプレットの場所をURLで指定します。
例えば、"c:\senkousha\robot"ディレクトリに先行者ゲームをインストールしてある場合(もうちょっと正確に言うと、"robo.jar"、"robowide.jar"という名前のファイルがそのディレクトリに存在する場合)、"CodeBase"には"file:///c:/senkousha/robot/robo.jar"(ノーマル版の場合)、"file:///c:/senkousha/robot/robowide.jar"(ワイド版の場合)を指定します。
"SignedBy"ってのも…よくわかないのでパス。
後は、先ほどの画面と同様に追加、削除、編集をしましょう。
もちろん、編集が終ったら"OK"です。
どんな権限を与えるのか指定する画面
与える権限を指定する画面
例によって(?)先の画面で"Add Permission"、"Edit Permission"のどちらを押してもこの画面が現われます。"AddPermission"を押してこの画面を出した場合には上のスクリーンショットでは"RuntimePermission"と表示されているドロップダウンリストには"Permission:"と表示されます。
また、画面右側のテキストボックスには左側のドロップダウンリストで選択したアイテムに応じて文字列が入るようになっています。
さて、それぞれのドロップダウンリストをどう選択していけばいいのか…はっきり言ってよくわかりませんが(汗;)、まあ、javaコンソールのエラーメッセージをみながらテケトーに選択しました(大汗;)。
ちなみに、上のドロップダウンリストでの選択内容が下のリストの選択肢に影響を与えるようなので、1番上から選んでいくと混乱せずに済むかもしれません…。
あと1つ、"Target Name:"で"accessClassInPackage.<package name>"を選択すると、テキストボックスにも同じ文字列が入る訳ですが、先行者ゲームを動かすにはこの"<package name>"の部分を"sun.audio"に書き変える必要があります。(まぁ、この選択肢はもともと書き変えること前提に"<package name>"なんて書いてあるのでしょうけど。)
例によって"Signed By"ってのは謎です(汗;)。
満足のいく結果になったら"OK"しましょう。
編集が終ったら…
ここまできたら後はわかりますよね?(笑)
もちろん、必要に応じて保存して、終了です。
保存は最初の画面のメニューで"Save"(現在のPolicy Fileに上書き保存)、"Save As"(新規にファイルを作成して保存)を選べばOKです。
終了はもちろん、メニューから"Exit"です。

policytoolの使い方は以上です。

4. 既知の問題

5. 最後に…

謝辞

多くの方々による先行者フィーバーが無ければ私がこの文章を書くこともなかったでしょう。
先行者の存在を教えてくださった侍魂の健様、中華キャノン発射!のGIFアニメを作成された悠様、「日本製『先行者』開発プロジェクト」のシルチョフ兄弟社様、私を最初のT-5まで導いてくださった、攻略サイトの管理人の皆様(いまだT-5倒せません(泣))、果敢にチャレンジを続けている中華陸軍機甲部隊の皆様、そして、たくさんの先行者を愛する方々に感謝いたします。

以上、つたない文章でしたが最後までお付き合い頂きましてありがとうございました。
では…。


Last modified: Mon Jul 30 11:33:44 JST 2001
アクセスカウンタ

Click here to visit our sponsor