$ \DeclareMathOperator{\arccosh}{arccosh} \DeclareMathOperator{\arcsinh}{arcsinh} \DeclareMathOperator{\rank}{rank} \DeclareMathOperator{\rot}{rot} \DeclareMathOperator{\grad}{grad} \DeclareMathOperator{\diver}{div} $

MScripter

MScripter は CLDC 1.1 + MIDP 2.0 上で動作する、 NScripter の非公式互換エンジンです。
日本の携帯電話では、 au のオープンアプリプレイヤ (以下 OAP ) 上で動作します。
ステージななの「Narcissu」動作画面

1ダウンロード

ベータ版です。 完全ではないのでご注意ください。 またご利用はくれぐれも自己責任でお願いします。

2NScripter との相違点など

2.1ファイル容量の限界

OAP では 300KiB までのプログラムしか入れることができません。 そのため、シナリオファイルを入れただけで用量オーバになることがあります。 その場合にはシナリオファイルを分割するなどしましょう。

2.1.1画像ファイルの外部解決

シナリオファイルですら入るかどうか分からない状況で、背景絵や立ち絵を全部入れるのはほぼ確実に不可能です。 そこで MScripter では、画像ファイルを外部の http サーバ上から取得する機能を盛り込みました。 このことを、「外部解決」と呼ぶことにします。

2.2音楽の再生には対応しない

携帯向けということで、音楽の再生には対応しません。 というか容量的に無理です。 どうしても聞きながらやりたい人は、バックグラウンドで Lismo! でも起動しときましょう。

2.3複数行コマンド

NScripter では select 系命令のみ複数行対応でしたが、 MScripter では、 行の最後に ",(カンマ)" がある行は次の行と繋がっているとして認識しています。

2.4OAP のメモリ空間

OAP のメモリには二種類があるそうです。

2.4.1Java ヒープ

これはデバッグモード中に確認できるメモリと同じです。 容量は機種間に差異なく 1.5MiB です。 通常はこのエリアにメモリは割り当てられます。

2.4.2BREW 環境上のヒープ

OAP の実装では、画像データやオフスクリーンイメージなどを、 BREW 環境上のヒープエリアに生成するらしいです。 容量はこちらも機種間に差異なく 6MiB です。 [1]

2.4.3アルファ・ブレンディングについて

OAP では対応していないため、本プログラムでも対応しません。 ソフトウェアでもできないことはない[2]のですが、 計算量が半端ないので、実用的ではありません。

2.4.4エフェクト対応状況

未対応のものは全て左シャッタで表示。
  • ○ 瞬間表示
  • ○ 左シャッター
  • ○ 右シャッター
  • ○ 上シャッター
  • ○ 下シャッター
  • ○ 左カーテン
  • ○ 右カーテン
  • ○ 上カーテン
  • ○ 下カーテン
  • △ ピクセル単位のクロスフェード
    (全てのピクセルを計算していると遅いので、数ピクセルおきに計算しています)
  • ○ 左からスクロール
  • ○ 右からスクロール
  • ○ 上からスクロール
  • ○ 下からスクロール
  • ☓ マスクパターンによるフェード。
  • ☓ モザイクアウト。この命令のあとは、指定された画面をエフェクト番号0
  • ☓ モザイクイン。
  • ☓ マスクパターンによるクロスフェード

[1]余談ですが、このことを知らなくて開発中にかなり悩みました。 WTK のエミュレータ上では問題なく動くのに、実機で動かすとたまにフリーズしてしまうんです…。 プログラムのバグならば、 Exception が投げられるし、実機でしか起きない現象とはなりえないし、メモリが足りなくなってるんだろうな、 ということは大体検討がついたのですが、メモリを使い切っている様子は滅法ない。 しかし、画像の外部解決をしても残りメモリが減らないことに気づいて思ったんです。
「画像とかは違う場所に展開してるんじゃね?」
…って。
いろいろ調べたら、確かにそのとおりでした。 こーゆーこともちゃんと au の資料内に書いといてほしいですね^^
[2]実は回想表示中にだけアルファ・ブレンディングしてます

3ゲームの変換の仕方

