About WonderWitch 今回のお題:
『短期集中連載 WonderWitch 日記 (5)』


●今日の一発目

更新が遅れてるのは、挫折したからじゃありませんよ〜。

8/7 〜 8/22

一発ネタです。しかもまだ仕上がっていません。 関係者の方、問題が有れば、メールで連絡していただければ直ぐに消します。
連打測定器 2 for WonderSwan Ver.0.10

動作はモノホンの動きから見た目で判断しました。高校1年の時に教えて貰った、 輪っかになってるキューで実現。画像はエミュレータのスクリーンショットからですが、 もちろんカセットは持っているので許して下さい。
一応、分からない方のために書いておくと、 元ネタは、ゲームレビューにも書いた、 「迷宮組曲」のタイトル画面です。目指せ16連射。

ソースの分割は、Ver.0.20 でやる予定です。 1 行 80 桁制限( 個人的な趣味 )のために見づらくなってますがご勘弁を。

「テキストウィンドウを作って表示」したいときは以下のようにする。

  1. screen2_set_window() で、位置とサイズを「ピクセル位置で」指定
  2. text_set_screen() でテキスト用スクリーンを設定
  3. text_window_init() で初期化。座標は「キャラクタ位置で」
  4. display_control( DCM_SCR1 | DCM_SCR2 | DCM_SCR2_WIN_INSIDE ); で、SCREEN1 に画像、SCREEN2( ウィンドウ )にテキストが表示される。

……今回書き留めておく事はこのくらいでしょうか。

●備考

www.WonderWitch.com の ML で前に出た話題ではありますが、あまり複雑すぎるマクロを組むと、 上手く動かないので注意です。私はこれでまるまる 3 日間くらい悩みました。(苦笑

例えば、

#define EXIST( x ) ( ( x ) ? 1 : 0 )
/* 位置xの色を得る */
unsigned short get_pixel( unsigned short w, int x )
{
    return ( EXIST( w & ( 0x8000 >> x ) ) << 1 ) | EXIST( w & ( 0x0080 >> x ) );
}

このくらいの複雑さのコードになると、期待した動作が得られません。 計算用に次々とレジスタに値をぶち込んでいって、その結果、 最終的にレジスタが上書きされてしまうようです。 ( x86 アセンブラは良く知らないので、詳しくは解らないのですが )

もちろん、

unsigned short get_pixel( unsigned short w, int x )
{
    unsigned short r = 0x0000;
    r |= EXIST( w & ( 0x8000 >> x ) ) << 1;
    r |= EXIST( w & ( 0x0080 >> x ) );
    return r;
}

と書き換えてやればいいだけのことです。 自動変数はスタック上に取られますから問題はありません。 ただ、この場合、前者の方が可読性が良さげなのがちょっと気になりますね。

また、LSI C-86( に限った事じゃないかも )の方には、似たような仕様で、 「関数を繋げすぎると上手く動かない」ってのがあったような気がします。

str = malloc( sizeof( char ) * max( sprintf( buf, "%f", pow( f, 3 ) ), sprintf( buf, "%e", pow( f, 3 ) ) ) );

位になると多分動かないんじゃないでしょうか。(笑
# 考えてみれば、WonderWitch って malloc 無いやん……。

現在待機中(及び進行中)の企画を今一度リストアップ。増えたりしたので。

最後の 2 つは設計から始めないと成らないので一寸難しいかも。 進行速度は pulicker 君の企画とドット打ちに掛かっています(笑

つぎは音を鳴らしてみたいと思います。 ボタンを押したときの「くぅぃ〜ん」という例の音と、 START ボタンを押したときのジングルですね。


戻る