# GameMakerゲームをSteamへ移植する

> GameMakerのルームとオブジェクトは、シーンとノードにきれいに対応する。GMLは書き直しが要り、スプライトはそのまま持ってこられる。

- URL: https://www.summerengine.com/ja/port-gamemaker-game-to-steam
- Keyword: GameMakerゲームをSteamへ移植する
- Related: https://www.summerengine.com/ja/porting

GameMakerゲームのSteamへの移植とは、権利のあるゲームを新しいエンジンで作り直し、そのビルドをSteamworks経由で公開することだ。.yypのプロジェクトやGMLのコードのためのインポーターは存在しない。

考え方の対応は、たいていのエンジン移行より素直だ。GameMakerのルームはシーンになる。オブジェクトはスクリプトを付けたノードになる。CreateとStepのイベントはreadyとprocessの関数になる。アラームはタイマーになる。Drawのイベントは、レンダラーがスプライトと図形を描く形になる。この対応が見えれば、移植はおおむね機械的な作業と調整だ。

Summer EngineはC++とGDScriptを使い、C#もデスクトップエディタで使える。一つのプロジェクトからSteam向けのデスクトップビルドを書き出す。プロジェクトは自分のもので、稼いだ収益に対してSummerにロイヤリティを払う必要はない。

## GameMakerの概念がどう対応するか

ルームはシーンになる。オブジェクトはノードになり、オブジェクトの継承はシーンの継承か共有の基底スクリプトになる。インスタンス変数はスクリプトの変数になる。アラームはタイマーのノードになる。衝突のイベントは物理か領域のコールバックになる。スプライトとimage_indexのアニメーションはスプライトのフレームかアニメーションプレイヤーになる。グローバル変数はオートロードのシングルトンになる。ds_mapとds_listは辞書と配列になる。シーケンスとパスは、アニメーションとパス追従のノードで作り直す。

## GMLを書き直す

GMLはエンジン固有の組み込み関数を持つ簡潔な言語なので、自動では変換されない。精神が近く読みやすいGDScriptで書き直すか、性能が要となる仕組みはC++で書き直す。定数はすべて保つ。速度、重力、摩擦、ダメージの数値、出現の頻度、フレーム数だ。GameMakerのゲームはフレーム単位の手触りで生き死にが決まることが多いので、近似ではなく元のルームの速度とステップのタイミングを一致させる。

## くっきり保つドット絵

スプライトとタイルセットは自分のもので、PNGのファイルとして移る。テクスチャのフィルタをnearestに設定し、整数倍の拡大か固定のビューポート解像度を使ってドットが正方形のままになるようにし、カメラの位置は整数のピクセルに合わせてちらつきを防ぐ。元が320x180のような小さいネイティブ解像度なら、それを描画解像度として保ってから拡大する。任意のウィンドウの大きさでアートを描画しない。

## Steamでのリリースの作業

Steamworksのアカウントを登録し、一タイトルあたり100米ドルの一回限りのアプリ料を払い、税と銀行の情報を埋める。デポを作り、SteamPipeでビルドを上げ、OSごとに起動オプションを設定する。コントローラがそのまま動くようSteam Input、セーブ向けにSteam Auto Cloud、パートナーサイトで定義した実績を足す。解像度、全画面、割り当て変更できる操作の選択肢も足す。Steamのプレイヤーは小さな2Dのゲームにもそれを期待する。

## FAQ

### GMLは自動で変換できるか

できない。GMLはGameMaker固有の組み込み関数とランタイムの挙動を使う。スクリプトは元のコードを正確な仕様として使い、GDScriptかC++で書き直す。

### スプライトとルームは移るか

スプライト、タイルセット、音声、フォントは権利のあるファイルとして移る。ルームの配置はシーンとして作り直すが、ルームをタイルマップか座標の一覧として書き出せば速く進む。

### なぜGameMakerから移るのか

よくある理由は、3Dの必要、書き出し対象ごとのライセンス費用、性能の余裕、そしてC++水準の制御が欲しいことだ。Summer Engineは一つのプロジェクトから、Steamやitch.io向けのデスクトップビルドをロイヤリティなしで書き出す。

### ゲームの手触りは同じになるか

数値が一致すれば同じになる。移動速度、重力、摩擦、ジャンプの高さ、タイミングの値をGMLから直接写し、原版の録画と一フレームずつ突き合わせて確かめる。

### Steamの費用はいくらか

一タイトルあたり100米ドルの一回限りのアプリ申請料で、売上1000米ドルの後に回収でき、加えてValveの売上分配がある。

[作り直しを始める](https://www.summerengine.com/ja/download)

---

## Machine-readable resources

- Site index for agents: https://www.summerengine.com/llms.txt
- Full inlined content: https://www.summerengine.com/llms-full.txt
- Porting catalog: https://www.summerengine.com/llms-porting.txt
- Structured catalog: https://www.summerengine.com/agent-catalog.json
- Sitemap: https://www.summerengine.com/sitemap.xml
- Developer resources: https://www.summerengine.com/docs
- Summer API (assets from any agent or code; public per-call model prices): https://docs.summerengine.com/api