非公式東方鬼形獣バグ修正パッチリリース

非公式ですが東方鬼形獣のバグを直して回るパッチ作ったので公開します。

th17patch.zip

直るバグは以下の通り

  • オオワシ妖夢の攻撃力上限が他より100低い
  • 実績から再生できるEDが違う
  • カワウソ妖夢1面の誤字
  • 実績38の誤字
  • replayフォルダ以下にもなぜかsnapshotフォルダがある
  • リプレイでクリア系実績が解放される

DLLプリロード攻撃のチェッカーをリリース

前回の記事に関連して、DLLプリロード攻撃が可能なexeかのチェッカーを作りました。

DllPreloadingAttackChecker.zip

使い方はchecker.exeにチェックしたいexeをD&Dするだけ。

といっても所詮はDLLプリロード攻撃なので、NGとか出ても特におびえたりする必要はないです。
(というか誰の環境でも雑にexeなめたら山ほどNG出ると思う)

ただしインストーラーで出たら即開発元に連絡しよう、約束だぞ!

※2019/03/26 18:50頃追記

setup.exeだけ特別扱いしている問題に対応

※2019/03/28 21:10頃追記

DEPENDENTLOADFLAGに対応

DisableJoyL3

東方心綺楼ジョイパッドキー11(俗にいうL3ボタン)無効化ツール
DisableJoyL3.zip

東方心綺楼1.04(本ツールリリース時最新)のネット対戦でジョイパッドのキー11がEsc固定になってしまったため、誤爆して対戦を抜けてしまう可能性が出てきました。
そこで、そのキーを無効化し、間違えても入力が入らないようにしたのがこのツール。
機能はそれだけ、他はなーんにもない。

自分でもなぜ作ったのが謎すぎるぐらい需要がない微妙ツール。
まぁPS系コントローラー以外を使っており、キー11が押しやすい場所にある人は使ってみてもいいかもしれない。
でも無効にするだけなので、キーコンフィグでキー11に何かを割り当てても使えない。
ダメダメですね!

コマンドプロンプト入力履歴保存ツールcmd_logger

コマンドプロンプト入力履歴保存ツールcmd_logger
cmd_logger.zip

心綺楼の解析が思うように進まないのでむしゃくしゃして作った。
友人のつぶやきから一晩ででっちあげ、その後最低限一般利用できそうな機能をあしらえただけの物。

ちなみに我が家の常用cmdさんは早速これに切り替わりました。
今のところ不便はしてないです。

IATの書き換え、サスペンド状態でexeを起動してdllをインジェクション、とそれなりのことはやっているが
内容はだいぶコンパクトなので、そういうことに興味ある人なら習作として使うこともできるかもしれない。

djpeg.so

いい加減zipだけ放っておくのはどうかと思うので
特に外部と関係ないものだけでも説明しておこう第七弾
(出来立てホヤホヤじゃね?とか、外部と関係ありすぎじゃね?って突っ込みは禁止)

djpeg.so@ver0.10
Jpegを他の画像形式に変換するRubyの拡張ライブラリ。
色数変更やらグレイスケール化やら地味に色々あるけれど、それは単に他所様のライブラリを使っているから。
自分がやったのはRubyの拡張ライブラリ形式にする部分だけ。

