最終更新日時: 2010年04月19日 (月) 18時17分12秒



建築物定義の例

各種の建築物(駅舎、建物、アクセサリなど)の定義のうち、画像の表示に関する部分は同じ書式を使用します。

例えば、駅舎と建物では、駅舎に特有の部分と建物に特有の部分がありますが、画像部分の定義は共通です。

以下に、建築物の画像に関する定義の例を示します。

画像

建築物に使用する画像については、建物を作る画像の形式を参照してください。
画像の大きさは、建物のボクセル境界に合うサイズにするのが基本です。
この例では、以下のような画像から建築物を作成することにします。
この画像は、2×4(4×2)ボクセルの面積を持つ建築物を、向きを変えて2つ並べたものです。
上の図のように、ボクセル上に配置されてます。

建築物の基準となるボクセル

建築物は、その左上端のボクセルを基準に配置/管理されます。先の画像の、黄色く色が付いているボクセルが、建築物の基準となるボクセルです。

左側の建築物

画像のサイズ

この画像のサイズは、以下のようになっています。
左側の建築物は、画像の上端から、建築物の基準となる左端のボクセルの上端まで、40ピクセルあります。

左側の建築物は、画像の左端と上端から始まっています。

建築物の最も高い部分の高さは、ボクセル上端から32ピクセルです。

建築物の定義

建築物一般の定義は、
<size>横幅,縦幅</size>
<height>高さ</height>
<sprite>
  スプライト定義
</sprite>
です。
この建築物の場合、横幅は、基準ボクセルから右上方向のボクセル数ですから 2 (ボクセル)、縦幅は、基準ボクセルから右下方向のボクセル数ですので、4 (ボクセル) です。

高さは、この建築物の高さを指定します。単位は、ゲーム中の高さで、高さ1 は、画像の16ピクセルに相当します。
よって、この建築物の高さは、2 となります。

スプライト定義は、この画像をどのようにスプライトとして表示するかを定義します。
詳しくは、スプライトタグを参照してください。

ここでは、左側の建築物全体を表示しますので、originは 0,0 、offset は 40 とします。
ここでの指定は、スプライトの開始点です。スプライトの範囲は、建築物の大きさから自動的に決定されます。
必要な画像のサイズは以下の式で計算できます。

幅 = originのX座標 + (ボクセルサイズX + ボクセルサイズY) * 16
高さ = originのY座標 + offset + (1 + ボクセルサイズY) * 8
※用意した画像ファイルのサイズがスプライトの範囲に満たないと、ゲーム中で正しく表示されません。

以上の情報より、
<size>2,4</size>
<height>2</height>
<sprite origin="0,0" offset="40">
  <picture src="画像ファイル名" />
</sprite>
と記述すればよいことがわかります。

右側の建築物

右側の建築物も、左側のものと同様に定義します。
上記の図より、右側の建築物は、画像の上端から、建築物の基準となる左端のボクセルの上端まで、56ピクセルあります。
右側の建築物は、画像の左端から112ピクセルの位置と、画像の上端から始まっています。 建築物の最も高い部分の高さは、左側の建築物と同じく、ボクセル上端から32ピクセルです。
横幅は、横幅は、基準ボクセルから右上方向のボクセル数ですから 4 (ボクセル)、縦幅は、基準ボクセルから右下方向のボクセル数ですので、2 (ボクセル) です。
高さは、左側のものと同じ、32ピクセルですから、2 となります。

スプライト定義は、右側の建築物全体を表示しますので、originは 112,0 、offset は 56 とします。 以上の情報より、
<size>4,2</size>
<height>2</height>
<sprite origin="112,0" offset="56">
  <picture src="画像ファイル名" />
</sprite>
と記述すればよいことがわかります。

実際の定義

上記の建築物2つを追加するプラグインを作成します。

この場合、2つの建物で同じ画像を使用しますので、ピクチャコントリビューションを使用して、1つの画像を参照するようにします。

この例は古いプラグインを参考にしています。現在ではcommercialコントリビューションは作ってはいけません

plugin.xml

<?xml version="1.0" encoding="Shift_JIS"?>

<plug-in>
  <title>建築物定義の例プラグイン</title>
  <author>名無しさん</author>
  <homepage>http://http://www.kohsuke.org/freetrain/wiki/pukiwiki.php</homepage>

  <contribution type="picture" id="{1EBA4A26-C35D-4209-9C71-AA9B1237C14C}">
    <picture src="sample_structure.bmp" />
  </contribution>

  <contribution type="commercial" id="{1EE9BBF8-9E2E-4c75-BB9A-0CB93B7FFAC1}">
    <group>建築物定義の例</group>
    <name>左側の建物</name>
    <price>100</price>
    <size>2,4</size>
    <height>2</height>
    <sprite origin="0,0" offset="40">
      <picture ref="{1EBA4A26-C35D-4209-9C71-AA9B1237C14C}" />
    </sprite>
    <population>
      <class name="freetrain.contributions.population.OfficePopulation ">
      <base>100</base>
    </population>
  </contribution>

  <contribution type="commercial" id="{A4310773-8164-4edc-BAA6-F8325A8430D9}">
    <group>建築物定義の例</group>
    <name>右側の建物</name>
    <price>100</price>
    <size>4,2</size>
    <height>2</height>
    <sprite origin="112,0" offset="56">
      <picture ref="{1EBA4A26-C35D-4209-9C71-AA9B1237C14C}" />
    </sprite>
    <population>
      <class name="freetrain.contributions.population.OfficePopulation ">
      <base>100</base>
    </population>
  </contribution>
</plug-in>
注:GenericStructureコントリビューションでは、左右対称な大きさのものはopposite属性を指定できます。

他にも……

同じ画像から、駅舎を追加することもできます。
<contribution type="station" id="{A35113CD-F0AD-48ba-8224-B21DFCE44DE9}">
  <group>建築物定義の例</group>
  <name>左側の建物の駅舎</name>
  <price>100</price>
  <size>2,4</size>
  <height>2</height>
  <operationCost>100</operationCost>
  <sprite origin="0,0" offset="40">
    <picture ref="{1EBA4A26-C35D-4209-9C71-AA9B1237C14C}" />
  </sprite>
</contribution>