ファルコムのドラゴンスレイヤーIVの、Windows上で動くエミュレーター版のパスワードを入力する支援ツールの改良版を作った。
以前にも作っていたのだけれど、今回はMSX Game Playerにも対応した!
今回なぜ改良しようと思ったのかと言うと。
ここのところ、Twitter上で「」・ω・)」うー!(/・ω・)/にゃー!」ってのが流行ってて、何だろう?と思ったら、『這いよれ!ニャル子さん』のアニメの所為らしい。
クトゥルフがらみだというので存在は知っていたけど、原作ではMSXも出てきたらしい(なぜ?!)ので、どんなものか見てみようと思って、ニコニコ動画のユーザー登録をしたわけさ。(ユーザー登録しないと見られなかったので)
で、せっかくユーザー登録したので、ゲームのプレイ動画を色々見ていたら、ドラスレ4もある!
しかし、そのうちの一つが、えらく下手くそで…。これならさすがに自分の方が上手だ!ってわけで、久しぶりにドラスレ4をやりたいと思い立った。
ところが、秀和システムの『楽しい!!MSXエミュレータ&ゲーム』版は、Windows7でインストールは出来たけど、音楽が鳴らないorz(ドラスレ4は音楽も素晴らしいのだ!)
まぁそれはとりあえず置いといて、以前作ったパスワード入力支援ツールを使おうと思ったら、必要なDLLがWindows7に無くて動かない!
作り直そうにも、なにせVC++4.0時代に作ったものだから、今さら開発環境を構築するのも大変だ…。
また、エミュレーター版が動かないなら、これまた昔買った『MSX Game Player』(実際のMSXのROMを読み込んで動作する)はどうか?と思って試してみたが、これはWindows7ではインストールも出来ないorz
仕方が無いのでVMware PlayerでWindows XPをインストールしてみたら、こちらでは動いた。
(キーボードが英語キーボードになってしまうようで、どう打てばいいか分からないキーがあるが。例えば「け」は「:」では駄目で「;」キー、「へ」は「け」である「:」キーを押す必要がある。特に問題なのが、MSXの「SELECT」キーがどれになっているのか。MSX Playerでは「Page Down」に割り当てられていたのだが、Windows XP Modeでは反応しない)
ただ、パスワード入力支援ツールは、特に画面からの読み込み部分はパスワードが表示される位置が微妙にずれていて、そのままでは読み込めない。
また、MSX1版(これまた以前中古で買ったもの)はフォント自体が違っているようだった。
という訳で、最近ScalaとJavaFX2を勉強してることだし、JavaFX2+Scalaで作り直して、MSX Game Playerにも対応させてしまえ!
という事で作ったのでした。
Scala+JavaFX2自体はまぁ普通のプログラミングなので、特に難しい事は無い。
画面デザインはJavaFX Scene Builderの練習になるし。
問題はウィンドウに対してキー入力メッセージを送ったり、画面を読み取ったりすること。
画面の読み取りは、JavaにRobotクラスがあるのでまぁ問題無いが、
対象のウィンドウを特定したり、キーメッセージを送るにはWin32 APIを使う必要がある。
まぁこれも昔作ったJavaからJNI経由でWin32 APIを呼び出すライブラリーがあるので、何とかなる。
と思っていたのだが、JavaFXアプリケーションからJNI経由でWin32 APIを呼び出すと、制御が返ってこない…!orz (エラーにもならず、無限に待ち続ける)
JavaFXアプリでない普通のScalaアプリから呼び出すとちゃんと動作するので、Windows7の所為では無いようだし。
スレッド関連の影響かと思って、自分で別スレッドを作って呼び出すくらいは試してみたけど、やっぱり駄目。
仕方が無いので、別プロセスを起こしてWin32 API呼び出しだけ別途実行するようにしてみた。動作はしたけど、まぁ面倒な事で(苦笑)
JavaFXはOSネイティブなライブラリーを持っているはずなので、それを使うことが出来たら自作のJNIライブラリーを使わなくていいから楽なんだけどなー。
という訳で、自分がやりたい事は実現できた。
しかし、今回作ったバージョンのパスワード支援ツールの対象者:MSX Game Player(ROMを読み込むハードウェア)とDS4のROM本体を持っていて、WindowsにScalaとJavaFXを入れてプレイしようなんて人、世界中にどれくらい居るんだ(爆)
(Windows XPの秀和システム版のパスワード支援ツールは前のバージョンで使えるからねぇ)