急上昇。 アイデアからリリースまで

みなさんこんにちは! Delphiでのゲームの開発のストーリーをアイデアからリリースまで伝えたいと思います。

この記事は、実装の詳細を掘り下げることなく、本質的にストーリーに近いものです。 正直なところ、GUIで行ったように、ゲームでどのように画像を作成するか、またはローカライズする方法について実際に書きたいと思いますが、より技術的な別の記事でコードを強調します。 そうでなければ、これは大きすぎます。 コードはここにはありませんが、詳細は未定です。 お願いします!







Application.Initialize;



だから。 私たちのゲームは、かなり前にゲーム開発コンテスト(ジャム) IGDC No. 77-ジャンパーのために発明されたもので、2012年の始まりでした。 私たちは2週間もの間、永続的なクランチ状態でゲームを作りました。 コードはひどいものでした。 拡大することは不可能で、時には不可解な不具合が発生しましたが、一般的にゲームは機能し、一部の仲間は何日も何週間も費やしました。 数人の人が1か月間立ち往生しました。 彼女のリプレイ値が良好であり、それを完了する必要があることが明らかになりました。 しかし、上で言ったように、締め切りがくしゃくしゃになっているためコードはひどいものだったので、完了はそれほど多くなく、すべてが安全に忘れられていました。



そのときは次のように見えました。







比較のために、次のようになりました。







本当ながら



2014年までほとんど忘れられていました。 それから私たちは集まって、すべてを再び始めました。 アーキテクチャへの資本アプローチ。 ゲームモードマネージャー、動的ローカリゼーションシステム、アクセス許可、実績などのサポートなどが用意されました。すべてがクラス内にあり、すべてが継承され、ブロックされます。 クラスにはなく、グローバルに、そして静的クラスにあるもの。 一般的に、非常に責任を持って問題に取り組みました。 確かに、彼らは約1年間ゲームを忘れていました。 古いプロトタイプに似たものがリモートにありましたが、コンテンツにも興味にも到達しませんでした。 積極的に、長い間、要するに先延ばしにしました。 ここでメニューが収集されたので、惑星を作成し、Habréで惑星に関する記事を作成しました









しかし、そのような先延ばしの利点はありました。 後で、これらすべてが基礎に実装されたため、多くの問題を回避するのに役立ちました。 たとえば、ローカライズは、リリースの直前にXMLファイルによって解決されました。イタリアのフランチェスコが私たちにノックしてゲームの転送を申し出ました。 私は自分ですべてを行い、必要な文字をフォントで描いて、ゲームは1週間でイタリア語を習得しました。 簡単でシンプル。 このことから、少なくとも1つの結論を下す価値があります。ローカライズを忘れずに、早めに行ってください。 そして、できればゲームプレイを損なうものではありません。







coolthingsの機能について



ゲームの作成を開始したとき、さまざまなゲームで最高の瞬間を見ましたが、ほとんどの場合、ブリザードを振り返りました。 そうそう、これは非常にクールなオフィスです。彼らはクールなゲームとすべてのヒットを作ります。 そして、それぞれが最小の詳細になりました。 そして、それは私たちに夢中になりました。 したがって、私は、ディアブロと私の同僚のファンとして、WarCraftとStarCraftのファンとして、彼らを頻繁に見ました。 そのため、たとえば、実績や友人は、オーバーレイや出口なしでゲームから直接表示できるようにすることが決定されました。 そのため、Alt +タブで音楽をフェードアウトしたり、メニューから任意のトラックを聴いたり、いつでもゲームパッドを接続して再起動せずにプレイしたり、ゲームで直接実績を表示したりするなど、コーナーに時計などの些細なことがありました。







私たちはほとんどいつも一緒にゲームを作りました。 2人のプログラマ。 彼はグラフィックを自分で描いたか、 FilterForgeを使用してスプライトを生成しました。開発の最後に、敵のグラフィックを注文し、 アセットのアイコンを購入しました。 注文して音楽を作り、1年前に音楽が登場しました。 音楽は私たちに書かれただけでなく、教授にも伝わりました。 スタジオの機器。 トラックは素晴らしいものになり、ゲームの雰囲気がとても良くなりました。



音楽の小さな断片






リリースのケースビルド



コード。 現時点ではDelphi 10.1でコードを記述しており、エンジンはQuad-engineを使用しています。これもオープンソースのデルファイで記述されています。 ところで、ゲームの開発は、エンジンを非常に便利で便利なものにするのに非常に役立ちます。 私たちは長い間Delphiで作業しており、このツールは私たちにとって便利ですが、ここでもいくつかの側面がありました。 GUIモジュールの1つでは、リリースおよびデバッグ用のビルドの動作が異なりました。 何らかの理由でリリースバージョンの「最適化」項目がFalseの場合にTrue変数の1つになっていることが突然判明しました。 そして、GUIは不適切に動作し始めています。 アセンブラコードは異なり、結果も異なります。 ソリューションは最良のものではありませんでしたが、デバッグと同じ結果で「最適化」項目を無効にしました。



