§
Simutrans TIP (タイムテーブルとかいろいろパッチ)


Jun 26, 2012
wackdone@gmail.com

--------------------
* バージョン情報
--------------------
TIP ver0.02
2012/06/26

パッチファイル名: simr5787-tip002.patch

対応オリジナルソース: simutrans r5787


--------------------
* 概要
--------------------
Simutransの開発版 (Nightly) に対する機能追加パッチセットです。
主に以下のような機能を追加することができます。

 (1) スケジュールでの簡易タイムテーブル機能
 (2) スケジュール管理での細かな機能追加
 (3) 建築時のいくつかの制限解除
 (4) SDLSKK対応
 (5) ゲーム開始時のポーズ 
 (6) ビルドプラットフォーム

それぞれの機能はビルド時にon/offできます。


--------------------
* 注意
--------------------
本パッチは、上述の対応バージョンのオリジナルソースに対してのみテストしています。
本パッチを使用したことによる損害のなどには、一切責任を負いませんのでご了承ください。

本パッチは現状、ネットワークモードで動作するかは検証されていません。


--------------------
* パッチの適用とビルド
--------------------
添付のパッチファイルを、patchコマンドなどで simutrans のソースに適用してください。
(上記「バージョン情報」内の「対応オリジナルソース」を確認のこと)

(UNIX系環境で開発中のため、パッチファイルの行末はLFのみです。
ただしunzipの機能などによって変換されている可能性もあります。
環境によってはご注意ください)

ビルド時のコンフィグファイル (config.defaultなど) の中で、
変数 PATCH_CFLAGS に -Dでマクロ名を追加することで、各機能を有効化できます。
(ただし、SDLSKK対応だけは方法が異なる。後述)

OSTYPE, BACKENDなどを適切に設定し、あとは通常どおりmakeするだけです。

コンフィグファイルの記述は、パッチ内の config.sample などを参照してください。

** パッチ機能有効化の組み合わせ
全ての機能が無効の場合 (PATCH_CFLAGSで何も設定せず) と、
全ての機能が有効の場合 (添付の config.sample 相当) とはビルド、動作ともに
確認しています。

それぞれの機能の有効、無効は独立になるようにコーディングしていますが、
組み合わせによっては予想外の動作をするかもしれません。


--------------------
* セーブファイルの互換性
--------------------
「簡易タイムテーブル」機能 (SCHEDULE_TIMETABLE) を除いては、
セーブファイルの互換性に影響を与えるものはありません。
これまでのセーブファイルを読み込めますし、本パッチをあてたバージョンで
セーブしたファイルをオリジナルのNightlyで読み込むことも可能です。

簡易タイムテーブル機能を有効にした場合は、
save_file_version が 811.4 になります。
この値は正規に予約されているものではありませんので、将来変更される
可能性が充分にあります。

オリジナルのセーブデータを簡易タイムテーブル機能パッチをあてた実行ファイルで
ロードすることは可能です。
この場合、ロード後にプログラム内でタイムテーブル機能の設定を行い、
ゲーム内で機能を試すことができます。
ただし、これが以降のセーブで保存はされません。 (詳細未確認)


--------------------
* 機能の説明: 簡易タイムテーブル
--------------------
少しでもダイアグラム設定に近いことができないかと、
簡易タイムテーブル機能を実験的に実装してみました。
SCHEDULE_TIMETABLE を指定することで有効にできます。
(といっても現在は「タイムテーブル」と呼ぶにはほど遠い仕上りですが。。。)

簡易タイムテーブル機能についての説明は別添の
  TIMETABLE_ja.txt
に記述しています。


--------------------
* 機能の説明: スケジュール管理での機能追加
--------------------
スケジュールおよび路線管理での簡単な機能の追加です。


** SCHEDULE_CLONE_LINE: 路線の複製
路線管理ウィンドウで路線を選択し "Clone Line" ボタンを押すと、
選択した路線を複製した新しい路線が作成されます。

新しく作成された路線には、元の路線名の末尾に " cloned" が追加された
路線名がつけられます。

既存の各駅停車路線をもとに新規の快速路線を作成する場合などに便利です。
(乗り物のスケジュールウィンドウで "Promote Line"(「路線を作成」) を
 行った場合とあまり違いはありませんが、スケジュールウィンドウを開くことで
 乗り物を停止させてしまうという副作用がありません。)


** SCHEDULE_MODIFY_STOP: 停止点の変更
スケジュール変数ウィンドウで、"InsStop" (「挿入」)モードにいる時、
Ctrlを押しながら停止点をクリックすることで、
スケジュール上で選択されている停止点をクリックした位置に変更することができます。

自動で往復路線を作成した後で、復路の停止点を反対側のホームに変更していく場合などに便利です。

問題点: 停止点をハイライトさせている時にこの停止点の変更を行った場合、
  元の停止点のハイライトが残ってしまいます。
  (ゲームをロードしなおすまで残ってしまう)
  (プログラム上の修正が大掛かりなため対応保留中です)


--------------------
* 機能の説明: 建築制限の解除
--------------------
主に高架線や駅ホームまわりでの建築上の制約を取り除きます。

