数か月前、Giktaymsで、Android WearでリリースされたHalf-Lifeについてのニュースが流れました。 記事は開発者について一言も述べていなかったので、ハブロフスクの住民の一人がコメントの中で、なぜ誰もここに書かないのかと尋ねました。
そして今は、Linuxで無料のXash3Dエンジンの移植を開始した瞬間からの記念日です。また、友人の何人かがまだ詳細に興味を持っていたので、この投稿を書くことにしました。 プロジェクトの歴史、さまざまな問題の回避策、および私の個人的なアドバイスに興味のある方は、猫の下でお願いします。
プロジェクトの歴史から始めましょう。 エンジンは元々、ミシャおじさんまたはg-contというニックネームを持つプログラマーによって書かれました。 私たちが今持っているものを借りているのは彼にとってです。 2011年にのみ、彼はGPLv3のエンジンのソースコードを投稿しました。 しかし、彼には致命的な欠陥があり、ミシャおじさんはエンジンをWindows以外に移植したくありませんでした。 彼はAndroidの移植にある程度の金額を求めていましたが、もちろん、私たちのコミュニティのためにアイデアは失敗しました。
私は個人的に、ソースを開いてから1年後の2012年にエンジンの監視を開始しましたが、C ++プログラミングの経験がほとんどない2014年の秋にのみ、エンジンのソースコードをダウンロードしました。 Karmakの時代から、無料のゲームエンジンとクロスプラットフォームは密接に関連する概念であると考えて、Linuxに移植し始めました。
当初、ポートはwinelibを使用して計画されていましたが、時間の経過とともに、エンジンのアーキテクチャを掘り下げて、最も一般的なマルチメディアライブラリとしてSDL2に決めました。 そして、Valveはポートにそれを使用しました。
そしてすぐに、知らないアプリケーションをOSに転送したい人への私の最初のアドバイス:
1)プロジェクトファイルをすぐに作成し、プロジェクトに変更を加えずに、コンパイルします。
はい、私のアドバイスからすると、コンパイラは1000を超えるエラーと警告を生成するため、IDEがフリーズすることさえあります。 私のコンパイラは約4000のエラーを生成しました。
あるエラーから別のエラーに移ると、徐々にそれらを取り除きました。 残りのWindowsコードはありませんでした、-Wl、-移植時にun-undefinedは非常に役立ちます。
そしてそれが起こった-エンジンがロードされました。 独自のコンソールが表示されますが、ウィンドウの外では、昨年12月の初め頃でした。 私の前に、おおよそコンソール上で試行が行われ、それ以前ではないとしても終了したことを強調しなければなりません。 12月中、ランタイム、SDL入力、サウンドでライブラリをロードするのに時間がかかりました。ここに、Linux.org.ruでの作業のスクリーンショットを投稿しています。
12月のスクリーンショット
最初の公開スクリーンショット
何人かの人々が行われた仕事に興味を持っています。 私はソースを振り返り、これで作業することはもはや不可能であることを理解しています:多くの場所で、マクロが原因でコードが読めなくなったり、奇妙なバグが現れたり、ローカルホストの外でのアセンブリは非常に困難です。 エンジンのバージョンは非常に古いです。 スレッドへのコメントでは、新しいバージョンが他のフォーラムで配布されていることを示しています。 その結果、私はすべてをゼロから開始し、私の友人はすべてを真剣に見せるのを助けます-それはアセンブリをCMakeに転送し、大きすぎるコミットとくだらないコードのために悪臭のするぼろで私を追いかけます。 また、GitHubでは、古いポートにちなんで名前が付けられたSDLash3D組織が作成されます。 執筆時点では、すでに5人が参加していますが、アクティブなのは2人だけです。
突然、数2をこの時に自分で実現しました。
2)ターゲットプラットフォームに必要なコードを挿入するマクロのみを含むヘッダーファイルを作成します。
この記事を読みながら、自分のスタジオでコードを書く人へのアドバイスもあります。
3)不審で奇妙なコードを犠牲にして、Googleに連絡してください。 彼は、コードがVisual Studio専用にコンパイルされていることを教えてくれます。VisualStudioには多くの非標準の拡張機能があります。 そして、WinAPIとの連携を減らします。
一方、nicknekit / Unc0nnectedは古いポートのAndroidへの移植を静かに開始します。
Nikitaが親切に提供したスクリーンショットとビデオ
2月、ニキータと私は一緒に港で働き始めました。 古いポートを処理し、新しいポートを完成させて、Androidに関連する機能をそのポートに転送します。
この時点で、Android用の基本的なポート操作スキームがインストールされます。 これは次のようになります。
3月にw3bsit3-dns.comでスレッドを作成し、転送の成功、新しいビデオ、スクリーンショットについて報告します。 4月1日、バージョン0.1がリリースされますが、4月1日は冗談なしではありえないため、pakandroid.pakが見つからない場合にエンジンが閉じられる条件が特別に作成されます。侵略
それ以来、ポートの重要なイベントには次のものがありました。
- Beloko Gamesと連携して行われたタッチコントロールのサポート。
- 本当に成功をもたらしたバージョン0.14のリリース。 GitHubの統計によると、2日間で約2万人の訪問者。
- mittornによって行われた変更のためのAndroidバージョンインターフェイス。 MododelsはAndroidでも独自にゲームをリリースできます。
これを終了できます。GitHubとModDBでの個別のコミットとリンクの形でのボーナスが以下にあります。
ボーナス番号1。 Visual StudioとGCCの異なるコードの理解に関連するいくつかのコミット。 それらすべてを修正した後、スタジオでのCサポートはプログラミング分野で起こった最悪の事態であると確信しています。
- サウンドワードファイルが前方の配列の1つの要素に書き込まれたバグ 。 MSVCでは明示されず、GCCでは明示されます。
- GCCが配列の境界を越えると誓ったバグ 。 MSVCの下にも表示されません。
- スタジオはC ++を台無しにしています 。
- 別のバグ 。 そして、これはCにあり、まったく同じ名前は禁じられています。 スタジオで見積もり、コンパイルします!
- ゲームのファンが止まったバグの修正 。 ここで誰が責任を負うべきかはよくわかりませんが、私たちはこのバグを6か月間探していました。
ボーナス番号2。 また、ARM、Android、およびOpenGL ESに関連するいくつかのコミット:
- ARMによる1.0による奇妙な乗算と除算のバグ 。
- floatのその他の問題 。 SIGBUSでランダムクラッシュを引き起こしました。
- そして、ここにはリンクがありません。 突然、ARM上のすべての文字が符号なしであることを自分で発見しました。 そのため、NPCのナビゲーションが狂ってしまい、エンジンでスプライトが機能しませんでした。 -fsigned-charスイッチを挿入するか、この変数に対してcharに署名する必要があることを明示的に示すことができます。
- バグをレンダリングします。 ARMの問題ではなく、OpenGL ESの問題です。 まだ完全には修正されていません。
- Androidでのdlsym()の独自の実装。これはすべて、 AndroidではLollipopの前にライブラリの一部のシンボルが解決されないというバグがあったためです。
参考文献 :
GitHub上の組織 。
ModDBのページ 。
あなたの注意、 a1batrossに感謝します。