ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

アイギスのマウス操作をアシストするツールを改善してみた。

千年戦争アイギスのボタンクリック&ドラッグ 操作をアシストしてくれる Auto HOT Key スクリプトを用意したことでアクション性の高いミッションを遊べるようになりました。
なんだかんだでこのスクリプトを毎日使って遊んでいます。
そしていよいよゲーム内で最難関と言われる魔人ミッションのイベントがやってきました。
前回は頑張って剛炎のアモン LV 15打ちのめしたのでした。

yasushiito.hatenablog.com



今回は新規実装なので難易度が最高なのは間違いありません。
難しすぎて操作ミス一発でプレイの全てが台無しになってしまう現象が多発しました。

yasushiito.hatenablog.com


そこで操作ミスでイライラするよりも腰を据えて問題を修正した方がクリアが早いと判断して時間を使って修正することにしました。
問題点は意図しないタイミングでクリックが発動してで早くスキルを使用できないところです。
スキルを使うためにユニットをクリックするのですが、ここでクリック連打してしまう瞬間があってスキルボタンが消えてしまうのです。
もちろんクリック連打を防止する処理は埋め込まれています。
ある程度マウスの移動量がない限りはサイクリックしないようになっています。
この 「ある程度」の加減が難しい。
広すぎるとクリックして欲しい時にしてくれないからです。
そこで何とかならないかとソースコードをじろじろ眺めていましたら不具合を発見しました。
タイマー監視数回に1回の計算を間違えて2回クリックするようになってしまってました。
どうりで頻繁にスキルボタンを消されてしまうわけだ。
それでその処理を治してプレイしたところ大幅に改善されました。
とはいえやはり判定がデリケートなのは変わりません。
レベル10までは何とかなりましたが11以降は本当にシビアな操作を要求されるので無理です。

そこで抜本的な解決に挑みます。
クリックするたびに座標を記録しておき、前回クリックしたポイントの近くではクリックを行わない処理を追加します。
こうすることで一度クリックしてユニットを選択してスキルボタンを表示させたら、マウスポインターがぎゅぎゅっと大きく動かされない限りクリックしなくなります。
スキルボタンを押すためにマウスポインタを動かしたら前回クリックしたポイントから大きく離れるのでクリックは有効にあります。
つまりラッシュが始まる瞬間にユニットクリックからのスキルボタンクリック。
これの往復操作を安心して連続で行えるのです。

;通常のフィールドなのでスキル使用のためのクリック。
;ステータス表示のためのクリック。
;割り込み6回に1度に対してクリックするべきか判定する。
;移動中から停止した時は必ずクリックしないとフィールドをクリックしてステータス表示をキャンセルできない。
            if Mod(stay, 5) =0
            {
;ステータスとスキルボタンを消さないようにステータス表示中はクリックしない。
                ImageSearch, fx, fy, 900,480,945,520,*40 blue.bmp
                if ErrorLevel = 1
                {
                    MouseClick, Left
                    ;クリックしたので座標記録しておく。
                    bcx := mx
                    bcy := my
                }
                Else
                {
                    ;以前にクリックされているなら。
                    if bcx >= 0
                    {
                        ;前回クリック位置からある程度離れてなければ クリックしない。
                        if Abs(mx - bcx) > 7 and Abs(my - bcy) > 7
                        {
                            ;マウスポインターが大きく移動したので連打の心配はないのでクリック。
                            bcx := -100
                            MouseClick, Left
                            ;クリックした座標を記憶しておく。
                            bcx := mx
                            bcy := my
                           
                        }

                    }
                }

myahk/aigis.ahk at master · yasushiito/myahk


この処理を追加してみたら効果抜群でした。
なんで早くこの機能を入れこまなかったんだ。
まあ単純に管理する変数をクリアするのが面倒だったからなんですけどね。
結果的には修正したコード以上の見返りがありました。
マウス操作のアシストに関しては完成型だんじゃないかな。

yasushiito.hatenablog.com



でもこのツールが完璧になったわけではありません。
なぜだかわかりませんけど、ある瞬間に突然ウィンドウが非アクティブにされてしまうのです。
原因はまるでわかりませんが、プレイ中にこの問題が発生するとクリック操作をゲームに送れなくなります。
ゲーム画面をマウスクリックすれば元通りにゲームをアシストしてくれるものの、とっさにマウスクリックができないからツールにアシストしてもらっているのですから問題としては致命的です。
実はこの問題、ゲームだけで発生するのではなく、ブログ執筆中やプログラミング中でも発生します。
以前から、入力中に突然カーソルが消えてコピーペースト操作がどこかのウィンドウに吸い取られてしまう問題があったのです。
気持ち悪いなーと思いながらも原因を特定するのが難しそうなので目をつぶってました。
クリックすれば良い話なので。
でもゲーム攻略で致命的になるのなら対処を考えてみるかな。