ネット上で友人に「th123_aiのDLL化なぞして遊んでるw」って言ったらなぜかRubyの拡張ライブラリを作る流れになっていた、なにを言っているのか(ry
まぁ楽しかったからいいけどね!
ちなみに、作成理由はexerbなるRubyでGUIアプリを作れるライブラリ(環境?)を使うと標準のjpegライブラリが使えないから、ということらしい。

最初はdllで遊ぶのは息抜きのつもりだったのに気づいたら4時過ぎですってよ。
ハッハッハ、明日起きれるかしら……w

DXLibGameSettingDialog

いい加減zipだけ放っておくのはどうかと思うので
特に外部と関係ないものだけでも説明しておこう第六弾
(これ随分と久しぶりだw)

DXLibGameSettingDialog
DXLibで作ったゲーム用設定ダイアログ
とある人向けに作ったので汎用性に欠けるが、見せられないほどじゃないので公開。
たぶん使用用途は大分狭いので、実際に使うよりかは参考にする程度が一番かもしれない。
WTLでダイアログ組んだり、ゲーム以外の分野でDXlib使う際に参考になる、かな?

ぶっちゃけ、開発よりReadme書いてソース見せられる形にして~って作業の方がしんどかったです。

Borlandの罠

本日(というよりは昨日)13時間無駄にした時の話

まずはこのコードを見てもらいたい
#include <windows.h>
#include <stdio.h>
long WINAPI exep(EXCEPTION_POINTERS *pep){
return EXCEPTION_CONTINUE_EXECUTION;
}
int main(){
SetUnhandledExceptionFilter(exep);
printf(“mainn”);
RaiseException(0x00000000,0,0,NULL);
printf(“main2n”);
return 0;
}

これはC言語からWin32APIの機能を使って例外処理を行うサンプルで
SetUnhandledExceptionFilter関数にてexepを例外処理関数に設定し、exepでは何もせず即例外位置に復帰するだけのプログラム。

ここで問題なのが、上のコードを手元のbccコンパイラでコンパイルするとINVALID DISPOSION例外を吐いて動作しないこと。

最初は何かしら必須な処理を怠ったせいかと思いサンプルコードを大量に引っ張ってきたり、関連知識がありそうな友人に片っ端から相談したが一向に原因が掴めず
最小コードをこねくり回している最中に、間違えてVCコンパイラでコンパイルしたことから原因判明。
要するに「BCCコンパイラだからエラーしている」というもの。

理由:
BCCコンパイラがmain関数前にSEH連鎖の0番に設定する関数でエラーしている。
(SEH連鎖:例外処理関連で呼ばれる関数、数珠繋ぎにいくつも設定できる)

で、OS自体が用意してくれる関数を使っているうちは問題ないのでBCCさんの独自関数にはどいてもらうことにする。
具体的にはこんなコード
#ifdef __BORLANDC__
__asm{
push EAX
mov EAX,DWORD PTR FS:[0]
mov EAX,DWORD PTR DS:[EAX]
mov DWORD PTR FS:[0],EAX
pop EAX
}
#endif
SEH連鎖1番のアドレスを取ってきて0番に上書きするだけ
ただC言語上からアクセスする方法が自分の知る範囲では存在しないのでインラインアセンブラの力を借りてます。

無料版にインラインアセンブラやらを無理やり突っ込んだものを使っているので、普通のBCC環境とは微妙に違っているのが原因か?
もし有料の最新版でも発現するバグなら割と大事だがどうだろう。
コンパイラ自体がわざわざ自家製の関数を突っ込んでいるのだから何かしら意味があるのかもしれないが、VCでは不便していないのでこのまま行くことにする。

さて、これで例外報告機能も復旧できたし、今度こそth105_aiで0.80に向けた作業に……

libmidi

いい加減zipだけ放っておくのはどうかと思うので
特に外部と関係ないものだけでも説明しておこう第四弾

libmidi
midiの発展系
簡易的にmidiファイルを作成するためのライブラリ、一応再生も出来る。
ガラクタ置き場の中では珍しく(唯一?)一般向けで参考資料以外の使い道があるソフトウェアでもある。

友人からmidiの出力用に簡単なライブラリを作ってくれと頼まれたときに作ったもの。
(渡して以来音沙汰が無いのだが、その後完成したのだろうか・・・?)
th105_aiの適当ドキュメントやAPI設計の原点は多分ここ。

プログラミングやmidiの知識経験ではなく、設計やデザインについて始めて意識した作品ということで
かなり思い出深かったりする。

midi

いい加減zipだけ放っておくのはどうかと思うので
特に外部と関係ないものだけでも説明しておこう第三弾

midi
midiの読み書き再生を行うプログラム、使い道が特に無い習作。
Readmeにもあるとおり、midiの入出力に興味がある人へ向けた参考資料程度の価値しかありません。

midi再生には自分で全部やる方法とデバイスに全て任せる方法の二つ用意されていて
このプログラムは前者の方法で演奏されている。 理由は簡単で、デバイスに任せても楽しくないから。
ただし、この方法はCPUに依存するため処理落ちで音声が乱れる。
さらに、時間管理の実装が大分いい加減なためにデバイス式に比べかなり品質が劣る。

というわけで普通にmidi再生をする場合、この実装はあまり参考にしない方がいいかもしれない。
(それ以前に、単純再生ならいくらでも他に方法はあるだろうが)

どうでもいい話:
某動画サイトにてmidiの音階を視覚化した動画を見たのがきっかけになって作ったプログラムで
当時東方に強く触発されていた時でもあったので、最初はその音階を資格化から弾幕STGでも作ろうと思っていた。
が、GUIに手を出して完成させたことが無い自分がいきなりそんなもの作れるはずもなく……
結局midiの再生まで行った所で、サウンドフォントやmidiデバイスに興味が向いてなかったことにされましたとさ。

これのおかげで音楽に対する造詣が大分深まったと思う。
音楽はコンピュータ上においてどのように表現されているのか、という方面はかなり。

ところで、midiの仕様作った人はかなり頭おかしい(ほめ言葉)と思うんだが、どうだろう?