simutrans

Simutrans プロジェクト概要

プロジェクトについて

Simutrans は、オープンソースの交通シミュレーションゲームです。鉄道、道路、船舶、航空機による旅客・郵便・貨物輸送を通じて、成功した運輸会社の経営を目指します。

目的

このドキュメントは以下の目的で作成されています:

対象読者:

技術スタック

プログラミング言語

ビルドシステム

プロジェクトは 3 つのビルドシステムをサポート:

  1. Make (推奨: デバッグビルド、Linux)
  2. CMake 3.16+ (推奨: macOS、Android)
  3. Microsoft Visual Studio (推奨: Windows、デバッグビルド)

依存ライブラリ

必須ライブラリ

ライブラリ バージョン 用途
zlib - 基本的な圧縮サポート
libpng - 画像操作
libfreetype - TrueType フォントサポート
bzip2 または zstd - 代替圧縮(どちらか一方が必須。vcpkg では zstd を使用)
SDL2 2.x グラフィックバックエンド(Linux/Mac 必須、Windows 推奨)

オプションライブラリ

ライブラリ 用途
miniupnpc 簡易サーバー機能
fluidsynth MIDI 再生(Linux 推奨、Mac 一時的推奨)
SDL2_mixer 代替 MIDI 再生とサウンドシステム
fontconfig フォント自動検出(Linux/Mac)

グラフィックバックエンド

プロジェクト構造

ディレクトリ構成

simutrans/
├── src/                      # ソースコード
│   ├── simutrans/           # メインゲームコード
│   │   ├── builder/         # 建設関連
│   │   ├── dataobj/         # データオブジェクト
│   │   ├── descriptor/      # 記述子
│   │   ├── display/         # 表示システム
│   │   ├── ground/          # 地形
│   │   ├── gui/             # ユーザーインターフェース
│   │   ├── io/              # 入出力
│   │   ├── network/         # ネットワーク機能
│   │   ├── obj/             # ゲームオブジェクト
│   │   ├── player/          # プレイヤー管理
│   │   ├── script/          # スクリプト(AI)
│   │   ├── sound/           # サウンドシステム
│   │   ├── sys/             # システム依存コード
│   │   ├── tool/            # ツール
│   │   ├── tpl/             # テンプレートライブラリ
│   │   ├── utils/           # ユーティリティ
│   │   ├── vehicle/         # 車両システム
│   │   └── world/           # ワールド管理
│   ├── makeobj/             # Pakset作成ツール
│   ├── nettool/             # ネットワークツール
│   ├── squirrel/            # Squirrelスクリプトエンジン
│   ├── android/             # Android固有コード
│   ├── linux/               # Linux固有コード
│   ├── OSX/                 # macOS固有コード
│   └── Windows/             # Windows固有コード
├── cmake/                    # CMakeビルドスクリプト
├── documentation/            # 開発者向けドキュメント
├── simutrans/               # ゲームデータ(AI、設定、テキストなど)
├── tests/                   # テストスクリプト
├── themes.src/              # UIテーマソース
└── tools/                   # 開発ツール

Visual Studio プロジェクト構成

アーキテクチャ概要

コア構造

Simutrans は階層的なオブジェクト指向設計を採用:

  1. karte_t (マップ/世界)
    • 2D 座標の配列を保持(planquadrat_t)
  2. planquadrat_t (2D 座標)
    • grund_t の配列を保持
  3. grund_t (地面・基礎)
    • トンネル、橋、高速道路、水域などを表現
    • objlist を保持
  4. obj_t (オブジェクト)
    • 車、列車、飛行機などの移動オブジェクト
    • 建物、木などの静的オブジェクト
    • obj/フォルダに配置

更新サイクル

オブジェクトは 3 種類の定期的な呼び出しを持つ:

UI アーキテクチャ

ビルド方法

Make の場合(Linux/Mac)

# Linux
autoconf
./configure
make -j 4

# macOS
autoreconf -ivf
./configure
make -j 4
make OSX/getversion

CMake の場合

# Linux/MinGW/macOS
cmake -B build .
cmake --build build -j 4

# MSVC
cmake.exe .. -G "Visual Studio 16 2019" -A x64 \
  -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake
cmake --build . --config Release

Visual Studio の場合

  1. Simutrans.slnを開く
  2. スタートアッププロジェクトを選択(SDL2/GDI/Server)
  3. ビルド実行

開発環境セットアップ

Windows

Linux (Ubuntu/Debian)

tools/setup-debian.sh

Mac

コーディングスタイル

詳細はdocumentation/coding_styles.txtを参照

主要なルール:

バージョン管理

貢献方法

コード貢献

翻訳

グラフィック

バグ報告

関連ファイル

ビルド設定

依存関係管理

ドキュメント


まとめ

Simutrans は 25 年以上の歴史を持つ成熟したプロジェクトです:

主な特徴:

このプロジェクト概要を理解したら、次は以下のドキュメントに進みましょう:

  1. DEVELOPMENT_SETUP.md - 開発環境の構築
  2. DEPENDENCIES.md - 依存ライブラリの詳細
  3. TECHNICAL_ARCHITECTURE.md - アーキテクチャの深掘り

関連リンク

ライセンス

Artistic License 1.0(OSI 承認)。詳細はLICENSE.txtを参照。

Pakset(ゲーム実行に必要)は別ライセンス。