2013年1月18日金曜日

ユニットを特定の場所にランダムに配置する方法

Basic3のLeningradでは赤軍の戦闘力は当初不明で、戦力はU-7というように分からない。
初めて戦闘したときに裏返されて戦力が判明する。

戦車師団と機械化狙撃兵師団を合わせた機械化師団(U-7)12個のうち
最強は第42戦車師団の10-4-7、 最弱は第163機械化狙撃兵師団の3-3-7。

これらはゲーム開始時Map上に4つ、増援でTurn1に3つ、Turn2・4・5・7・8に1つ配置される。

VASSALモジュールでランダムにPieceを配置するにはDeckを使う。
 Vassal_3.1_designerguide.pdfのp.78に
"Dealing Random Cards to a Board"という項目があり、これを参考にしたが、いくつかはまった点があったので、まとめておく。

designerguideの方法の基本的な流れは
1)ユニットの送り先として"1"から"12"までのRegionを作成
2)GridLocationというGlobal Propertyを作成。
3)Deckを作成
4)Deckに12個のユニットを作成
5)ユニットにSend to Location traitを付ける。
6)ユニットがRegion $GridLocation$に送られるように設定
 7)ユニットにSet Global Property traitを付ける。
8)Global Property GridLocationがCTRL-Iで1から12まで1ずつ増えるように設定する。
9)Deckを作ったMap WindowにGlobal Key Commandを作成。
10)GKCをDeckNameが一致したUnit全てにCTRL-Iを送るように設定。

このGKCをクリックすると、
Deck上のユニットにCTRL-Iが送られ。
GridLocationは最初は1。そのRegion 1にユニットを送る。
GridLocationを増加させ2にして、次のユニットをRegion   2に送る。
 これを12まで繰り返すことで12個のユニットをランダムに配置する。

というものだが、
この順序で作成すると、CTRL-IでGridLocationが増えてしまってから
Region に送られるため、問題が生じる。
 またIrregular GridだとHex Gridと併存できないので、
Multi-zoned Gridにする必要がある。

 実際にやったこと;
 1)1〜12のZoneを設定
通常のHex gridのmapの上に、ユニットをランダムに配置するZoneを設定したい。
通常、1つのBoardには1種類のGridしか設定できないが、
Multi-zoned Gridを設定すると、DefaultのGridの上にZoneを設定していくことができる。

Moduleを右クリックしてAdd Map Window。Mapと名付けておく。
Mapの中のMap Boardを右クリック。Add Boardでscanした地図の画像をMapと名付けて設定。
Mapを右クリックしAdd Multi-zoned Grid。
[Multi-zoned Grid]を右クリックしてAdd Hex Grid。
Hex Gridはいつもと同じように設定する。

次にZoneの設定。
[Multi-zoned Grid]を右クリックして Add Zone。
Nameを数字の1にしてDefine Shapeで、ランダムにユニットを送りたい地点を指定する。
Mapが開くの、設定したい地点をClickして斜めにDrag。四角形のareaを設定する。
(複雑なareaも設定することができるが、今回は不要)
Use board's grid?はチェックしない。Use Highlighting?もチェックしない。
1から12までのZoneを設定する。1から4はMap上、5から12はターントラックに配置する。

 2)Global Property GridLocationを作成
モジュールの[Global Property]を右クリックしてGridLocationを作成
Name を GridLocation
Initial value 1
Is Numericをチェック
Minimum value 1
Maximum value 12
Wrap aroundをチェック

3)Deckを作成
Map[Map Window]を右クリックして Add Deck
RAAD(RedArmy Armored force Distributionの略)と名付けておく。
 Deckのpropertyでは
Allow Multiple Cards to be Drawn?にチェックをつける。
 Reposition Stackで0101あたりを指定しておく。
Re-shuffle はAlways。他はチェックしない。

 4)ユニットを登録
このDeckにランダムに配置したい機械化部隊12個を登録する。
traitをDeckを右クリックして Edit All Contained Piecesでまとめて編集する。

 DeckのユニットのTraitsは

Basic Piece
Text Label - P&M
TextLabel -Division
Mask (戦闘力不明状態用)
Layer (補給切れ表示用)
Prototype (移動後表示、除去指示用)
Set Global Property (GridLocationを増加させる)
Send to Location ( region $GridLocation$に送られる)

デザイナーガイドの順序で作成すると
Set Global Prooertyが一番下で、一番最初に実行されるためうまくいかない。

5)Set Global Property
SetGLと名付ける。
Global Property Name を GridLocation
Local Property starting in the "Current Zone/Current Map/Module"
Is Numericをチェック
Minimum value 1
Maximum value 12
Key Commandsで
Menu Command Change value
Key Command CTRL I
Type Increment numeric value
Increment 1

6)Send to Location
RandomDistと名付ける
Command Name RD
Keyboard Command CTRL I
Send Back Command name 空白
Send Back Keyboard Command 空白
Destination Zone on selected Map
Map で "Map"をSelect
Zone Name "$GridLocation$"

7)Global Key Command
Mapを右クリックして Add Global Key Command

Discription; RD
Key Command: CTRL I
Matching properties: DeckName=RAAD
Apply to counters on this map onlyにチェック
Within a Deck, apply to: All pieces
Button text RD
Tooltip text RD
Button IconはDefault
Hotkey 空白
Suppress individual reports? チェックせず
Report Format空白










 

2 件のコメント:

  1. はじめましてMAから来たちゃいと申します。
    大変興味深い考察ですね!
    私も3年ほど前から色々とモジュールを作成していますが、今までランダムにユニットを配置するということが無かったのでこのような使い方は初めて知りました。
    私の場合、英語が不得意なので分からない時はMAで質問したり既存のモジュールを解析したりしているので新しい機能を覚えるのにかなり時間がかかってしまいます。
    なのでこのようにブログで機能についての考察があると大変ありがたく思います^^
    これからもがんばってください!

    返信削除
  2. コメントありがとうございます。
    昔のゲームをソロプレイのためにモジュール化しています。
    VASSALの機能は奥深くいろいろなことが可能なのだと思いますが、
    ぼちぼちやってます。MAでもよろしくお願いします。

    返信削除