3.1必要なもの

  • MScripter 本体
  • NScripter 上で動作するゲーム [1]
  • OAP を搭載した携帯電話 [2]
  • PC 一台。 Windows でも Linux でも Macintosh でも。 [3]
  • Wireless Toolkit (以下 WTK) [4]
  • http or https サーバ。実機にゲームをダウンロードするのに必須です。
  • ( 暗号化済みスクリプトファイルの復号化やアーカイブの unpack の仕方をググれるくらいの能力 )
  • ( やる気 )
  • ( 根気 ) [5]

3.2準備

3.2.1スクリプトファイルの復号化

ゲームの実行ファイルと同じ場所に、 nscript.dat というファイルがあります。 これを復号化しておいてください。
復号化の仕方は、ググればいくらでもありますが、 0x84 をオクテットごとに xor しているだけなので、 C で書くと、
main(c){for(;c+1;printf("%c",c^132))c=getchar();}
こんな感じでしょうか? ( 49 bytes )

3.2.2アーカイブファイルの展開

ゲームの実行ファイルと同じ場所に、 arc.nsa みたいなファイルがあると思います。 これを Susie プラグインなどを用いて展開しておいてください。

3.2.3画像の縮小 ( or 拡大 )

スクリプトファイルの先頭に、
  • ";mode800" という行があったら、$800 \times 600$
  • ";mode400" という行があったら、$400 \times 300$
  • ";mode320" という行があったら、$320 \times 240$
  • 上のどの記述もなかったら、$640 \times 480$
がオリジナルの画面サイズです。
これを参考にアーカイブから抽出した画像ファイルを縮小 ( or 拡大 ) してください。
なお、 OAP の画面サイズは、横が 240 なのでそれを基準にしましょう。
例えば ;mode800 時には、元の画像ファイルを、
\begin{equation} 240 \div 800 = 0.3 \end{equation}
(1)
倍にします。

3.3設定ファイルの編集

3.3.1ビルド・実行スクリプトの設定編集

UNIX 系 OS
midptool.sh の設定を変更します。 各設定値の詳細は、設定ファイル内をご参照ください。
Windows
buildrun.bat の設定を変更します。 各設定値の詳細は、設定ファイル内をご参照ください。

3.3.2MScripter 設定ファイル

res/mscripter.conf の設定を変更します。 各設定値の詳細は、設定ファイル内をご参照ください。

3.4リソースファイルを投入

res ディレクトリ内に、先ほど変換したスクリプトファイルや画像ファイルをコピペします。 ファイル名や投入位置は、 res/mscripter.conf ファイルをご参照ください。

3.5ビルドと実行

どちらの場合でも、 jad, jar ファイルは work/bin 内に作成されます。

3.5.1UNIX 系 OS

ビルド
$ ./midptool.sh build
実行
$ ./midptool.sh run

3.5.2Windows

buildrun.bat をダブルクリックしてマニフェストファイルや jad ファイルや jar ファイルやなどを作成し、WTK のエミュレータを起動します。
成功したら動作確認をします。 run.bat をダブルクリックすると WTK 同梱のエミュレータが起動しますので、動くかどうか確認してください。

3.6実機での確認

エミュレータ上で動作確認できたら、実機で動かしてみましょう。 [6]
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
	<head>
		<title>My MScripter game</title>
	</head>
	<body>
		<p><a href="device:jam?http://epii.homelinux.net/mscripter.jad">Download MScripter game</a></p>
	</body>
</html>
こんな感じの (X)HTML ファイルと一緒に jar ファイル、 jad ファイルを http or https サーバ上にあげます。 詳しくはページ下部の、(@ref{auOAP}{au の資料})などをご覧ください。

[1]自分で購入した物を使いましょう。
[2]海外の携帯でも動くかもしれませんが。
[3]ただしこの記事では Windows XP でのやり方を説明します。悪しからず。
[4]必須ではありませんが、 PC 上で動作確認をするためには必須です。
[5]ふざけているのではなく、本気で重要です。大変なので。
[6]メモリ容量や動作速度が違うのでエミュレータで動いても、実機では動かない、または動作が遅い場合があるかもしれません。

4参考ページ

5資料

5.1コマンド対応状況

コマンドの対応状況。 鋭意製作中。

5.1.1各種設定系

5.1.2表示・演奏系

5.1.3実行制御系

5.1.4新コマンド

6To do

重要順。
  • より多くのコマンドに対応