About WonderWitch 今回のお題:
『短期集中連載 WonderWitch 日記 (1)』
●概要
え〜、一応、題名の通り、私が WonderWitch でプログラミングをしていて気付いたよしなしごと (?) を、
徒然なるままに (??) 書き連ねていくことにしました。まとまってません。
よって、私が挫折したりした場合、この連載は無期限の休養に入ります(笑)
そうならないように頑張りたいものです。
7/28 〜 7/29
WonderWitch が届いたら
とりあえず、WonderWitch が届いたらしなければならないことは、
- インストール。必要な場所にパスを切って、環境変数 TZ の設定も一応。
「環境変数のための領域が足りません」な時は、autoexec.bat に
shell=c:\command.com c:\ /P /E:nn
(nn は 256 の倍数。これが領域のサイズ) で解決。
- WonderWitch サポート Web サイト
にアクセスして、ユーザ登録( CD ケース裏のシリアル No. が必要 )と、
最新版ソフトウェアのダウンロードをする。
- WonderWitch カートリッジの時刻設定。TransMagic で。
"Hello, world!" プログラム
で、無事済んだら、まずは基本の "Hello, world!" から。
Hello, world! とかのソース一式
文字が出るだけです。何かキーを押すと終了。
ここで注意すべきところは、
- \WWitch\samples\hello\hello.c には、先頭に「#define BIOS_INLINE」
が有るが、これは取っ払った方がよい。
- 27 文字 / 行。右端に突っ込むと、次の行の左端から出てくる。(※ 1)
- 1 / 2 バイト文字の表示幅が同じ( アルファベットはフォントが違う )。
- 英語版の TC では 2 バイト文字の扱いに問題があるらしい。( LSI-C は大丈夫 )
2 バイト文字の 1 バイト目と 2 バイト目が入れ替わるとか。Z80 みたい(笑
- .cf の「ファイルモード」は、UNIX 触った人じゃないときっと解りづらい。
実行ファイル (.fx) は「rwx」、その他は「rw」でとりあえず良し。
- makefile は、LSI-C のマニュアルを読めば解るので読む。
※ 1:
2000/07/30 訂正:
嘘でした。28 文字です。\WWitch\include\sys\text.h の 60 行目にマクロがあるから使うと良いかも。
スプライトを動かす
次にいきなりすっ飛んで、キャラクタを動かしはじめる。
文字が動くソース一式
文字が左右に動きます。START か B で終了します。
スプライトって「描く度に消す」が無いから良いよね〜。
ここで注意すべきところは、
- 4 色のキャラクタ使うのは面倒そうなので、とりあえず白黒 2 値で。
- \WWitch\contrib\games\luna\luna.c あたりは参考になるので読む。
文字をキャラクタに変換するコードはこれから抜き取りました。(汗
- 2 バイト文字でも、1 文字ならシングルクォーテーションで囲む。
- display_control() 等の引数・返値に対するビットマスクは、
それぞれのヘッダファイルに載ってるので参照する。
- text_set_screen( SCREEN1 ) → text_screen_init() が無いと化ける。
スクリーン 1 をMegが使ってるらしいので。
- キー入力をチェックして終了する( for() 判定式 )わけだけど、
shell から実行するときに押す A ボタンの入力が影響するらしく、
ここで KEY_A でマスクしても上手く動かない( すぐ止まってしまう )。
Aボタンを使いたいときは、その前にウェイトを入れると良いだろう。
弾が出るプログラム
次は、シューティングゲームの基盤みたいなサンプル。
文字が動いて撃つソース一式
X ボタンで「ぱ」が動きます。B ボタンで弾を撃ちます。
ここで注意すべきところは、
- キャラクタ、スプライトは 512 番まで最初に初期化した方が無難っぽい。
初期化してなかったら、画面上に 8 つ全ての弾が出ているときにだけ、
画面左上に「弾」の文字が出るようになった。原因不明。
- 「スプライトを弄ってからスクリーン消去」では駄目みたい。逆は OK。
- \WWitch\doc\errata.htm は一応読んでおこう。(苦笑
- key_press_check() と key_hit_check() を一度に使おうとする
( VSYNC 1 回の中で、両方を実行する )と、後者が反応しなくなるらしい。
key_hit_check_with_repeat() なら大丈夫みたいだけど、たまに後者のキーが入らなくなるし、
動作速度が半分くらいになる。両方とも原因不明。ソースでは 109 行目。
コメントアウトしてある奴と差し替えてみると解る。誰か助けて〜。
●備考
次は出てきた弾を放物線を描いて動かして、あとは当たり判定ですか。
それだけ出来ちゃえば「ぶろぽん」も近いと思うですがどうよ。
ああ、あとパレット弄りもあるのか。まぁ細々とやっていきたいです。