ほげええええええええええええええええええええええええええええええええええええええええ
今作っているブツのスプライト同時表示数がめでたく128個をオーバーして しまったので、突貫工事でチラつかせて256個まで表示出来るようにした。 輝度が落ちている感じはするけど(と言うよりもはや半透明)一応見えては いるのでそんなに支障が無いような気がしないでもないので、まあオーライ としよう。 今まで何度か、ラスタ割り込みによるスプライトダブラのテストプログラム を作った経緯があるので、チラつきによる倍化には抵抗があったのだけど、 スプライトサイズがまちまち+拡大縮小回転という条件が普通に有り得るこ とを考えると、ダブラをGBAでやるのはあんまり現実的じゃないなあと思った。 CPUによるPCM合成負荷も考えると、スプライトばかりにCPUパワーを割くわけ にもいかないしな。 ちなみに海外では、Sprite Multiplexerというらしい。
シューティングはやはりレバーでやらなきゃ嘘。なんて書いちゃったもんだ から GBP+縦置きモニタ+スティックという構成のことも考えなくてはなら なくなってしまったのであった。 それで軽く検索かけたんだけど、キャリバースティックのボタン配置って AYX BLR こうなってるんだな。なんでYXが上に配置されてるのかよ。困る。 通常の設定だとYXがGBAのSELECTに、LRがGBAのLRに割り当てられるので 上のボタン二つが同時に使えないことになってしまう。まあ設定を変えれば YXとLRの割り当ては入れ替えられるんだけど、いちいち変えるのは面倒 くさいし……。 というか、GCパッドのボタン→GBAのボタン→ゲーム中のボタン、と2段階の 配置変更が挟まるので、これはユーザー側でも混乱するな。絶対混乱する。 混乱は避けられない。なんか面倒だから後回しにするか。
パレットを高速にスワップして発光表現みたいなことをやってるんだけど、 GBAだと馴染んじゃってよく分からないし、GBPだとガビガビするしでうまく いかんなあ。 そういえば、GBPが「唐突に画面が4フレ止まる」仕様になっている理由が 未だに分からん。2Dシューティングで4フレも止まるのは本当に致命的なん ですよ任天堂さん!御社でも作ってるんだから分かるでしょ!ソーラースト ライカーとかソーラーストライカーとか、あとソーラーストライカーとか…。 というか、ソーラーストライカーしか無いんだけど。
ボスを倒したときに、たまーに画面にゴミが残るバグを確認したので、その バグを取り除いて確認しようとしたんだけど、なーっかなか倒せないんだわ。 ムキになって何度もリトライしてしまったり。 それで思ったのだけど、デバッグ用に無敵モードをつけておけばよかった。 まあ今からでもつければいいんだけど。
キャッシュが完全にオフになってなかったよ。完全にオフにしたら問題なく なった。 一応言い訳っぽく書いておくけど、拙作ライブラリは64x64が8個と8x8多数・ そして16x16を目一杯、なんて組み合わせで使用しない限りは大丈夫だから。 例えば16x16メインで32x32が少々とかなら問題は露呈しない。俺を信じろ。 いや信じなくていいけど。
いや違う。キャッシュには問題が無かった。というかキャッシュ機能をオフ にしても同じバグに遭遇した。ゲームメインの方で何か起こってるようだ。 えー、これはもうGDB使わんとあかんのとちゃう?めんでーよう。
VIsualBoyAdvanceのTileViewerで確認しながら操作していたら、断片化状態 を自在に作り出せるようになってしまった。で、バグを再現しまくって遊ん でた。つまらない作業でもなんでも遊びにしてしまうのが俺。 今朝確認したときはすぐ直せるバグだろうと思っていたのだが、どうやら結 構根が深い問題のようで、巨大なスプライトを複数同時に出そうとすると、 断片化が起こりうる限りこのバグは避けられないという結論に達した。スプ ライトサイズを統一する(キャラも作り直し!)か、巨大スプライトの同時 使用数を制限するか、キャッシュを諦めるか、どれかを選択するしかない。 今更スプライトサイズを変更するのは厄介だし、でかいスプライトは出した い。なのでキャッシュ機能をOFFにするしかなかった。間に合わなかったよ。
PCGキャッシュがあまりにも具合が良いので、調子に乗って64x64サイズのス プライトアニメをバンバン出しまくっていたところ、次第に断片化が激しく なったらしく、ついにバグが出た。(バグによって、半透明指定していないスプライトが勝手に半透明化され、 背景の青が透けている。青い爆炎は新鮮だ) 詳しい状況を調べるために実機とエミュレータで追試してみるも、実機では 起こるバグがエミュレータでは起こらないので困ってしまった。 というわけで冒頭に書いた断片化が原因だとハッキリ特定できたわけではな いのだけど、何かしら理由を書いておいたほうがホラ、それっぽいでしょ。
アクセス統計解析の検索ワード履歴に「GBA+スプライト+優先度+管理」とい う足跡が残ってたので、そこら辺の内容をなんとなく書き捨ててみる。 優先度には二通りあって、一つはBG面との重なりにおける優先度。まあこれ は指定するだけなんで特に管理するようなことも無いでしょう。 そしてもう一つはスプライト同士の優先度。これは番号の若いスプライトが より上に来るというもので、例えばファイナルファイトのような奥行きのあ るアクションを作りたいときは管理が必須になる。 というわけで、奥行き情報をスプライトテーブルに持たせて、1フレーム毎 にソートしてOAMを上書きすればよろし。 =完= たったこれだけで終わっちゃうのもなんなので、残りは拙作のライブラリで も参考にして。といっても、検索で来た人はもう見てないだろうなあ。 このソースだと優先度を0〜255で指定できるけど実はそんなに必要なくて、 0〜15くらいにしてソート部をバケツにするのがいいかもしれない。
キャラクタ構造体にはcxとcyを(何かに使う予定がなくても)含めておいた 方が良いと思った。思ってしまったのだ。そう、中心座標が必要になったの だ。既にかなりの数のキャラクタを作ってしまった後で必要になったのだ。 修正が面倒だ。非常に面倒だ。 萎えている。非常に萎えている。
〜これまでのあらすじ〜 PCでバーチャスティックを使うのが目的で、IF-SEGA ISAのDPP化をしよう しようと思いつつ、面倒くさくてまごまごしていたのが俺。 スト2が流行っていた頃、俺はCPS-ファイターが欲しくてたまらなかった。 でも無駄に高いし、とても買う気にはなれなかった。そこで、業務用パーツ で作れば安く上がるし操作性もアーケードと同じ!という結論に至った俺は メッセサンオー3に走った。 そうして作ったコントローラが押入れで眠っているのを思い出し、パソコン 用の余ったコントローラを一つ分解して配線……今、ココに夢の環境が復活 した!超連射も神威も弾幕カーニバルもRally Raidもきゅぴシュ〜もBlue Wishも いろりたんハァハァもnomltestもSky Swimmers' HeavenもSonic Sistersも ScoreSoldier Winter Festival 2004も針/弾も……これだけ挙げてもまだ 挙げ足らないが、やり過ぎてやり飽きた感のあるPCシューティング達がまた 輝きだしたぜ。 シューティングはやはりレバーでやらなきゃ嘘。
16色をサポートする減色ツールを探し回ったりしたけど、さっぱり見つから なくて(あっても品質が低かったり、値段が高かったり)仕方なく0から手 打ちしていたわけなんだけど。 で、最近気づいたんだけど、GIFを扱うツールは保存時に16色を選べるものが 多くて品質もそんなに悪くないので(といっても手直しは必須だが)、減色 専用ツールを探すよりもGIF対応のツールを探してみるのがいいんじゃないか と思ったべさ。