** MAY_SLOPE_UNDER_ELEVATED: 高架線下のスロープ
水平な高架線の下に並行する方向のスロープが設置できます。
また逆に既存のスロープの端に接っするように、高架線の端部を下げることができます。

(一部で解説された裏技のように整地、特殊駅施設を設置、施設削除という手順を踏めば
これまでも可能ではありました)

** MAY_ELEVATED_ON_TUNNEL_ENTRANCE: トンネル入り口上の高架線
トンネル入り口の上に高架線を施設できるようにします。
トンネル入り口の真上に並行して水平に高架線を設置したい場合は、
傾斜に沿った高架線を建設したあと、スロープツールで下げてください。

** DONT_REMEMBER_ELEVATED: ？？？
(過去に作ったものですが何故必要だったか思い出せず。
有効でも特に害はありません。上のそれぞれと一緒に有効にして下さい)

** MAY_STATION_ON_TUNNEL_ENTRANCE: トンネル入り口部のホーム
トンネル入り口部分に駅ホームやバス停を設置できるようにします。
(古いバージョンでは可能でした)

問題点: ホームの表示位置がずれてしまう。
  (対策検討中)

** MAY_FLIP_STATION_FACE: 駅ホームの自動設置判定の反転
自動設置対応ホームを設置時に、Ctrlを押しながら設置することで、
本来の自動判定の向きとは逆向きのホームを建設します。
(Ctrlを押すのは設置位置をクリックするタイミングです。
 ツールを選ぶタイミングではありません。)

例えばデフォルトでは、下の線路の中央をクリックすると

　　　　　　□  ホーム
線路　＝＝＝＝＝＝＝

のように設置されるところを、Ctrlを押しながらクリックすることで、

線路　＝＝＝＝＝＝＝
　　　　　　□  ホーム

のように設置されます。
続けて並べて設置する時は (自動判定は既存のホームの向きを参考にするので)
Ctrlを押さないようにして下さい。

言葉で考えるより使ってみて慣れた方が早い機能です。
(次の MAY_DOWNGRADE_HALT を有効にすれば、資金に余裕さえあれば
何度でも試せますし。)

** MAY_DOWNGRADE_HALT: 駅のダウングレード
既存の駅に上書きで、レベルの低い(容量の小さい)駅を建設できるようにします。

これを有効にしている場合、モディファイヤキーなど一切関係なく、
警告も無しに問答無用で上書き建設されてしまうので注意。


--------------------
* 機能の説明: SDLSKK対応
--------------------
(荒削りな対応です。実用充分だと考えていますが、使用には注意)

SDL上で日本語入力を可能にします。
つまり、Windows以外のプラットフォームでも日本語入力が可能になります。

** ビルド
SDLSKK ライブラリ (http://www.kmc.gr.jp/~ohai/sdlskk.html) が必要です。
SDLSKK および必要な関連ライブラリを準備した上で、
ビルドコンフィグファイル内で
  SDLSKK = 1
を指定してください。

また、 Makefile の "ifdef SDLSKK" の中を編集して
ヘッダファイルやライブラリのパスを環境に合わせて調整してください。

** 実行
実行時にはカレントディレクトリ(ゲームディレクトリ)以下に
いくつかのファイルが必要です。
  skk_rule_table  ローマ字カナ変換ルールファイル
  skk_jisyo       辞書ファイル (SKK-JISYO.L などを UTF8 に変換したもの)
  skk_font.ttf    SDLSKK用フォントファイル (一般的な日本語TTFファイルでよい)
(各ファイルの詳細はSDLSKKのページなども参照してください。)

また、学習や単語登録の結果は skk_user_jisyo というファイルに保存され、
次回のゲーム起動時に再び読み込まれます。

このパッチには、skk_rule_table のサンプルのみ添付しておきます。

** 利用
ゲーム内でテキスト入力が可能な状態で、
  Shift + Space
または
  Ctrl + J
を打鍵すると SKK 入力モードに入ります。
SKKでの一時入力内容は、画面最下部、ステータスバー部分を黒に塗り潰して表示されます。(入力エリア)

q でかな・カナトグル、l で半角モード、L で全角モード
Ctrl+J で日本語入力/確定
など、キーバインディングは一般的なSKKと同様です。

SKK入力モード中は、ゲーム時間は停止してしまいます。
入力エリア上で確定していって最後に Enter を打鍵すれば、本来のテキスト入力部に
挿入され、SKK入力モードを抜けます。

(ステータスバーは、時とともに復元されます)

** 問題点
いずれも真面目にやると面倒だという理由で放置しています。
 - 入力エリアが固定されておりかつステータスバーを塗り潰す
 - SKKの入力モード表示がない
 - on_the_spot 入力できない
 - 入力中、ゲーム時間が停止してしまう


--------------------
* 機能の説明: その他
--------------------
** PAUSE_AFTER_LOAD: ゲームロード時にポーズ状態で開始
ゲームをロードした直後、ポーズ状態でゲームを開始します。

** 対応プラットフォームの追加
OSTYPEとして netbsd を指定できるようにしてあります。
freebsd と違いはありませんが、このパッチの開発者の都合です。


