正直日記



2006/06/24

_ PortMIDIで遊ぶ
折角だからMIDIにも対応してみる。俺は阿呆なので、MMSystemのMIDI APIに
挫折した経験があるのだが、PortMIDIは俺が理解できる程度には簡単だな。
latencyが指定できるからFM音源との同期も楽だね。
_ 「自ニュF視点」か……うむ。
http://news.2-3-0.org/comment/comment_200606_442.php
[#5] ところで自ニュF視点だからか、俺から見るとFを参考にした感がアリアリなんだが。
俺から見ると自ニュFは自ニュを参考にした感がアリアリなんだが。 リダイレクタの文面まで一緒なのはどうかなあと思った覚えがある。 それにしてもFは相変わらずチャンコロがどうのと毎日相変わらずな感じが バンバンだなあ。そういうのはぁゃコロにやらしときゃいい。いや、むしろ ぁゃコロと手を組んでついでにナミコロとも手を組んで、完全にチャンコロ を排除した理想の投稿型アングラニュースサイトでも作ればいいのに。勿論 投稿したニュースは分割したバイナリで提供され、ニュースを見るためには 結合パスが必要。パスの入手にはお礼のコメントが必須となり、えーと五行 以上でお願いします。

2006/06/23

_ しまったー
HW LFOは5.56Hzに設定するのか。どおりで一部の音色の鳴り方が違うわけだ。
リリースしたのが1999年だから、6年近く気づかなかったことになるな。
_ SDL_Audioで遊ぶ
遊ぶっつうても、バッファ確保して再生準備が出来たら後の処理は全てこち
らでやるから、あんまり遊んでる感じがしないな。とりあえず昔作ったナニ
を移植してみることに。

で、VC++で作ったもの(正確にはHigh C/C++で作って、それをVC++に持って
きたのだが)がそのままgcc4でコンパイル出来るなどとは思っていなかった
が、まさかfmgenがつまづくとは……。

2006/06/22

_ やる気がねえ〜
ここ最近はめんどいめんどいばかり書いていて、なぜこんなにやる気が無い
のかというと持久力と忍耐力が無いから。そんな奴がやるきレス度MAXになる
と、刺激を求めて他のことに手を出すようになる。

というわけでSDLをインストールして適当に弄っているのだがSDL_HWSURFACE
 | SDL_FULLSCREENでサーフェスが作れない。

SDL_putenv("SDL_VIDEODRIVER=directx") は当然してあるとして、他に何か
必要なんだろうか。

とりあえずほっといて、SDL_Audioでも弄るかな。

2006/06/21

_ パレットが足りない


16色全て真っ白なパレットが欲しくなって困った。しかし今更パレット配置
を変えるわけには……いや、いくけどさ。めんどい。

キャラタイルは必要に応じて再配置出来てるわけだから、同じ方法でキャラ
パレットも動的に再配置出来るようにすればいいんだよな。次からはそうし
よう。

2006/06/20

_ 敵スクリプトを考える
その前にMMLについて少し。

MMLは「T120 L16 C4D4EFGA」みたいに記述するわけだが、ここで「C4」につ
いて考えてみると、これはC(ド)を発音してから四分音符=0.5秒の時間
何もしないということを意味しているのだ。

これって敵ス(中略)

書くのがめんどくなったので大雑把にすっ飛ばすけど、SMF→MMLコンバータ
があれば、このようなMIDIコントローラを駆使してリアルタイムに敵の挙動
を定義することも可能なのだよ!

コンバータは過去に作成済なので、やろうと思えばすぐにも試せるのだが、
めんどいので誰か代わりにやってみてくれ。ていうか、めんどいばっかりで
中身が無いな。俺は近いうちに息をするのがめんどくて死ぬ。

2006/06/16

_ OO度判定、再び
聖書で再挑戦してみる。「光あれ」で世界が誕生するなんてOO的じゃないか?
まず創世記を全部突っ込んでみた。

http://ebible.org/web/Genesis.htm
bibleさんのOO度は39点です!
あんまりかっこよくないのでウォーニングです。ひどいものですよ実際。
こりゃあかん!まあ確かに、全部突っ込んだら非OOな文面の割合が多いので こうなるのも無理はないか。「光あれ」の部分だけ抜粋して突っ込んでみる。
God said, “Let there be light,” and there was light.  God saw the
 light, and saw that it was good. God divided the light from the 
darkness. God called the light “day,” and the darkness he called 
“night.” There was evening and there was morning, one day.
その結果……
GodさんのOO度は93点です!
神です。なんかUMLとかXPとかJavaで.Netです。すごいです。
うぉおー!神すげー!さすが神!
_ カツカツやがな(ライン制限編)
VRAMに多少余裕が出てきたので、調子に乗ってデカキャラをバンバン出して
いたら、平気でライン制限に引っかかりまくってた。

128x128が6個
64x64が5個
64x32が4個
32x64が1個
32x32が6個

これら全てのスプライトが同時に横並びになる可能性があり、実際に横並び
すると 1568 ドットになるわけだわ。ライン制限が 1210 ドットなので 300
ドット分のスプライトが消えてしまうのだ。うーん 128x128のスプライトを
豪快に減らすかー。

どうでもいいけどVisualboyAdvance 1.8.0-beta3はライン制限がそれなりに
再現されるので素晴らしいと思った。いちいち実機に持っていって確認しな
くて済むものね。いつから再現されるようになったんだろう?
_ OO度判定
http://d.hatena.ne.jp/shinichiro_h/20060615

bullet.cで試してみたよ。中身はまあ、弾が生まれて死ぬまでの動作を擬似
タスクで記述してある、みたいな感じ。

kashiwaさんのOO度は14点です!

あなたのコードは全然OOじゃないのでコンパイルエラーです。さようなら。
もう来なくていいです。
すげえ!ひょっとして、ぶっちぎりでトップじゃないか?

2006/06/14

_ ノート最強のスティック環境


EDGE 3Dのブラケットを利用して、DirectPad Proを作ってみた。パラレルポ
ートのあるノートならこれが現時点で最も有効な環境じゃないかと思うのだ。
パラレルがあるなら、な……。

どうでもいいけど、押入れを漁ってみたらスティックが有りすぎた。写真に
写ってないのがあと三本あるのでどうかと思った。俺は近いうちにゲーム脳
をこじらせて死ぬ。

2006/06/11

_ それはバグだよ
スプライトの回転に使う行列パラメータが、何故か一つ飛びで使われていた
ので二時間くらいかけて原因を探っていた。最初はアラインメントの問題か
と思って試行錯誤していたのだが、よーく探したら全然違うところに原因が
あった。

sp->attr1 = sp->attr1 & 0xFC00;
sp->attr1 = sp->attr1 | spx;
ここでX座標(9ビット)以外のビットをマスクしてる……つもりだったんだ けど、0xFC00は二進数に直すと 1111 1100 0000 0000だよおっかさん!                   ~ 回転行列テーブルのインデックスを1ビット落としちゃって、一つ飛びになっ ていたんだよ!
#define SP_XMASK 0x01FF
sp->attr1 = sp->attr1 & ~SP_XMASK;
sp->attr1 = sp->attr1 | spx;
こう書き直したよ。ビット演算とかチョー苦手だよ。生まれてすいません(;´Д`) むしろビットフィールドを使って
union {
	struct {
		u16 a0;
		u16 a1;
		u16 a2;
	} a;
	struct {
		u16 form	:2;
		u16 color	:1;
		u16 mozaic	:1;
		u16 type	:2;
		u16 doublesize	:1;
		u16 rotflag	:1;
		u16 y		:8;

		u16 size	:2;
		u16 hflip	:1;
		u16 vflip	:1;
		u16 rotnum	:3;
		u16 x		:9;

		u16 pal		:4;
		u16 priority	:2;
		u16 tile	:10;
	} bin;
} attr;

sp->bin.x = spx;
とでも書いたほうが安全な気がする。でもrotflagが立ってるときにrot番号 を hflip | vflip | rotnum の5ビットで表現しなきゃいけないので、やっ ぱりビット演算を書く必要は出てくるんだ。これわもう駄目かも分からんね。
_ 面どくさ
面ごとのキャラクタテーブルを再構築していた俺であったが、色違いとかで
重複するキャラもいるわけで、そういうキャラは番号を合わせた方が都合が
いいわけなのだが、そこまで考えだすと大変だ!でも今やっておけば後々に
なって報われるはず。多分。

2006/06/09

_ キャラクタタイルの管理
typedef struct {
	u8 size;		// 使用/空き タイル数
	u8 ref;			// 参照回数
	u16 pat;		// 実際に格納されているパターン
} ATTR_PACKED TILE_BLOCK;

u16 pattern_refs[MAX_PATTERN];  // パターン番号からタイル番号を逆参照する

こんな感じでタイル番号とパターン番号を結び付けてるんだけど、パターン数
が多いのでテーブルのサイズが結構バカにならないのだわ。そこで、面ごとに
出現するキャラクタを調べて、それぞれの面を構成するのに必要な最大パター
ン数分だけ割り当てるようにしてるところなのであった。例えば各面のボスが
平均120パターンなので、分離すれば6面分720パターン=1440バイトほど稼げ
るっつーか、たった1440バイトを稼いだ先に何があるのか?
_ お前はランブルフィッシュかっつーの
64x64サイズのキャラクタの回転アニメパターンが8枚あって(HVフリップ
の組み合わせで32方向に回転)、それぞれのパターンが同時に画面に出現
する可能性があって、そうすると64x64換算で16枚しか配置出来ないVRAMは
狭すぎるという話であり仕方なく回転機能を使うように変更したら物凄く
滑らかに回転するようになって気持ち悪い。まあ4bit落としてやれば今ま
で通りカクカク回転するようになるんだけど。それにしても、ドット絵が
滑らかに回ると気持ち悪いというのはどういうことか。これも オールド
ゲーマーの サガか‥‥。

2006/06/07

_ さらばVector!
エロゲーの広告バナーがいつも最上段に入ってたり、ダウンロードリンク
が異様に小さくなってたりして「なんだかなあ……」な感じなので、自作
のニッチなソフトを登録解除してきた。

まだVectorのソフト数が少なかった頃に依頼メールが来てそれ以来ずっと
置かせてもらってた。当時は登録するとVECTOR PACK for WINとかが貰えた
んだよな。何気に重宝してた。

ちなみに通算ダウンロード数は7年間で400ちょいだった。ニッチすぎる。

2006/06/06

_ カツカツやがな(VRAM編)
参照カウンタ VRAM上のキャラ
  2 0    A
  1 0    A       Aの登録を1個解除
  1 1    A B     Bを登録
  0 1    A B     Aの登録を1個解除
  0 2    A B     Bを登録

Aはまたすぐに使う可能性があるので取り合えず残す仕様になってる。
つまりAからBにキャラクタを変更するとき、二つ分の空きバッファが
必要なわけで、これがネックになった。仕方ないのでVRAMを毎フレーム
全更新するように変更して急場をしのいだ。

今までGBAの持つポテンシャルを捉えきれずにいた所があったんだけど、
ようやく掴めてきたかもしれない。

2006/06/02

_ カツカツやがな
今のところコリジョンチェックは総当りでやっていて、敵弾120発と自機、
自機弾16発と敵10体をそれぞれ総当りしても、まあなんとかなってるんだ
けど、いや実は、なんとかなってないので(全方位弾を撃つと処理落ちが
一瞬だけ発生する)なんとかする。なんかガクガクして見えるのは精神的
によくない。

というわけで手っ取り早くなんとかする方法として、判定関数をARM化した
のだが……

THUMBからARMの判定関数を呼び出し、そこから更にTHUMBの関数を呼び出そ
うとしたら止まってしまった。ASM吐かせてみたらblでブランチしてるのな。
longcall属性をつけなきゃいけないようだ。なんか、以前にも似たような
ことを書いた気がする。学習能力無いな俺。

tekezo >
結構前々からの疑問なのですが、
除算のような比較的ランダムに呼びだされる関数以外での
ARM 化でもやっぱり速くなるものなのでしょうか?

ある程度、呼ばれるところが確定している関数については
インライン展開してしまってシーケンシャルアクセスで
持ってくるので十分なのではないかと思っているのですが。
(ARM 化すると呼び出しのオーバーヘッドもかかりますし)。
 (2006/06/03 01:37:09)
>
コードをIWRAMに置くのが目的なのでARM化しています。
IWRAMに置くのにARMステートの方が都合がいいので。
ループがネストしているような、bxのオーバーヘッドが無視できる程度に
長い時間実行される箇所は効果がよく出るんじゃないかな。
 (2006/06/03 03:09:02)

2006/06/01

_ 天然フィルタリング
GBASPを縦に持つと、ちょうど親指の付け根辺りがスピーカーを覆う位置
に来るのでボリュームが下がってしまうのだ。
_ おめ
二月の始め頃に着手し始めたアレがようやく完成を向かえそうだ。4ヶ月
もかかったのか。殆どの期間はサボっていたような気もするけど。むしろ
これからの煮詰め作業こそが本番という説もあるが。

これが終わったら次はいよいよアレだなあ。楽しみだ。
_ そうか。もう月末なんだな。(・ω・)
ゲツマツー(´ω`)

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12