ss_unswizzleのソース修正とバイナリ公開
ss_unswizzleとは?
元々は赤スぺ抽出のツールです
オリジナルのソースはackさんによる投稿になっています
中身は、はむさんのtiles2crom.exeが行う
NEOGEOのエミュレーター最適化された
タイルの変換と並替にOdd/Evenをするツールです
Odd/Even後のバイナリ切り出しは行ないません。
しかしbcut等のバイナリカッターと併用することにより
tiles2crom.exeの置換が可能になります
手動入力ではなくバッチで回せるのでミスも減りますね。
ダウンロード
こちらからどうぞ。Windowsのコマンドライン用です。
ビルドはWindows10 x64
gcc version 13.1.0 (x86_64-win32-seh-rev1, Built by MinGW-Builds project)で行いました。
Download ss_unswizzle.zip
Windowsでは挙動が正常ではなかったのでソースを修正
cxxさんの指摘を頂いてまして、ソースを修正したところ
Windowsでのビルドも問題なく動作するようになりました!ありがとうございます!
修正後のソースコード
// gcc -o ss_unswizzle ss_unswizzle.c
// Original Source code https://www.arcade-projects.com/threads/samurai-shodown-v-perfect-on-real-hardware.13565/page-2#post-220216
#include <stdio.h>
#include <unistd.h>
#include <stdint.h>
int main(int argc, char **argv) {
FILE *input, *output1, *output2;
uint8_t tile[128];
uint8_t* offset;
uint8_t x_offset,y_offset,block, data,row;
int i;
uint8_t planes[4];
if(argc < 4) {
printf("ss-unsizzle <input file> <output odd> <ouput even>\n");
return 1;
}
input = fopen(argv[1], "rb");
if(!input) {
printf("Error: unable to open %s for reading.\n", argv[1]);
return 1;
}
output1 = fopen(argv[2], "wb");
if(!output1) {
printf("Error: unable to open %s for writing.\n", argv[2]);
return 1;
}
output2 = fopen(argv[3], "wb");
if(!output2) {
printf("Error: unable to open %s for writing.\n", argv[3]);
return 1;
}
while(fread(tile, 1, 128, input) == 128) {
for(block = 0;block < 4;block++) {
// x/y_offset get us into the correct block
switch(block) {
case 0:
x_offset = 4;
y_offset = 0;
break;
case 1:
x_offset = 4;
y_offset = 8;
break;
case 2:
x_offset = 0;
y_offset = 0;
break;
case 3:
x_offset = 0;
y_offset = 8;
break;
}
// traverse each row of the block
for(row = 0;row < 8;row++) {
planes[0] = 0;
planes[1] = 0;
planes[2] = 0;
planes[3] = 0;
offset = &tile[x_offset + (y_offset * 8) + (row * 8)];
for(i = 3;i >= 0;i--) {
data = offset[i];
planes[0] = planes[0] << 1;
planes[0] = planes[0] | ((data >> 4) & 0x1);
planes[0] = planes[0] << 1;
planes[0] = planes[0] | ((data >> 0) & 0x1);
planes[1] = planes[1] << 1;
planes[1] = planes[1] | ((data >> 5) & 0x1);
planes[1] = planes[1] << 1;
planes[1] = planes[1] | ((data >> 1) & 0x1);
planes[2] = planes[2] << 1;
planes[2] = planes[2] | ((data >> 6) & 0x1);
planes[2] = planes[2] << 1;
planes[2] = planes[2] | ((data >> 2) & 0x1);
planes[3] = planes[3] << 1;
planes[3] = planes[3] | ((data >> 7) & 0x1);
planes[3] = planes[3] << 1;
planes[3] = planes[3] | ((data >> 3) & 0x1);
}
fwrite(&planes[0],1, 1, output1);
fwrite(&planes[1],1, 1, output1);
fwrite(&planes[2],1, 1, output2);
fwrite(&planes[3],1, 1, output2);
}
}
}
fclose(input);
fclose(output1);
fclose(output2);
}
修正点について
具体的な変更点はfopenの属性がテキストファイル操作だったのを
明示的にバイナリファイル操作に変更しました。
rをrbにwをwbに変更して、正常動作を確認しています。
gcc入れた環境からコマンドプロンプトで
gcc -o ss_unswizzle ss_unswizzle.cと入れればビルドされます。
exeついてなかったら足してください。
環境導入は下記サイトを参照してください。
しめ
これで手動入力から解放されてバッチで完結できそうです。
過去分はそのままにしておきますが
今後はこっちで変換しようかと思います。(布石
余談としてWordpressのキャッシュプラグインを別の物に変更しました。
サイト表示で頻繁にトラブルが起きていたようなので、改善されるといいのですが。
もし表示できないなどのトラブルが起きましたら、遠慮なくご連絡ください。
ディスカッション
コメント一覧
まだ、コメントがありません