Transport Tycoon Deluxe / Emscriptenパヌト2

Transport TycoonTransport Tycoon-かなり叀いが、特にマニア向けに、経枈RTSのゞャンルのゲヌムを配信しおいたす。 /.../



倚くのunixoidのオヌプン補品であるOpenTTDもありたす。そのため、コミュニケヌタヌやPDAにむンストヌルするこずで、トむレや地䞋鉄でもゲヌムから気を散らすこずはできたせん。 ラヌクモア



私は正盎に認めるこずができたす。TransportTycoon Deluxeをプレむするのに膚倧な時間を費やしたした。 はい、私はこのゲヌムのファンです。 そのため、mozillaの人たちがDoomをどのように移怍したかに぀いおの蚘事がハブに掲茉されたずき、このアむデアに興奮したした。ここでお気に入りのゲヌムの1぀をむンタヌネットに転送したす。 ちなみに、この蚘事はほずんどありたせんでしたが、䞻芁なこず-emscriptenを䜿甚しお移怍できるこずを知りたした。 そのようなプロゞェクトを実装する可胜性のアむデアがたさに始たっおから1幎も経っおいたせん私の最初の詊みは誀解の岩にcrash萜したした。 そしお今日、私はあなたのすべおを喜ばせるために急いでいたす私はそれをしたした これで、むンタヌネットに接続された任意の堎所からTTDでゲヌムの背埌にロバを座らせるこずができたす。



そしお、ここにビデオがありたす







せっかちな人は今すぐプレむを開始できたす。 䜕かがうたくいかない堎合は理解しおください。 このバヌゞョンはテスト䞭のみです。 ゲヌムは間違いなくFF13掚奚ブラりザヌおよびChromeiumで動䜜したす。 䜎速サヌバヌサヌバヌが負荷を凊理できるこずを願っおいたす。 そしお、はい、私はピンクのタむルに぀いお知っおいたす、私はそれに取り組んでいたす。



OpenTTD



JavaScriptバヌゞョンの゜ヌスコヌド提䟛者になったOpenTTDプロゞェクトに぀いお少しお話したいず思いたす。 䞀般的な芋積もりによれば、プロゞェクトには玄300,000行のC ++コヌドが含たれおいたす。 さらに、プロゞェクトの可胜性は途方もないです。 自分で刀断する



ほずんどのコヌドは創造的に曞かれおいたす。 このプロゞェクトの内郚を掘り䞋げるこずは非垞に興味深いこずでした。 残念ながら、私はそのような雑食の代金を支払わなければならず、この堎合私は巚倧なアセンブリシステムに出くわしたした。 移怍のニヌズに合わせおOpenTTDメむクファむルのパッチを自動化するperlスクリプトを䜜成する必芁がありたした。



OpenTTDの移怍は、次の構成で可胜でした。



残りはデフォルトです。



゚プシプテン



Emscriptenはコヌドの移怍を想起させ、私はこのブロックを消化できるように想起させたした。 前回の蚘事を䜜成しお、この難解な技術の仕組みを説明したす。







考え方は単玔ですC ++コヌドはclangを䜿甚しおLLVMバむトコヌドにコンパむルされたす。 バむトコヌドは、emscriptenを䜿甚しおJavaScriptでコンパむルされたす。 LLVMバむトコヌドは、䜎レベルの仮想マシンで実行できる䞭間コヌドです。 バむトコヌドLLVMの仕様は十分に文曞化されおおり、これがコヌドの䞭間衚珟ずしおプロゞェクト䜜成者によっお遞択された理由の1぀です。 emscriptenコンパむラは、次の図のように、バむトコヌド呜什を1察1のJavaScriptコヌドに倉換しようずしおいたす巊偎のバむトコヌド、右偎のJavaScript。







ほずんどの呜什では、この回路は完党に機胜したす。 ただし、このようなコンパむラの開発は簡単な䜜業ずは蚀えたせん。 LLVMバむトコヌドずJavaScriptは非垞に異なりたす。 より耇雑なものポむンタヌ挔算、ルヌプ、゚ラヌ凊理を実装するには、远加の䜜業が必芁です。 C ++ずJavaScriptの異なる動䜜の簡単な䟋を次に瀺したす。







C ++で陀算を行うず、数倀の小数郚分が砎棄されたす。 JavaScriptで同じ機胜を埗るには、Math.floorのようなトリックに頌らなければなりたせん䞊蚘のコヌドはすべおの堎合に正しくなく、ほずんどの堎合に圓おはたりたす。



より耇雑な䟋は、LLVMバむトコヌドずJavaScriptのルヌプ実装です。







JavaScriptで同様の機胜を実装する方法は倚数ありたすが、その倚くは生産性が䜎く、ここでemscriptenのタスクは最も生産的なコヌドを生成するこずです。



これらの䜎レベルのものに加えお、emscriptenはlibc、libcxx、POSIX、SDL、GL、GLES、およびその他のラむブラリの実装を提䟛したす。 完党に実装されたファむルサブシステムCfopen、fclose、fread、...。 ほずんどのプログラムは、emscriptenを䜿甚しお問題なくコンパむルできたす。 Emscriptenむデオロギヌの党䜓的な魅力は、゜ヌスコヌドを線集する必芁がないこずです-それはずにかく動䜜したす。 この堎合、プロゞェクトのJavaScriptぞの移怍が成功した堎合、バヌゞョンからバヌゞョンぞの移行は簡単か぀自然に実行されたす。 たずえば、私はemscriptenを芋おいたしたが、コミュニティはOpenTTDの次のマむナヌバヌゞョンをリリヌスするこずができたしたが、゜ヌスを同期し、最新バヌゞョンの䟿利な移怍版を埗たした。



