明石タイマーを正しく理解する(追記あり)

明石による泊地修理で20分の計時を行っているタイマーを明石タイマーと呼ぶ。以前に明石タイマーについて以下のような分析を行った。

  1. 明石の泊地修理の仕様 - 計時について
  2. 複数艦隊の泊地修理の仕様

KancolleSnifferの明石タイマーはこれらの分析に基づいて実装してある。ただし、実装が妙に複雑になってしまっている。複数艦隊への対応も、実装が複雑になりすぎるので分析通りになっていない。

これを先日発見されたプリセット明石修理に対応させては見たものの(動画)、プログラムがかなり複雑になってしまった。このときはプリセット明石修理という呼び名を知らなかったので気付かなかったが、あとで検索しで以下の記事を見つけた。

【プリセット明石修理】明石カウンターの詳細についての仮説 及びツール作成者様に対応お願いしたいことについて

この記事のおかげで大きな誤解に気が付いた。上の1番の記事で以下のように分析していたが、実際には1~6はどれもタイマーが止まらないのだ。

計時が終了するのは以下の場合である。 
  1.  母港に戻ったときに修理可能な艦が存在しない
  2.  編成の結果、修理可能な艦がいない
  3.  改装で明石から修理施設を外した結果、修理可能な艦がいない
  4.  明石が入渠する
  5. 入渠の結果、修理可能な艦がいない
  6. 艦隊が遠征に出る

タイマーが止まるのは「すべての艦隊が泊地修理をしない状態で、20分以上経ってから母港に戻ったとき」だけだ。2~6は泊地修理しない状態にはなるが、それだけでは止まらず、1の場合も20分経っていないと止まらない。

これを止まることにしてしまっても、泊地修理を行っている艦隊が一つなら問題はない。しかし、複数艦隊の場合やプリセット明石修理の場合は止まってはいけない。それを強引に解消しようとしてプログラムが複雑になってしまった。

それから、2番の記事で複数艦隊の場合について以下のように分析していたが、これは泊地修理を行っている艦隊が一つでもあてはまる。

 1. 第二艦隊に旗艦に明石を入れると、泊地修理が始まるかどうかにかかわらずタイマーがリセットされる
 2. 第二艦隊の旗艦から明石を外すと、泊地修理中かどうかにかかわらずタイマーは継続する
 3. 第二艦隊の旗艦に明石のときに編成を行うと、泊地修理の状況にかかわらずタイマーがリセットされる

旗艦が明石になる編成と、旗艦が明石のときに随伴艦に対して行う編成は、必ずタイマーをリセットする。

これらの誤解を解消した結果、明石タイマーの実装はかなり単純になった。プリセット明石修理については、編成展開を「リセットの起きない編成」とするだけの簡単な実装になった。明石タイマーの実装が複雑すぎるのは積年の課題だったので、プリセット明石修理の記事を書いた にら氏に感謝したい。

追記 [2015-11-09 20:30]

その後の追試でまだ誤りがあることがわかった。明石タイマーはリセットされるだけで止まることはない。旗艦が明石で随伴艦に対して行う編成で、随伴艦一括解除はタイマーをリセットしない。これらをまとめた結果は、七四式電子観測儀の作者による解説を参照してほしい。