開発中に、ほぼ1年間ほとんどすべてのゲームプレイ開発を放棄し、すべてをやり直さなければならなかったという事実に直面しました。 Box2Dを拒否しなければならなかったので、問題の解決が非常に複雑になりました。 問題の1つは、Box2Dがワールド座標のすべてをカウントすることであり、非常に高速でベクトルを使用できることです。 精度の低下に問題がありました。 たとえば、ボスの銃がボスに遅れをとる可能性があります。 彼の計算は、どんなに一生懸命試みたとしても反復的でした(たぶん不十分だったかもしれません)が、物理学と写真を完全に同期させることはできませんでした。 そのため、プロトタイプから物理学を取得して使用しましたが、もちろん改善されました。 たとえば、わが国のすべての物理計算は画面座標で行われます。これにより、膨大な速度と値の問題が解決されます。 プロトタイプの物理学は、水平線と円でのみ機能しました。 ここで、物理学は他の図にも教えられました。 接続、レイヤー、オブジェクトの種類など。



優れたパーティクルシステムも作成しましたが、役に立ちませんでした。 マウスで何でもできるWarcraft3スタイルの最もクールなエディターは役に立ちませんでした。 例えば、その複雑さと複雑さの範囲で、それを成果と結びつけることは、生きた地獄であることが判明しました。 合計で約1年の私の同僚ZblCoderの開発は捨てられました 。 そして、彼は再びすべてのゲームプレイを書き始めました。 しかし、驚くべきことに、1か月も経たないうちにすべてを補い、その後成長を続けました。



その結果、最終的には、3年間の開発のどこかで(かなり長い休憩があったため、1.5-2年の無料の夜が実際に費やされました)、不必要なことをしなければ、ゲームを2倍速くすることができます。 しかし、レーキなしで行うことは不可能であるため、多くの時間がかかりました。 当時のグラフィックエンジンの基礎は、もはや基礎ではありませんでした。 ジューシーでダイナミックな画像を実現するために、膨大な数のシェーダーエフェクトとbezaderjnyhトリックを実装しました。 ところで、私たちが持っているゲームは完全に二次元です。







Game.Draw;



通常のマッピング、ボリュームライティング、空間の歪み、視差マッピング、および小さくても重要度の低いシェーダーの束。 ほとんどすべてがシェーダーによって行われます。 カラーグレーディングから輸血シールドまで。 多くの効果に気付かないか、事前に描かれていると思うかもしれませんが、ありません。 それらはその場で作られます。



たとえば、ここに、カラーグレーディングなしのスクリーンショットがあります。







関数IsThereTroubles:ブール値。 アブストラクト ;



後でプレイした人の多くは、スクリーンショットとビデオは非常に単純ではありますが、プロセスの気分と魅力を決して伝えない、と主張しました。 そして、この問題を解決できませんでした。 見た目よりも面白いことを示す方法は?



主な問題は依然としてバランスです。 ゲームによっては非常にシンプルなものもあれば、想像を絶するほど難しいものもあります。 ほとんどの場合、人々は動くものすべてを無差別に撃ち始め、プロンプトを無視して直感的に行動しようとしますが、それは間違っています。 しばらくして、気づきが始まり、人は遊び方を理解し始め、楽しみを持ち、ストレスを和らげます。



プレイヤーが自分自身に失望せず、すぐに離れないように、ゲームへの関心を温めるために、物事がうまくいかない場合、ゲームに競争力のある要素を追加しました。 特定の種類の統計が保存され、友人はその結果をあなたと、あなたと友人と比較できます。 さらに、各レベルアップでの新しいスキルの経験と発見は、ゲームに少し長く座ることにも役立ちます。







ターゲットプラットフォーム(Win32)



早期アクセスでゲームを開始した後、開発中に想像することさえできなかった問題に遭遇しました。 ゲームをストリーミングする最初のストリーマーは、PCの構成がかなり特殊であるため、これを行うことができませんでした。 彼は解像度の異なる2台のモニターを持ち、それらは異なるビデオカードに接続されていました。 ディスクリートnVidiaおよび統合Intel。 私たちのエンジンはこのような混乱を克服できず、最初はクラッシュしました。 もちろん、問題は勝ちましたが、時間が失われました。



別の興味深い問題は、友人に関する情報を取得しようとしたときにSteamworks APIがクラッシュすることでした。 40〜50人の友人がいるアカウントではすべて「OK」でしたが、500人以上の友人がいるストリーマーやレッツプレーヤーの場合、説明できない理由でリストの中央に落ちました。 そのため、さらにいくつかのストリーマーを見逃していましたが、すぐに修正できました。 同じ日にホットフィックスが作成されました。







ゲームのさらなる運命は、洗練、拡大です。 フィードバックに耳を傾け、すべてをさらに改善するために行動を起こすことは大きな喜びです。 Delphiを再びすばらしいものにしましょう!



最後に小さなアンケートを追加しました。正直な回答に感謝します。



All Articles