Visual Studio 2005の「最近使ったプロジェクト」一覧から不要な項目を削除するツールを公開しました。


 ご存じの通り、Visual Studio 2005のスタートページには「最近使ったプロジェクト」という一覧が表示されていまして、読んで字の如く最近使ったプロジェクトを素早く開くことが出来るのですが、時としてもう使わないような古いプロジェクトや既にディスクから消えてしまったり別の場所に移動してしまったプロジェクトなども延々と居座り続けて不愉快極まりない事があります。

 存在しないプロジェクトに関しては、一覧からそのプロジェクトをクリックすることにより削除しても良いかどうかの確認が表示され、消すことができるのですが、これが大量にあると実に面倒くさい。

 わたしもこの問題に常日頃悩まされ続けていまして、そういう不便を一発で解消するツールは無いものかと探していたのですが、無かったので作っちゃいました。

 さらに、海外でも同様の問題にアタマを抱えている人がたくさんいることを知りましたので、同時に英語版ページもこしらえました。

VS2005 MRU Cleaner

VS2005 MRU Cleaner (English Page)

というか・・・・このエントリを書いてて気づきました。
「無かったので作っちゃいました。」なんて書きましたが、既にもっと出来の良い物を作って公開していらっしゃる方を発見!

あーあ。
車輪の再発明しちゃった・・・。

ネオジオのスプライトデータを覗いたり編集したりするツールを開発中


お久しぶりです。

ここ数日はプログラミングに勤しんでおりました。
といっても、パチスロのシミュレーションツールではなく、別なツールです。

その名も

「ネオジオのスプライトデータを覗いたり編集したりするツール」(仮名)

NeoSpriteDecoder.png

最近は”NeoDev”というツールキットがあるようで、(https://arcadedev.emuvibes.com/参照)、C言語を使ってネオジオのソフトを自作できるらしいのです。これには私もものすごく興味があるのですが、残念ながらグラフィックツールやサウンドツールが無い。コンバーターの類は発見できたのですが、直接編集できるツールがまだ無いっぽいのです。

そこで、自作することを決意しました。

ネオジオのROMカセットには、用途別にP-ROM、C-ROM、V-ROM、S-ROM、M-ROMが搭載されています。このうちP-ROMには68000CPUで実行されるゲームのプログラム、C-ROMにはゲームで利用されるスプライトデータが格納されています。

このツールはC-ROMに格納されているスプライトデータをのぞき見ることができます。
編集機能はまだ搭載していませんが、データの仕様はわかったのでいずれは編集機能もつけたいところであります。

しかしながら、スプライトデータの解析に丸一日かかってしまいました。
というのも、そのへんに転がっている資料を探せば見つかるだろう、と甘く見ていたのですが、どこにもC-ROMに関する資料がない! 
しょうがなく、わかっている情報から手探りで解析することに……。

ネオジオのスプライトは、スプライト一つにつき16色が使えますので、4BPPであります。つまり、1バイトに2ピクセル分の情報が格納されていることになります。
そして、ネオジオのスプライトひとつの基本サイズは16×16ピクセル。
すなわち、スプライト一つにつき128バイト、ということになります。

チャン・コーハンやアースクェイクのような巨大なキャラクターも、複数のスプライトを組み合わせて表現されています。それどころか、ゲームの背景画もスプライトです。

つまり、ゲーム中は大量のスプライトが画面で動き回っていることになります。
それでも、たくさんのスプライトを管理するとなるとプログラムが複雑になったり、処理落ちが発生するかもしれません。

しかしながらここがネオジオのすごいところで、ネオジオのVDPには「複数のスプライトを合体させてあたかも一つの巨大なスプライトとして扱う」機能が付いています。このおかげで格闘ゲームなどの開発がやりやすかったのでしょう。

さて、話をスプライトデータにもどしましょう。スプライトは4bppで表現されていることから、データはMSXのSCREEN 5みたいな形式で格納されているのだろう、と読んでいたのですが、甘かった。 

解析してみてわかったのですが、ネオジオのスプライトはものすごくひねくれた形式で格納されています。4bppなのは間違いないのですが、本当にヒネクレてます。MSXのSCREEN 5、というよりは、SCREEN 2が4層重なったような形式になっています。

そして、基本的に一つのスプライトは二つのROMにまたがって格納されています。

なぜこんな仕様なのかはわかりませんが、おそらく当時のVDPで巨大なスプライトを大量に動かすにはメモリインターリーブのようなことをせざるを得なかったのでは? と予想しています。

この辺で得たノウハウは、後々資料として公開しようかと。

それで、この数日間でとりあえずなんとか中身を覗くところまでできました。
しかもC#で書いたのにもかかわらずとても軽快に動作します。

あとはやっぱり編集機能を付けたいですね。

しっかし・・・プログラミングはそれほどではなかったけれども、解析はものすごく疲れた(汗