フレームバッファに直接アクセスする ONScripter on Android

Since: May 30, 2010
Last updated: May 30, 2010 (パッケージ更新、更新内容はONScripter 開発日誌)

はじめに

特に理由が無い限り、このページのバイナリではなく ONScripter on Android のページ のバイナリを使 用してください。

フレームバッファ (/dev/graphics/fb0) に直接アクセスすることによっ て Android 上で動作する ONScripter のバイナリパッケージを配布します。実行には root 権限が必要 です。SDL など必要なライブラリは全て静的にリンクされているため、単体で 動作するはずです。

現在のところエミュレータ(Android 2.2)上でしかテストしておりません。 ただし 以下の手順を見てもわかるとおり、コンパイルは Android のバージョ ンに非依存なので、他のバージョンの Android でも動作すると思います。何 か要望があればご連絡下さい。

バイナリパッケージ

制限・注意事項

  • root 権限が必要です。
  • ESC キー(=マウス右クリック)はホームボタンで代用しています。
  • 音は鳴りません。/dev/eac がオーディオデバイスのようですが、SDL から使う方法が分かりません。動画再生も無効にしてあります。
  • Emulator 上のマウスカーソルが実マウスカーソルに追従しません。キーボードショートカットでカーソルを移動してください。
  • コンパイル時に -DPDA と -DPDA_AUTOSIZE を指定しています。解像度は画面いっぱいに自動調整されます。
  • Emulator + SDL では実マウスが左クリックくらいしか効かないので、キーボードショートカットを駆使してください。
  • キーボードショートカットがスクリプトから無効にされないように、起動オプションで --force-button-shortcut を指定した方がいいかもしれません。

実行方法

/sdcard にゲームのファイル一式(nscript.dat, arc.nsa, default.ttf な ど)があるとします。

> adb push onscripter_android /sdcard
> adb shell /sdcard/onscripter_android -r /sdcard

開発環境の導入

ここでは当方の環境(Linux Debian/squeeze)における開発環境の導入方法 を説明します。

Emulator の導入方法については、まずAndroid SDK Starter Packageから自身の環境に合わせて SDK インストーラをダウンロードして 実行してください。インストーラの実行に Sun JAVA が必要です。Eclipse や NDK は必要ありません。その後の Emulator の設定方法などについてはグーグルなどで調べてください。

クロスコンパイラ

Download Sourcery G++ Lite Edition for ARMより GNU/Linux on ARM 用のクロス コンパイラのインストーラ (IA32 GNU/Linux Installer) をダウンロードして 実行します。

> sudo sh arm-2010q1-202-arm-none-linux-gnueabi.bin

インストール先は、例えば /opt/Sourcery_G++_Lite とします。

環境変数

以下のファイルを作成し、クロスコンパイルをする前に、source dev-arm-android.sh として環境変数を設定します。

dev-arm-android.sh:
setenv PATH /opt/Sourcery_G++_Lite/bin/:/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi/bin/:$PATH
setenv LD arm-none-linux-gnueabi-ld
setenv CC arm-none-linux-gnueabi-gcc
setenv CXX arm-none-linux-gnueabi-g++
setenv LDFLAGS -L/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi/lib
setenv CFLAGS -I/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi/include
echo "Altered environment for Android Development ARM"

SDL-1.2.14

SDL本家より SDL-1.2.14.tar.gz をダウンロード。

SDL-1.2.14/src/video/fbcon/SDL_fbvideo.c の中で、 "/dev/fb0" を "/dev/graphics/fb0" に2個所置換しま す。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-video=yes \
--enable-cdrom=no \
--enable-joystick=yes \
--enable-loadso=no \
--enable-esd=no \
--enable-arts=no \
--enable-pulseaudio=no \
--enable-video-fbcon=yes \
--enable-shared=no \
--enable-sdl-dlopen=no \
--enable-video-x11=no \
--enable-x11-shared=no \
--enable-dga=no \
--enable-video-dga=no \
--enable-video-x11-dgamouse=no \
--enable-video-x11-vm=no \
--enable-video-x11-xv=no \
--enable-video-x11-xinerama=no \
--enable-video-x11-xme=no \
--enable-video-x11-xrandr=no \
--enable-video-photon=no \
--enable-video-carbon=no \
--enable-video-cocoa=no \
--enable-video-fbcon=yes \
--enable-video-directfb=no \
--enable-video-ps2gs=no \
--enable-video-ggi=no \
--enable-video-svga=no \
--enable-video-vgl=no \
--enable-video-wscons=no \
--enable-video-aalib=no \
--enable-video-qtopia=no \
--enable-video-picogui=no \
--enable-video-dummy=no \
--enable-video-opengl=no
> make
> sudo make install

libjpeg 8b

Independent JPEG Groupより jpegsrc.v8b.tar.gzをダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-shared=no
> make
> sudo make install

zlib-1.2.5

zlibより zlib-1.2.5.tar.gz をダ ウンロード。

> configure --static --prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi
Makefile: line 171 を以下のように修正
	-cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)
> make
> sudo make install

libpng-1.2.43

libpngより lbipng-1.2.43.tar.gz をダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-shared=no
> make
> sudo make install

SDL_image-1.2.10

SDL本家より SDL_image-1.2.10.tar.gz をダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-shared=no
> make
> sudo make install

SDL_mixer-1.2.11

SDL本家より SDL_mixer-1.2.11.tar.gz をダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--disable-music-mp3 \
--disable-music-ogg --disable-music-native-midi \
--disable-music-cmd --disable-music-mod \
--disable-smpegtest \
--enable-shared=no
> make
> sudo make install-lib
> sudo make install-hdrs

bzip2-1.0.5

The bzip2 and libbzip2 official home pageより bzip2-1.0.5-tar.gz をダウンロード。

Makefile: の下記の行を変更

CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar
RANLIB=arm-none-linux-gnueabi-ranlib

PREFIX=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi

all: libbz2.a bzip2 bzip2recover
> make
> sudo make install

freetype-2.3.12

the Free Type Projectより freetype-2.3.12.tar.gz をダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-shared=no
> make
> sudo make install

SDL_ttf-2.0.9

SDL本家より SDL_ttf-2.0.9.tar.gz をダウンロード。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--without-x \
--enable-shared=no
> make
> sudo make install

mad-0.15.1b

MAD: MPEG Audio Decoderより libmad-0.15.1b.tar.gz をダウンロード。

MADは整数計算のみでMP3をデコードするライブラリです。ARM系のCPUでは 浮動小数点計算が非常に遅いため、ONScripterでは、SMPEGに差し替えこれで MP3をデコードします。

> configure \
--prefix=/opt/Sourcery_G++_Lite/arm-none-linux-gnueabi \
--host=i386-linux \
--target=arm-linux \
--enable-fpm=arm --enable-speed --disable-debugging --enable-sso \
--enable-shared=no
> make
> sudo make install

ONScripter

最後に、ONScripter のページから最 新の ONScripter のソースをダウンロードしてコンパイルします。strip した 方がサイズ小さくなっていいと思います。

> make -f Makefile.Android
> arm-none-linux-gnueabi-strip onscripter_android