# Flashゲームを、今も存在するプラットフォームへ移植する

> アドビは2020年12月31日にFlash Playerのサポートを終了した。Flashゲームの移植とは、権利のある作品を、人々が今も使っているプラットフォームで動くように作り直すことだ。

- URL: https://www.summerengine.com/ja/port-a-flash-game
- Keyword: Flashゲームを移植する
- Related: https://www.summerengine.com/ja/porting

Flashゲームの移植とは、権利のあるゲームを作り直すことだ。もうFlashを動かすブラウザはないからだ。アドビは2020年12月31日にFlash Playerのサポートを終了し、2021年1月にコンテンツの実行を遮断した。プラグインに依存していたSWFはすべてその日に動かなくなった。

ゲームの権利が要る。自分で作ったFlashゲーム、またはリメイクのライセンスを持つ作品を移植する。他人のSWFを逆コンパイルし、アセットを抜き出し、再公開することはここでは扱わない。

正しく作り直せば、Flashゲームは現代の行き先によく合う。マウス入力、ベクターアート、短いセッションのために作られていたからだ。Summer Engineは自分のものになるプロジェクトとして作り直し、Steamやitch.io向けのデスクトップビルドをロイヤリティなしで書き出す。GDScriptで作り直したゲームはWebビルドも書き出せ、Summer Gamesで公開できる。

## 古いFlashプロジェクトから生き残るもの

FLAファイルがまだ残っているなら、最も価値があるのはベクターアートだ。ベクターの図形はどんな解像度でも書き出し直せるので、550x400のステージ向けに作られたゲームでも4Kで鮮明に作り直せる。タイムラインのアニメーションは、アニメーショントラックかスプライトシートとして作り直すことになる。Flashのタイムラインを読むエンジンはないからだ。ActionScriptは参照資料だ。ロジックは移るが、構文は移らない。

## ActionScriptから現代の言語へ

ActionScript 3もGDScriptも動的に扱いやすいクラスベースのスクリプト言語なので、翻訳は多くの場合機械的だ。イベントリスナーはシグナルになる。enterFrameのハンドラはprocessのコールバックになる。MovieClipはスプライトとアニメーションプレイヤーを持つノードになる。ActionScript 2のコードはもっと緩いので、翻訳よりも構造の作り直しが要ることが多い。好みならデスクトップエディタでC#を使うこともできる。

## フレーム基準のタイミングはデルタタイムにする

Flashはステージのフレームレート、多くは24または30フレーム毎秒で動き、ゲームロジックの多くは秒ではなくフレームを数えていた。60、120、144Hzで動く現代のディスプレイでは、フレームを数えるとゲーム速度が壊れる。作り直しの過程で、フレームのカウンタをすべて時間基準の値に変換する。これはFlash移植で最もよくあるバグの元であり、後から直すより作り直しながら直すほうがはるかに安い。

## マウス前提の設計を、今度はタッチで

Flashゲームはホバー状態、クリックとドラッグ、正確な指示ができるマウスカーソル向けに作られていた。タッチスクリーンにホバーはなく、指先はカーソルよりずっと大きい。ホバーで出るツールチップにはタップの代替が要り、小さなボタンには広い当たり判定が要り、ドラッグは掴んでいる対象を指が覆うことを考慮する必要がある。キーボード操作のFlashゲームには、汎用のオーバーレイではなくそのゲーム向けに設計した画面上の操作レイアウトが要る。

## 作り直したゲームの行き先

作り直したFlashゲームは、Steamやitch.ioのダウンロード版としてデスクトップビルドで出す。GDScriptで作り直したゲームは、Summer Games上のWebビルドとしても出せ、ブラウザで遊んでもらえる。Flash時代の短いゲームは、有料のSteam版の前に試してもらえるitch.ioの無料ダウンロード版によく合う。スマートフォンに合う作品も多いが、iOSとAndroid向けのビルドには各プラットフォームのツールチェーンと署名、そしてタッチ入力への対応作業が必要だ。

## FAQ

### Flashゲームはなぜもう動かないのか

アドビは2020年12月31日にFlash Playerのサポートを終了し、2021年1月12日にFlashコンテンツの実行を遮断した。ブラウザはプラグインを完全に削除した。プラグインに依存してSWFとして配布されたゲームは、普通のプレイヤーの環境では動かない。

### SWFファイルを現代のゲームに変換できるか

保守できる編集可能なプロジェクトにはできない。逆コンパイラは一部のアセットとバイトコードを取り出せるが、結果は別のエンジンで動くプロジェクトにはならない。Flashの移植は作り直しで、できれば元のFLAファイルとActionScriptのソースから行う。

### FLAファイルを失っていてもFlashゲームを移植できるか

権利があるならできる。残っているもので作り直す。書き出したアート、スクリーンショット、プレイの録画、設計メモだ。ベクターの元素材があると作り直しははるかに安くなるが、必須ではない。

### ActionScriptのコードは移るか

ロジックは移るが、構文は移らない。ActionScript 3はGDScriptにかなり直接対応する。リスナーはシグナルに、enterFrameはprocessのコールバックに、MovieClipはアニメーションプレイヤーを持つノードになる。ActionScript 2はたいてい構造の作り直しが要る。

### Flash移植で最もよくあるバグは何か

フレーム基準のタイミングだ。Flashは24や30といった固定のステージフレームレートで動き、ゲームロジックはよくフレームを数えていた。60や144Hzのディスプレイではそのロジックが違う速度で走る。作り直しの過程でフレームのカウンタをすべてデルタタイムに変換する。

### 作り直したゲームは再びブラウザで動くか

できる。GDScriptで作り直したゲームはSummerでWebビルドを書き出せ、それをSummer Gamesで公開すれば、ブラウザで遊んでもらえる。原版そのものが何より大事なら、Ruffleのようなエミュレーターで保存目的で自分のSWFをブラウザ上で動かす方法がある。ただしActionScript 3への対応は、作品によってはまだ不完全だ。

[Flashゲームを作り直す](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