Water Crown

第3部:XML記述リファレンス (2/2)

目次

    3.4 地形・自然

    地形や自然要素に関するコントリビューションの定義です。

    3.4.1 地表

    地面のテクスチャを定義します。

    <contribution type="land" id="{GUID-LAND-001}">
      <group>舗装</group>
      <name>石畳</name>
      <price>100</price>
      
      <!-- 地形ビルダークラス
           StaticLandBuilder: 固定の1種類の画像を使用
           RandomLandBuilder: 複数の画像をランダムに配置
      -->
      <class name="freetrain.contributions.land.StaticLandBuilder">
        <sprite origin="0,0" offset="0"> <!-- 地表は通常 offset=0 -->
          <picture src="land.bmp" />
        </sprite>
      </class>
    </contribution>
    
    ランダム配置の例:
    <contribution type="land" id="{GUID-LAND-RANDOM}">
      <class name="freetrain.contributions.land.RandomLandBuilder"/>
      <group>舗装</group>
      <name>ランダム石畳</name>
      <price>100</price>
      <!-- 構成要素となる他のLandContributionのIDを列挙 -->
      <lands>
        {GUID-LAND-PART1}
        {GUID-LAND-PART2}
      </lands>
    </contribution>
    

    3.4.2 柵

    柵は land コントリビューションの一種として実装されていますが、特殊なクラス FenceBuilder を使用します。 この機能を利用するには、拡張プラグイン jp.co.tripod.chiname.lib.fence に含まれる Fence.DLL が必要です。

    <contribution type="land" id="{GUID-FENCE-001}">
       <group>柵</group> <!-- グループを「柵」にすると専用メニューに追加される -->
       <price>100</price>
       
       <!-- FenceBuilderクラスを指定し、codebaseでDLLの場所を指す -->
       <class name="freetrain.contributions.fence.FenceBuilder"
              codebase="../jp.co.tripod.chiname.lib.fence/bin/Fence.DLL"/>
              
       <picture src="fence.bmp" offset="16">
           <!-- 4方向の画像座標指定 -->
           <left_back>0,0</left_back>     <!-- 北面(内側) -->
           <right_back>32,0</right_back>  <!-- 東面(内側) -->
           <right_front>64,0</right_front> <!-- 南面(外側) -->
           <left_front>96,0</left_front>   <!-- 西面(外側) -->
       </picture>
    </contribution>
    
    • 画像形式: 1枚の画像に4つのパターン(内側2面、外側2面)を含める必要があります。
    • 操作: ゲーム内ではドラッグして直線的に設置したり、ボクセル内の特定位置をクリックして4辺のいずれかに設置したりできます。

    3.4.3 森林

    森林は、land コントリビューションの一種として、専用のクラス freetrain.world.land.forest.ForestBuilder を使用して実装されています。 これにより、地面(Voxel)の上にランダムに木が生えている状態を表現します。この方法で作成された森は「地形」の一部(MountainVoxel)として扱われます。

    <contribution type="land" id="{GUID-FOREST-001}">
      <group>森林</group>
      <name>杉林</name>
      <class name="freetrain.world.land.forest.ForestBuilder"
             codebase="bin/FreeTrain.Forest.dll"/> <!-- 標準DLLを使用 -->
      <price>100</price>
      <computerCannotBuild/> <!-- 自動発展で勝手に生えないようにする -->
    
      <!-- 樹木の画像定義 -->
      <picture src="trees_sugi.bmp">
        <override when="winter" src="trees_sugi.WIN.bmp" />
      </picture>
      
      <!-- 下地の地面画像(省略可)
           省略時は元の地面の上に木だけが描画されます。
           指定すると、地面もこの画像に置き換わります。 -->
      <ground>
        <picture src="forest_ground.bmp" origin="0,0"/>
      </ground>
    
      <!-- 
        size: 画像チップ全体のサイズ (幅,高さ)
        count: 画像に含まれる木の種類(パターン)の数
        density: 1ボクセルあたりに生やす木の密度の目安 (1〜3程度)
      -->
      <size>288,42</size>
      <count>9</count>
      <density>3</density>
    </contribution>
    

    3.5 システム・その他

    システム挙動のカスタマイズや、メニュー拡張などに関する定義です。

    3.5.1 金融・経済設定

    株式市場

    株式市場の挙動や営業時間を設定できます。

    <contribution type="stockMarket" id="{GUID-STOCK-MARKET}">
      <settings>
        <!-- 営業時間の設定 -->
        <businessHour open="9" close="15" />
        <!-- イベント発生間隔の調整(ソースコード: StockMarketConfig.cs)
             d=日, m=月, y=年
        -->
        <eventSpans>1d,2d,4d,8d,10d,20d,30d</eventSpans>
      </settings>
    </contribution>
    
    銀行

    銀行の融資・預金ルールを設定できます。

    <contribution type="bank" id="{GUID-BANK}">
      <settings>
        <businessHour open="9" close="17" />
        <!-- 借金の可否と返済可否 -->
        <debt available="true" repayable="true" />
        <!-- 預金の可否と解約可否 -->
        <deposit available="true" cancelable="false" />
      </settings>
    </contribution>
    

    3.5.2 BGM

    ゲーム内で再生可能なBGMを追加します。定義された曲は「設定」>「音楽」メニューから選択可能になります。

    <contribution type="bgm" id="{GUID-BGM-001}">
      <name>素敵な音楽</name>
      <author>作曲者名</author>
      <!-- MIDI, MP3, WMAなどが使用可能 -->
      <href>music/my_song.mid</href>
    </contribution>
    
    • name: 音楽設定メニューに表示されるタイトルです。
    • href: 音楽ファイルのパスを指定します。
    • サポート形式: MIDI, MP3, WMA, WAV など(システムにインストールされているDirectShowデコーダに依存します)。

    3.5.3 新規ゲーム

    地形のみの新規ゲーム (terrainOnlyNewGame)

    「新規作成」ダイアログに新しい種類のゲームモード(地形生成ルール)を追加します。
    ※この機能を使用するには、org.kohsuke.freetrain.tools.terrainloader プラグインへの依存定義が必要です。

    <plug-in>
      ...
      <depend on="org.kohsuke.freetrain.tools.terrainloader" />
    
      <contribution type="terrainOnlyNewGame" id="{GUID-NEWGAME-001}">
        <name>平原マップ</name>
        <author>MapCreator</author>
        <description>広大な平原からスタートします。</description>
        <!-- マップ生成に使用する高さマップ画像 -->
        <image href="heightmap.bmp" />
        <size>200,200</size>    <!-- マップサイズ -->
        <height>64</height>     <!-- 最大高さ -->
        <waterLevel>10</waterLevel> <!-- 水面高さ -->
      </contribution>
    </plug-in>
    
    ゲーム作成ウィザードの追加 (newGame)

    C#でプログラムされた独自の新規ゲーム作成ウィザードを追加します。

    <contribution type="newGame" id="{GUID-NEWGAME-LOGIC}">
      <class name="MyNamespace.MyNewGameWizard" codebase="MyPlugin.dll"/>
    </contribution>
    

    NewGameContribution クラスを継承し、createNewGame() メソッドなどを実装する必要があります。

    3.5.5 ドッキングウィンドウ

    メインウィンドウにドッキング(吸着)可能な情報ウィンドウを追加します。会計サマリや駅リストなどがこの形式で実装されています。

    <contribution type="dockingContent" id="{GUID-DOCK-TOOL}">
      <name>マイツール</name>
      <!-- 実装クラス: System.Windows.Forms.Control を継承している必要があります -->
      <class name="MyNamespace.MyToolWindow" codebase="MyPlugin.dll"/>
      
      <!-- メニューへの追加設定
           name: メニュー項目名
           location: 追加先のメニュー階層(例: view/tools = 表示>ツール)
      -->
      <menu name="マイツールを表示" location="view/tools" />
      
      <!-- 複数のウィンドウを開くことを許可する場合(省略時はシングルトン) -->
      <!-- <multiple/> -->
    </contribution>
    
    • <class>: ウィンドウの中身となるコントロールのクラスを指定します。
    • <menu>: メインメニューのどこに表示切り替え項目を追加するかを指定します。
      • location: view/financial (経営), view/tools (ツール), view/system (システム) などが指定可能です。

    3.6 高度な拡張

    これらは通常、C#によるプログラミングを伴う高度な拡張で使用されます。