Transport Tycoon Deluxe



JavaScriptのemscriptenを䜿甚しお、Doom、zlib、Poppler、OpenJPEG、FreeType、Bullet、SQLite、Python、Ruby、Luaなど、十分な数の深刻なプロゞェクトが既にコンパむルされおいたす。 珟圚、emscriptenディスカッショングルヌプで、Fortranのコンパむルに関する掻発な議論が行われおいたす。



ただし、耇雑なプロゞェクトを正垞にコンパむルするには、C ++の知識が必芁です。 たずえば、OpenTTDを初めお正垞にコンパむルしたずきに埗られた結果です。







このバヌゞョンでは、マりスもキヌボヌドも機胜したせんでした。 この画像のみがすべおです。



emscriptenの䜜成者は、倚数のラむブラリをサポヌトするず䞻匵しおいたすが、このサポヌトは完党には実装されおいたせん。 たずえば、emscriptenは、SDL 1.2が混圚したSDL 2.0の小さなサブセットのみを実装したす。 したがっお、私はemscriptenに必芁な機胜の欠劂に盎面し、それらを自分で実装しなければなりたせんでした。 しかし、私はプロゞェクトコミッタヌの䞀人になりたした ChSV !!! 。



䞊蚘のスクリヌンショットで捕捉された問題は、emscriptenでのSDL 1.2の実装が32ビットサヌフェスのみをサポヌトし、SDL_HWPALLETEフラグに぀いお䜕も知らなかったずいう事実が原因でした。 SDL_HWPALLETEモヌドの画像は、8ビット256色で゚ンコヌドされたす。 これは、この関連する画像圧瞮を䜿甚しおいたす。 なぜ氎平に反映されるのですかただわかりたせん。 さらに、次の関数を実装する必芁がありたしたSDL_VideoModeOK、SDL_VideoDriverName、SDL_QuitSubSystem、およびstrndump。 著者に報告された深刻なパフォヌマンスの問題を特定し、圌らはそれを修正したした。 残念ながら、サりンドサブシステムでの私の線集は、珟時点ではemscriptenコヌドベヌスには含たれおいたせん。



emscripten最適化フラグに関する倚くの問題が特定されおいたす。 ビデオに衚瀺されるピンク色のタむルは、最適化の問題にすぎたせん-フラグがなければ正しい色です。 この皮の問題に察凊するこずは非垞に困難です。 問題自䜓は正気ではなく2方向に45床の傟斜があるピンク色の氎タむル、最適化をオンにしお移怍するのに非垞に長い時間2時間以䞊を芁するため、倚くの堎合、テストしたせん。 しかし、プロゞェクトは非垞に迅速に開発されおおり、バグは1〜2日以内に閉じられたす少なくずも私の堎合。



通垞、emscriptenを䜿甚しお耇雑なプロゞェクトを移怍するこずは、本圓に必芁な堎合に可胜です。 いずれにせよ、emscriptenたたはプロゞェクト自䜓を少し線集する必芁に盎面する必芁がありたす。 しかし、䞀床完了すれば、問題なく移怍を䜕床も繰り返すこずができたす。



ずおも遅いですね。



プロゞェクトの著者であるアロン・ザカむは、゚クリプセンに関するレポヌトずのカンファレンスで講挔し、JavaScript自䜓は非垞に高速であり、ボトルネックはコンパむラであり、必ずしも最適なコヌド倉換ではないずいう意芋を衚明したした。 圌は次のプレヌトを匕甚した。







SpiderMonker SMは、Firefox JavaScript゚ンゞンです。 型付き配列TAは、珟圚emscriptenによっお提䟛されおいる最速のJavaScriptヒヌプ゚ミュレヌション方法です。 衚のセルの数倀は、JavaScriptでコンパむルされたコヌドの実行がネむティブコヌドよりも遅いこずが刀明した回数を瀺しおいたす。 ご芧のずおり、スプレッドは1〜8倍ですただし、平均は3〜5前埌です。



䞋の図の数字は、テストスむヌトhttp://shootout.alioth.debian.org/で特定の蚀語がC ++よりも遅い回数を瀺しおいたす。 泚この情報はすでにかなり叀く、JavaScriptが高速蚀語であるこずを瀺すこずを目的ずしおいたす。これに同意しない人は声をかけ、他の蚀語に觊れないでください。







䞀般に、これらの数字に同意し、OpenTTDのJavaScriptバヌゞョンはネむティブバヌゞョンよりも玄5〜7倍遅いず蚀いたす。 ただし、FireFoxブラりザのみです。 そしお、これは私が自分自身で発芋した最も玠晎らしい瞬間です。 nodejs + Chromiumで開発を䞻導したした。 私自身はFFのファンですが、残念なこずに、openTTD JavaScriptバヌゞョンは玄50メガバむトのサむズであり、FFはしっかりずハングしたしたが、クロムは非垞に高速に動䜜したした。 私は波のクロムを考えおいたしたが、突然、リリヌス版はクロムよりもFF2〜3倍でちら぀きのない速床で動䜜するこずがわかりたした。 したがっお、FireFoxを䜿甚しおプレむするこずをお勧めしたす。



私はこのプロゞェクトを取り䞊げお完成させたこずを非垞に嬉しく思いたす。 clang、llvm、python、javascriptに぀いお倚くのこずを孊びたした。 面癜い人ずおしゃべり。 コミュニティは私のプロゞェクトを本圓に気に入りたした。最近では、著者がemscriptenデモプロゞェクトペヌゞに寄皿したした。 行われた䜜業から倧きな満足を埗たした。 䞀般的に、私は皆に望むこず。



もう䞀床、参照 play-ttd.com

VKアプリケヌション



UPD。 新しいプロゞェクトサむト。



All Articles