MSIMEの罠

  • BaseNamedObjectsMSIME.hotkey.mutex_S-1-5-21-527237240-515967899-682003330-1003
  • BaseNamedObjectsMSIME.shareddata.mutex_S-1-5-21-527237240-515967899-682003330-1003

これは本日約2時間ほど時間を無駄にした原因。
具体的に言うと、ウィンドウを生成するたびにMSIMEの手によって勝手に差し込まれてくるmutexです。
※mutex:OSから提供されている機能の一つ、同期によく使われる。

といっても、他所からを差し込まれてくるのは日常茶飯事なので”これだけ”なら問題ありません。
なら何が問題なのかというと、勝手に差し込んでくるくせに「自動的に開放されない」ことです。

この画像を見てください。

これはハンドルの一覧表示させたものですが、見事にMSIMEのmutexで埋まっているのがわかります。
サイズの都合でこれしか映ってませんが、合計200ほどハンドルリークしていました。
何をやったのかといえば、ウィンドウの生成→破棄を100回繰り返しただけで他になんらおかしいことはしていません。

前回日記で書いたWindowModeSelecterにバグを見つけて書き直している途中にさらにハンドルリークしている事を見つけ
きちんと直してみてもまだリークしていたため他にもあるのかと約三時間ほどタスクマネージャーのハンドル数とにらめっこしていたわけです。
原因が判明してみれば上記の通り、MSIMEの物と思われるimjpcic.dllがCreateWindow関数実行時に自動生成するmutexが開放されず居残っているという物でした。
環境による物なのか、それともIMEの仕様なのかはわかりませんがはた迷惑なことこの上ない……

無駄に過ごした2時間返せよ!!

初めてのGUI

生まれて始めてC言語標準外ライブラリを使わずに真っ当なGUIを実用レベルで書けたってお話。
(Win32APIは使ってます、むしろ使わなきゃ書けないけど)
今まで人様のコードを弄るか、Dxlibでしか書いてこなかったので割りと感慨深かったり。
といっても、コモンダイアログ+α程度の小物ですが。

理由はとある人が「○○は実装が難しいので諦めました」とブログを書いていたこと。
作者さんの気など考えずMSDNに篭って適当に書き上げ、送りつけて使って!と押し通して来たという流れ。
多分迷惑だろうなー、使ってもらえないんだろうなーというだめもとだったのですが、むしろお礼言われましたとさ。
いきなり顔も知らない相手から押し付けがましく何か渡されて使う気になれるとか、相当根が良い人じゃなきゃ無理だよな、うん。
いやぁ、良い物を作る人って人間も出来てるよねぇ、羨ましい。

ちなみに、その現物
WindowModeSelecter.zip
win32apiでフルスクリーンにする方法何ぞ知らないのでサンプルコードではDxlib使ってます。
まぁ現物は純粋なWindows用C言語で書かれているので問題ないはず。

にしても、一般的なアプリってこういうウィンドウやらダイアログを嫌ってほど使ってるけど。
たった一個作るのにこれだけ苦労している俺にはそんなアプリを作ることなど永遠に出来る気がしない。
普通はWin32APIを直ではなく何かしらライブラリ使って書くもんなのかなぁ

改造って楽しいよね!

解析結果を元に色々弄って遊んでいたら三日たっていたってお話。

ここ三日ぐらい緋想天に紅美鈴さん入れて遊んでました。
その結果わかったのがモーション開始時効果音、自分が移動する距離、射撃などのオブジェクト生成、攻撃フラグ(not攻撃判定)が設定不能らしいこと。
一応まだ効果不明部分残ってますが、上の情報全てを収められるほど大きくは無いのでexe内部で定義されていて変更不可能な気がする。
(モーション開始時効果音はメモリー内には存在するのでどこかの段階で付与されているらしい。)

にしても、解析やら改造ってやっぱ楽しいね。
今回はコンバートするために前作も解析したけど、変更点見ているとプログラマーさんの進歩やら苦悩やらが色々見て取れてニヤニヤ
あと作業量が純粋に多すぎたせいか、左右飛翔とかJとHJとかコピペしたであろう場所で地味な設定違いが何箇所か…w
一応バグということで報告しとくべきなんだろうけど、どう説明すれば良いのやら……

割と大規模な解析

th105_aiの話。

最近更新してませんが、別に作業していないわけではなかったり。
といってもコードを書いているわけではなく、主に解析。

主に緋想天を動かすパラメーターという基本的解析を今更やってます。
具体的に言うと、モーションや判定を定義するpatファイルのフォーマット及びメモリー上での扱いの解析。

受身不能時間、判定出現までの猶予F(一部)、与被カウンター属性を識別できるようになりました。
まずこれを組み込んでリリースするべきだろうれど、解析を中途半端に止めると細部を忘れてしまいそうなので最後まで行くつもり。
さぁ不明バイトは@43/103だ……


関係ないけど、上記解析に伴って画像差し替えどころか(既存キャラをつぶして)新規キャラの追加もいけそうな予感。
といっても完全にゲームエンジンではなく一部定義だけ外側に出してある感じなので割と制限が大きいですが。
ついでに改変ツールなんてのも作れるけど、以前似たような物を作ったときは大ブーイング食らったので作っても出せないのが悲しいところ。

にしても、黄昏さんのエンジンはexe依存激しいなぁ
本家東方のエンジンもそういう傾向があるけど、黄昏さんのほうは妙に雑というか中途半端に感じる。
いや、自分のコードも人の事言えた出来じゃないんですけどね…w