Wonder Witch 入門

The way of Wonder Witch
Rinjian

1.はじめに

x680x0同好会(以下x68)の会誌を手に取られた方、或いは部員のにこやかなる笑顔 と共に勧められて否応無く会誌を手にしてしまった方、初めまして。 本日はx68の調布祭展示にお越しいただきまして、誠にありがとうございます。

本来ならば、私もx68部員の端くれ、作品展示をもって挑むべきところではあります が、 なにぶん制作は怒涛の勢いで遅れに遅れ、本原稿執筆時点においては、作品展示の目 処が立っておりません。 (と言うか去年も何も展示してないぞ。という突っ込みは却下。)

故にこの度はWonder Witch(以下WW)及びWWにおける一連の作業の流れについて大雑把 に書き記す事にいたしましょう。 展示作品の解説が出来ればよかったのですが、出せそうに無いのでは仕方ありません し。 (現在製作中のゲームがあるにはあるが、スケジュール的にかなり厳しい。語学の検定 試験あるし。というか昨年 度の検定も25日だったような。 )。 お茶を濁すような情けないていたらくですが、 駄文にお付き合いいただければ幸いであります。

2.WonderWitchとは

さて、WWと言われても何のことだか分からない、そういう方が殆どでありましょ う。 (だってx68内でWWいじってるの、俺だけだもの。多分。) ごくごく簡単に説明しますと、WWとはバンダイから発売中のWonderSwan(以下WS) WonderSwanColor(以下WSC) (さすがにこれは知っていますよね。ねぇ。(泣)、 向けホビープログラミング用開発キットのことをいいます。

これを使いますと、携帯ゲーム機上で動くものを作れる楽しみが待っています (がしかし、その知識は他に活かせない。)。 開発用言語にはC言語が採用されていますので、プログラミングに比較的慣れ ている人にとってはとっつきやすいことでしょう。 (あくまで、言語としては巷に参考となる文献が氾濫しているというだけの 話。言語が習得しやすいとか、扱いやすいかは別次元のこと。どうしたってハー ド依存だし。WWでC言語を始めるというのは、かなりの暴挙。というか苦しみま す。) なお、開発元はキュート (http://www.qute.co.jp/)、 販売元はバンダイ (http://www.bandai.co.jp/)となっています。

3.開発機材を揃えよう

WWとは何かがわかったところで、実際にゲームを作るのに何が必要なのか。
というわけで、揃えるべき機材を説明しましょう。

◯電脳

まずはパソコンがなくては話になりません。以下の制限がありますが。

Windows98,NT4.0,Me,2000のいずれかが動作するPC/AT互換機。
CPUがPentium 133MHz以上であること。
メモリ32MB以上(推奨64MB以上)。
ディスプレイ解像度は640×480ドット以上、256色以上。
CD-ROMドライブ必須。
シリアルポート(RS232C 9600/38400bps DSUB9 オスコネクタ)
HDD空き容量20MB以上。
◯ワンダーウィッチ

これは、一部店舗による販売と、通信販売(代引利用可)にて購入が可能です。

通信販売
ララビットマーケット (http://lalabitmarket.channel.or.jp/)

店頭販売
秋葉原ぷらっとホーム http://www.plathome.co.jp/
大阪日本橋ふぁすとばっく (http://www.eni.co.jp/)

◯スワン

これはWSCを一台揃えておけばよいでしょう。

◯通信対戦ケーブル

必要とあらば別途購入してください。 通信対戦ソフトを作るのでなければ購入しなくて構いません。 あればあったで、便利でしょう。

◯予備のWWカートリッジ

下手なプログラムを書いて、暴走させたが故にカートリッジが逝ってしまったときの 備えに一本あると幸せ。 (半年も経たぬ内にサポートに電話する羽目になった時に実感。)

4.WWの製品構成

さて、WWには何が入っているのかというと、かなりシンプルな構成です。 CD-ROMにケーブルとカートリッジとマニュアル一冊。

詳細は以下の通り。

PC WonderSwan接続ケーブル(RS232C シリアル接続)1組。(スワンケーブルとクロスケーブルをつないだもの。)
WonderWitch専用カートリッジ(OS, Font 内蔵)1個。
Flash Memory 512KB。(最大384KB分のプログラムファイルを格納可能。)
SRAM 256KB。(最大64KB分のワークファイルを格納可能。)
RTC(時計/カレンダー機能)。
オリジナルOS(FreyaOS)。バージョンアップ可能。
日本語フォント(恵梨沙フォント、8x8 dot、第1/第2水準)。
CD-ROM (ソフトウエア)1枚。
ファイル転送ツール(XMODEM プロトコル。Windows 用)。
C ヘッダファイル、ライブラリ、サンプルソース。
付録Cコンパイラ(TurboC,LSI C-86 for WW)。
マニュアル 1冊。

5.WWの特色

WW向けにゲームを作る際にはスワンというハードウェア上の制限を考慮する必要があ ります。 当たり前のことですが。 ) 表現できる限界というものをきちんと把握しておきましょう。

まず、WWでの画面構成について触れます。 WWではスクリーン、スプライトの概念があります。 それに加えて、LCDパレットの操作が加わってきます。

5.1 スクリーン

スクリーンとは256×256ドットの仮想的な画面です。 仮想的と表現されるのは、実際の表示領域が144×224ドットである為です。 これがSCREEN1、SCREEN2というように2枚存在します。 この2枚のスクリーンはSCREEN1にSCREEN2を重ねたようにして表示されます。

スクリーンに対しては、キャラクタと呼ばれる8×8ドット単位での書き換えを 行います。 (当然、座標指定はキャラクタ単位。) 丁度、タイルを敷き詰めていく感覚です。 キャラクタ単位なので主に背景などの描画用に使われるものです。

スクリーンにはハードウェアスクロール機能がついているので、1ドット単位のスク ロールが可能です。広範囲の移動操作が必要な際に用いられます。

5.2 スプライト

スプライトとはキャラクタ1個分の大きさで(つまり8×8ドット)、表示位置を1ドット 単位で指定できます。 (画面左上を(0,0)とする座標系。) 従って、画面上を動き回るグラフィックに利用されます。 スプライトはSCREEN2に対して優先度を指定できます。つまりどちらを上に表示する かを決めることが可能です。

5.3 LCD

モノクロ編 WWのLCDパネルは16階調の表現が可能ですが、同時表示が可能なのはこのうち8階調ま でです。この8階調をLCDカラーマップといいます。 パレットは、この8階調の中からさらに4色を厳選して用います。 こうして設定したパレットがキャラクタに適用されます。 (パレットは16種類設定可能。カラーライブラリを用いた場 合も使用可能パレット数は同じ。)

カラー編 カラーライブラリを用いる場合、4種類のモードを選択します。

  1. グレースケール
  2. 4色カラー
  3. 16色カラー or 16色パックトカラー

グレースケールモードはWSとの互換あり。WSソフト向けにデフォルトでは、こ のモードで動作。 既存のWS向けソフトを簡易的にカラー化する。ただし、キャラクタあたり4色まで。 キャラクタあたり16色が設定できる。よって最大同時表示可能色は241色 (16色のうち1色は透明色扱いのため、15×16パレット+ボー ダーカラー 1色。)。 カラーとパックトカラーの違いはその内部表現にあります。通常は気にする必要はあ りません。

5.4 Sound

スワンの音源なんですが、4chのPCM音源搭載。でスウィープ及び、ノイズ機能が あります。 スウィープ機能、及びノイズ機能は、3ch及び、4chを使用します。 曲データをMML (Mobile Markup Languageではありません。 Music Macro Languageです。確か。) で作り、サウンドIL ILとはインダイレクトライブラリのこと。) を利用して鳴らすのが一般的。ただし、ILを利用していないソフトも確か存在します。 サウンドBIOS呼んで自前処理 (中には理科年表を調べて、自分で周波数設定をして鳴らしている人もいる。と いうかTrot Soundではその方法を取った。) をすることも可能ですので。 MMLについては説明略。この辺はサークルの音楽屋さんに依頼(Trot Poker制作時。ただし、現在は非公開。)したので。

6.Hello,World!

さて、手元に機材が既に揃っているとして、話をすすめます。 としたいところですが、まず持ってませんよね。というわけで触りの部分だけの説明 にとどめます。

6.1 初歩の初歩

WWの典型的なプログラムが以下のコードです。
int main()
{
 if(wwc_get_hardarch()==HARDARCH_WS){
  text_screen_init();
  display_control(DCM_SCR1|DCM_SCR2);
  text_put_string(3,9,"このソフトはワンダースワンカラー専用です。");
  text_put_string(7,15,"-Press any key-");
 }
 key_wait();
}

上記のコードは、WSでWSC用ソフトを起動するのを防止するためのものです。 WSならば画面を初期化し、テキスト表示 ( WWには厳密にいうとテキストとグラフィックの区別は無いといっていい。 要は文字グラフィックを描画しているようなものだからだ。 その証拠にカラーではフォントデータの水増しをしないとテキストBIOSは使えない。 ) をし、キーが押されたら終了。 あとは、処理内容を追加していくだけです。

6.2 素材の準備

さて、処理内容を追加していくだけ、と書きましたが、テキストだけでは面白く ないですね。というわけで、グラフィックデータを追加します。 WWの良いところは、下手糞な絵でもそれなりにみえるという魔法が効くことです。 (残念ながらカラー化すると通じない。) そんなに気負うことはありません。 (とはいえやはり凄腕の方は居られるわけで。 Witchの限界まで挑んでいる作品に出くわすと、先は長いなとため息。) 。 ただ、グラフィックデータは画面周りに直接影響がでるので、ある程度きちんと 細かいとこまで決めとかないと、後で泥沼。 (サイズの変更とか。)

グラフィックはモノクロ用ならば256色ビットマップを、カラー用ならば16色ビット マップが必要です。出来たらWWに付属するbmpcnvを使って変換します。 この際、ヘッダファイル取り込みか、リソース形式とを選択します。完全に好みの問 題ですね。曲データなんかは問答無用でリソース扱い (WWではリソースファイルという区分があり、素材を別ファイルとして管理する ことが可能になっています。 リソースはバイナリ生成時に結合します。あるいはmmap()で逃げる手もある。) ですが。ま、リソースで扱おうとするのはやや面倒だったり。

6.3 プログラミング

さて、素材が準備できたところで、実際のプログラミングをもう少し説明しま す。 WWではエディタは各個人の日頃から使い慣れているものを使えば良いです。 要は.cのソースファイルさえ用意できればいいのですから。 Tera Pad あたりが個人的にはお勧めです。

統合開発環境は無いので、基本的にはDOSプロンプトと長いお付き合いです。 有志の手によって統合開発環境も提供されています。 私は使っていませんので良く分かりませんが。

それはそれとして、WSとWSCの区別は既にやりました。 その後どんな風になるかを具体的に載せてみます。 例によって相当省略していますが。

 #define BASE 0
 #define CHARA witch_height*witch_width
 #include "witch.h"
 ..
 int i;
 ..
 wwc_set_color_mode(COLOR_MODE_16COLOR);
 wwc_clear_font();
 for(i=0; i<16; i++)
  wwc_palette_set_color(0,i,palette_witch[i]);

 wwc_font_set_colordata(BASE,CHARA,bmp_witch);
 for(i=0; i<16; i++)
  witch[i]= i|WITCH_PAL;

 screen_fill_char(SCREEN2,0,0,4,4,witch);
 ..

こんな感じですね。あらかじめ32×32ドットのwitch.bmpをコンバート (bmpcnv -m2 -c witch.bmp) しておきます。するとwitch.hにはbmp_witchというデータ配列が生成されますのでそいつを使います。 screen_fill_char()はキャラクタ単位であることに注意して下さい。

要は、カラーモードを設定してフォントデータを初期化。 パレットデータを設定し、キャラクタデータを登録。 後は登録したデータを元にして、描画。といったところです。

6.4 コンパイル

さて、ソースを書き終えたら、いよいよコンパイルです。 コンパイルにはWWに付属しているLSI-C for WWを使います。 Turbo Cも付属していますが、特別な理由の無い限り、LSI-Cのほうが無難 (Turbo Cは英語版。)です。 最近ではDigital Mars C++用のスタートアップルーチンが提供されている のでDMCコンパイラを使うことも出来ます。 さて、コンパイルエラーが出なくなるまでソースと格闘です。 ここが一番の峠ですね。

6.5 転送形式への変換

コンパイルが無事に通ると、バイナリファイル.bin(ここ で生成された バイナリを.exeにリネームして実行してみるのは止めましょう。)が生成され ます。 但し、このまではカートリッジに転送できませんのでmkfentを使用します。 これにより.fx形式のファイルが吐かれます。 ちなみにこのときにリソースファイルの結合も行われるのです。

6.6 転送

.fxファイルが出来たら後はカートリッジに転送するのみです。 WS又はWSCと電脳とをケーブルでつないでTransMagicからカートリッジへと送り込み ます。 さすがに64KBクラスの実行バイナリは転送にストレスを感じますが、たいていのソフ トに関してはそれほどでもありません。平均して20KBから30KB程度のソフトが多 いです。

6.7 実行

転送が終了したら、後は実行あるのみ。 いかにコンパイルが通っていようとも、よくバグが見つかります。 うっかり無限ループで強制終了することになるとか。セグメント周りの罠 (これ、かなり凶悪。) に嵌ったりとか。

6.8 完成

バグも出なくなったところで無事制作は終了です。 (仕様です。と言い切ってしまえれば幸せか。) これで晴れて作品を公開することが出来ます。 場合によっては未完成のまま出したりもしますが。(いや、 自分では気 付かないバグを指摘してもらうことも出来ますし。) WWでは、アップロードサイトは以下の2つがあります。ベクターにもたしかコーナーがあったはず。

7.終わりに

以上、どうしようもなく駆け足の説明となりましたが、如何でしたでしょうか。 ( だから早く会誌原稿を書くべきだと言うのに。 〆切当日になって「部会開始まであと一時間だ。ぐわぁっ。」とならなくて済んだは ずなのに。 ) WWが手元にない方が殆どでしょうから、非常に大雑把な話に終始 (というか書いてる本人も良く分かってないぞ。) してしまいました。 もしWWへ興味を抱かれた (まだ売ってるのだろうか。プラットホーム行ってないから なぁ。) のなら、以下のサイトを参考にしていただければと思います。

WonderWitch サポー ト Web サイト FAQおよび製品紹介等。

www.WonderWitch.com ↑公認以上/公式未満↓というコミュニケーションポータルサイト。

WONDER WITCH LINK SITE!! 多数のWWソフトが登録されている。リンクの網羅率高し。

Hiro's Refresh Homepage(ウィッチ同盟) ウィッチ同盟のの元締め。同盟といっても20サイト弱。 リンク数だけならWWLSの方が多いのが泣ける。

ウィッチの杜 ウィッチに関するニュースサイト。最近はニュースが...。

それでは、また来年にお会いしましょう。Rinjian

Copyright (C) 2001 Rinjian