全体
ここでは、スクリプト全体を通した基本を解説します。
できること
BMW銀を作るのに必要なキャラ・武器などのデータ定義とADV/SLGのシナリオを記述することができます。
構成
スクリプト単体での動作は考慮しておらず、プログラムの方から読み込んで使うことを前提にしています。
そのため、スクリプト間の連携がわかりにくいと思いますので、以下にスクリプトの関係をざくっと示します。
というように、大体、階層構造になっています。上段のスクリプトがそれより下のスクリプトを利用して記述するようになっています。
基本フォーマット
スクリプトは、似非XML形式になっています。
例:キャラデータ定義から1キャラ抜粋
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| | <character id="PLAYER_TAKUMI">
<init name="匠">
<face id="TAKUMI" />
<map src="data3\chara\takumi_map.xml" />
<demo src="data3\chara\takumi_demo.xml" symbol="data3\chara\takumi_symbol.xml" />
<bgm id="TAKUMI" />
<nature type="STRONG" />
<growth type="FIGHT_VERSATILITY" />
<penalty value="800" />
<fund strength="147" magic="110" hit="181" avoid="165" defence="130" skill="150" sp="50" />
<battle hp="7000" en="190" tough="1700" quick="85" move="5" jump="0" />
<weapon id="GEKIKEN" />
<weapon id="HADANKEN" />
<weaponcost type="D" />
<item num="2" />
</init>
<growth>
<spirit lv="1" id="HIT" attr="15" />
<spirit lv="1" id="EFFORT" attr="15" />
<spirit lv="12" id="TOUGH" attr="15" />
<spirit lv="24" id="FIREBALL" attr="35" />
<spirit lv="27" id="POWER" attr="40" />
<spirit lv="30" id="AWAKE" attr="55" />
<skill lv="1" id="SPECTER" attr="1" />
<skill lv="1" id="FUNDPOWER" attr="1" />
<skill lv="1" id="MOVE_UP" attr="1" />
<skill lv="5" id="SPECTER" attr="2" />
<skill lv="7" id="FUNDPOWER" attr="2" />
<skill lv="12" id="SPECTER" attr="3" />
<skill lv="13" id="FUNDPOWER" attr="3" />
<skill lv="19" id="FUNDPOWER" attr="4" />
<skill lv="21" id="SPECTER" attr="4" />
<skill lv="24" id="FUNDPOWER" attr="5" />
<skill lv="26" id="SPECTER" attr="5" />
<skill lv="30" id="FUNDPOWER" attr="6" />
<skill lv="35" id="SPECTER" attr="6" />
<skill lv="35" id="FUNDPOWER" attr="7" />
<skill lv="39" id="SPECTER" attr="7" />
<skill lv="40" id="FUNDPOWER" attr="8" />
<skill lv="42" id="SPECTER" attr="8" />
<skill lv="44" id="FUNDPOWER" attr="9" />
</growth>
</character>
|
XML自体の説明は割愛します。*1似非といったのは本来のXMLには無い制限と拡張をして使っているからです。
なので、汎用のXMLパーサーを使っている訳ではなく、XMLの形だけ借りてパーサー自体は専用に組んでいます。
ちなみに、タグで囲う使い方はあまり無く、属性で記述する方式を主に採用しています。
BMW銀似非XMLの制限と拡張
- 制限
タグ・属性を書く順番は固定です。例えば、initタグとgrowthタグを入れ替えて書くとエラーになります。順番は固定ですが省略できることはあります。
- 拡張
同じ名前の属性を書くことができます。ほんの一部のタグで必要になったためにそうしちゃいました。
XMLにしたのはなぜか?
一番大きな理由は、スクリプトを自動生成するようなツールを作ってる時間は無いと思ったので既存のアプリケーションを利用できる形式にしたかったからです。*2
この辺の設計をしてた2004年頃は、XMLがちょうど広まりつつあった頃でいろんなアプリが対応を表明したので、これだ! と思ったのでした。したら、想像を遙かに上回る広まりぷりで驚きですよねぇ。
それ以外ですと、XML形式はそんなに難しくない形式なので、人にスクリプトを書くことを頼むことになっても大丈夫だろうというのもあります。
さらには、お試し版あたりまでは、csvでやってたんですが項目が多すぎて死ねた(直接ファイルをいじるのが実質不可能)ので、xmlにして直接いじるのを楽にしたかったというのもあります。
スクリプトを書くのに使ったツール達
全部が全部最初から導入されたわけでは無く、徐々に使うものが増えていっています。
- サクラエディタ
普段、私が愛用してるだけなんですが、こいつの色づけ機能向けに設定ファイルを書いてみんなで使ってました。
- IE
IEにXMLを渡すとそれなりにみやすい閲覧形式に整形してくれるのですが、XMLの記述をミスしてるとエラーが出る*3ので記述ミス検出に使ってました。同様の理由でVisualStudioのXML閲覧機能も使ってました。
- Excel
VBAでセル内容をXML化したり、XMLで書いたデータが間違っていないかなどのチェック、バランス調整するために各キャラ・武器のステータス集計・閲覧に使っています。スキーマ書くの面倒で完全連携まではしなかったんですが、真面目にスキーマ書いて全部Excelでやっても良かったなと今は思ってたり。
- Flash
BMW銀には欠かせない。こいつが無かったらあんな戦闘デモは作れませんでした。だってアニメーションエディタなんてそれ作ってるだけで半年経っちゃいますし……。
それはともかく、FlashMX2004以降ですとjsfl*4というスクリプトでflaの情報を引き出して加工できるようになったので、それを使ってアニメスクリプトは完全に自動生成できるようになりました。第四部からですがw それまではドッター陣が組んだflaファイルをもらって、それを見ながらスクリプター陣が書くという人海戦術で頑張ってました。
ちなみに、BMW銀では基本FlashMXを使っていました。ただし、jsflを扱う私と本だけはFlash8を最後は使ってました。
- などなど
他にもあった気がしますが、特に重要な4つというこで。