2012年5月27日日曜日

VASSALモジュールの初期スタック、ユニット登録と内部構造

来週から忙しくなること確定なので、備忘録とバックアップを兼ねてまとめておくことにする。

ZIPファイルであるVASSALモジュールを解凍すると、次のように二つのファイルと一つのディレクトリで構成している。
  buildFile
  moduleData
  images
imagesはディレクトリ(フォルダ)であり、マップとユニットの画像ファイルを格納する。moduleDataはモジュールのバージョンと作成日を記述するXMLファイルで、数行ほど。XML形式のbuildFileがメインである。ここに全ての情報が入る。

ユニット一個は次のように記述する。
<VASSAL.build.widget.PieceSlot entryName="第111装甲旅団" gpid="66" height="0" width="0">+/null/emb2;;2;;Flip;2;F;;0;;;;1;false;0;0;dtp-units200dpi-1-8.png,dtp-units-r200dpi-1-8.png;,;true;;;;false;;1 piece;;;dtp-units200dpi-1-8.png;第111装甲旅団/1;        null;0;0;66</VASSAL.build.widget.PieceSlot>
ユニット名(entryName)、ユニットのid (gpid)、表と裏のファイル名をユニットごとに変更すればよい。この1行の意味を確認したことはないのだが、これだけを変更して動いている。この例では、ユニット名: 第111装甲旅団(二カ所ある)、ユニットのid: 66 (二カ所ある)、表のファイル名: dtp-units200dpi-1-8.png (二カ所)、裏のファイル名: dtp-units-r200dpi-1-8.png (一カ所) である。

初期スタックは次のように記述する。
<VASSAL.build.module.map.SetupStack name="3-G" owningBoard="Dagger Thrust Patton" useGridLocation="false" x="136" y="4526"> 上記ユニットの定義を何個でも記述</VASSAL.build.module.map.SetupStack>
nameがスタック名、owingBoardが所属マップ名である。マップ画像上のx,y座標(恐らくマップのドット数で数える)は適当に設定しておいて、VASSALで編集する際に調整する。

これをプログラムで自動生成するには、ユニット情報を下記のように揃えておけばよい。
第3機甲偵察連隊 0-0 1-A
第6機甲偵察連隊 1-0 1-A
(以下同様)
とユニットに応じて全て記述。ユニット名に続き、通し番号(画像ファイル名を特定する)と所属スタック名を1行で書いておく。スキャン画像から部隊名を生成するというのは画像処理でできないこともないだろうが。。。下記のperlスクリプトに通して終わり。出力結果をファイルに保存しておいて、buildFileへ挿入した後、ZIPし直すことでモジュールが完成する。
my %stack=();
my $gpid=0;
while(<>){
  ++$gpid;
  my $unitname;
  my $seq;
  ( $unitname, $seq, $stackid )=split " ";
  my $unitfilename="dtp-units200dpi-$seq.png";
  my $unitfilename2="dtp-units-r200dpi-$seq.png";
  if ( $unitfilename2 ){
    $stack{$stackid}.= qq#<VASSAL.build.widget.PieceSlot entryName="$unitname" gpid="$gpid" height="0" width="0">+/null/emb2;;2;;Flip;2;F;;0;;;;1;false;0;0;$unitfilename,$unitfilename2;,;true;;;;false;;1 piece;;;$unitfilename;$unitname/1; null;0;0;$gpid</VASSAL.build.widget.PieceSlot>
#;
  }else{
    $stack{$stackid}.= qq#<VASSAL.build.widget.PieceSlot entryName="$unitname" gpid="$gpid" height="0" width="0">+/null/piece;;;$unitfilename;$unitname/null;0;0;$gpid</VASSAL.build.widget.PieceSlot>
#;
  }
}
my $offset=116;
foreach( keys %stack ){
  $offset += 20;
  print qq#<VASSAL.build.module.map.SetupStack name="$_" owningBoard="Dagger Thrust Patton" useGridLocation="false" x="$offset" y="4526">
#;
  print $stack{$_};
  print qq#</VASSAL.build.module.map.SetupStack>
#;
}

これで作ったモジュールがDagger Thrust: Patton (CMJ98)。ターンマーカーだけ小さくなってしまった。マップ二つでMontgomeryと二個一緒にできるだろうか。
2011/6/2
二個一緒にできたのでMAに書いた。

2012年5月10日木曜日

S&TのLibrary Subscriptionなかなか

1年19ドルちょっとでStrategy & Tactics の#178-#266、Moves #1-#60とWorld at Warの#1-#15の記事だけ(付録ゲームなし)、1号1ファイルのpdfで読める。携帯デバイスに放り込んで読むのに好都合。読める号は順次拡大の予定とある。この収録状況(2010年12月発売分までか)だと最近の号は2年遅れで収録だろうか。まあ本誌が売れなければ意味がない。

提供されるファイルは、本当に1号分からルールブックを外してそのまま。太っ腹というべきか、バックナンバーで稼ぐ気がないというべきか。

ファイルサイズは1号あたり20Mほど。AppleのPDFドライバとは相性が悪いのか、写真が表示されないこともある。