Dangerous Daveで画面をどのように動かしたのですか?


14

私は子供の頃BASICでゲームを作りました。そして、C ++で作られた1988年版のDangerous Daveでグラフィックスがどのように行われたかについて興味がありました。特に、当時価値のあるグラフィックパッケージがなかったためです。Daveが画面の端に達したとき、画面全体のグラフィックがスイープの動きで左に移動するのにどのように使用されたか覚えていますか?ロメロがそれを行うために特別なテクニックを使ったと読んだことを覚えています。私はデイブのようなものを作りたいと思っていて、疑問に思っていました

  1. Daveに使用したグラフィックパッケージ/メソッド
  2. そして、画面全体のグラフィックを彼らのように動かす方法は?

1
子供の頃からの贈り物として思い出す1つのゲーム
ヴィシュヌ

Navが話しているスクロール効果を見るためのこのゲームの動作のビデオについては、dosgamesarchive.com / download / dangerous
Tim Holtを

回答:


18

私の1988年版のDangerous DaveはApple IIバージョンでした。スクロールは、すべての画面バイトを上に移動してから、画面の端に新しいタイルを描画することによって行われました-20回繰り返して、画面全体をシフトします。Apple IIバージョンはすべて6502アセンブリ言語で作成されました。

1990年版のPCで、当時のすべてのビデオモード(CGA、EGA、VGA)用に80x86アセンブリ言語でグラフィックコードを作成しました。Dangerous Dave PCは私が知っている唯一のゲームで、3つのビデオモードがすべてあり、ジャンプの途中でもいつでも(F2)切り替え可能です!

画面をすばやくスクロールするには、すべてアセンブリ言語で行い、Apple IIバージョンで使用したのと同様の手法を使用しました。ビデオメモリ内のバイトをすばやく移動し、右側にタイルを描画します。EGAでは、EGAモードで迅速に何かを行うには、メモリの移動にラッチモードを使用する必要があるため、より複雑でした。Todd Replogleにその方法を教えたのを覚えているので、Duke Nukem 1は楽しいゲームになります(遅いDuke Nukemはクールではなかったでしょう)。

Dangerous Dave PCのゲームコードは、CでBorland C 3.0 IDEで作成されました。ほとんどのデバッグは、Herculesカードに接続された12インチのplug色のモニターでTurbo Debuggerで行われました。


うわー!実際にアセンブリでそれらのビデオモードで作業した人から情報を得るのは良いことです!
ナビゲーション14

@Nav ehm ...あなたは実際にロメロ自身と話している:-)
ジャンルカゲッティーニ

@GianlucaGhettiniまあ、それはインターネットで利用可能なロメロの写真を持つユーザーです。John Romeroは、1つの質問に答えるためだけにアカウントを作成しますか?よくわかりません:-)とても奇妙なことですが、非常に長い時間をかけてDangerous Daveをプレイした1日後にあなたがコメントしたということです。
ナビゲーション

@Navここで彼のつぶやきによると:twitter.com/romero/status/679769135681826817彼が実際に彼はこの答えに述べています正確に何であるDukenニューケム、ためにスクロールスムーズEGAを行う方法トッド・レプローグルに語りました。彼のふりをしている誰かがそれについて知っているとは思わない.. :
ジャンルカ・ゲッティーニ

この記事では、user42604が実際にRomero gamasutra.com/blogs/DavidLightbown/20170223/289955/である
mastazi

13

ああ、私はDOS時代からこれらのテクニックを覚えています。スクロールを実行するためにブリットでビデオRAMを移動すると、ぎくしゃくしたスクロールになります。EGAは、画面の原点(ビデオメモリ内のビデオカードがデータの表示を開始した場所)を設定するために使用できる垂直および水平ピクセルパンレジスタを導入しました。メモリコピーが行われないため、これはほとんど瞬時に行われ、ハードウェアレジスタに直接アクセスできる場合は、EGAおよびVGAでの非常にスムーズで高速なピクセルスクロールに使用できます。DOSのほとんどのスクローラーはこれを使用し、コードのこの部分は、おそらくハードウェアレジスタに直接アクセスするためにアセンブリ言語で書かれているでしょう。ただし、これらのメソッドは実際にはもう有効ではありません。同様の効果を今すぐ達成するには、現代のグラフィックスハードウェアでは、フレームごとに画面全体を再描画するだけで十分に高速に実行できると思います。私が考えることができる他の方法は、OpenGLまたはDirectXを使用して、画面の幅の2倍のクワッドにテクスチャをレンダリングし、それを動かすことです。どういうわけか、ハードウェアレジスタの操作ほど面白くないように見えますが、


3
「ハードウェアレジスタの操作ほど面白くないように思われますが:)」-True :)
Nav

4

編集:横スクロールについて説明しているドブス博士の記事へのリンクです。これはこの効果に使用される方法かもしれません。

http://www.drdobbs.com/184408045


これがどのように行われたかを正確に判断することは困難ですが、このゲームは非常に特定のハードウェア仕様-EGAビデオカード(640x480ピクセル)を備えたDOS向けに書かれていると考えてください。このコードはおそらく、スクロールがスムーズに行われるように、ビデオメモリをかなり低レベルで操作しています。

DOSグラフィックスのプログラミングについて説明しているWebサイトは、次のようになります。

http://www.phatcode.net/res/224/files/html/index.html


このゲームでは320x240のビデオモードを使用します。
スキズ

Skizz私もそれを考えていましたが、640x400-EGA解像度のゲームのスクリーンショットをいくつか見つけました。ゲームにはさまざまなバージョンがありましたが、初期のものは320x200だったと思います。
ティム・ホルト

4

Metagun(Markus aka Notch aka MineCraft guyによって開発されたゲーム)は、あなたが探しているのと同じスクロール感を持っています。

ゲームはオープンソースであり、Javaで記述されています。

コードを見ることで学ぶことを願っています。


1
そして、彼がゲームを作っているタイムラプスを見たい場合:youtube.com/watch
はると

1
-1は同じように見えますが、明らかに同じメソッドをまったく使用していません。

2
これは1988年にジョン・ロメロが使用した正確な方法ではないことは承知しています。しかし、@ Navは似たようなものを作成したかったので、Apple IIコンピューターでApplesoft BASICを使用してプログラムするように彼を除いてはいませんでした。私がリンクしたコードは、明らかにあなたが指摘したのと同じ仕事をします。
はすると

ジョーに感謝しますが、Eibxは私が別の方法を探していたのは正しいです。
ナビゲーション

2

これが行われた2つの方法を考えることができます。

  1. ブルートフォース:シーンを描くだけ
  2. Mode-Xおよびパンニングレジスタ。ビューにスクロールするビットを描画し、パンレジスタを調整してシーンをスクロールします。各フレームの上部の表示領域を再描画する必要がありますが、メインの再生領域を描画するよりも作業が少なくなります。ハードウェアに特定のスキャンラインでビデオDACがアドレス0から読み取るレジスタがあるため、下部領域を再描画する必要はありません(したがって、下部領域はビデオRAMと上部のアドレス0になります)下部領域の後に開始します)*

私はおそらく1)に行きたいと思います。グラフィカルにあまり進行していないので、エッジで画像をブリットしてクリップする自己生成コードがあるかもしれません。私の同僚が当時取り組んでいた可能性のあるテクニックの1つは、自己記述スプライトでした。つまり、スプライトデータはデータではなく、コードでした。これは、透過性チェックがなく、ブリットのデータ読み取りが事実上無料であることを意味します(これは386で各命令が読み取られ、デコードされたため、コードを読み取る代わりにデータを読み取る->データを書き込むだけでコードを読み取りました- >データの書き込み)。それは驚くほどうまく機能しました-25fps +で動作する複数の視差レイヤー上にたくさんの巨大なスプライトがありました。

しかし、私たちはここでロメロについて話しているので、おそらくテクニックについては少し誇張されています。

  • 実際に最初の主要なDOSゲームでこれを行いましたが、一部のハードウェアにバグがあり、アドレスリセットがあまりにも早くスキャンラインに発生したため、2つのセクションの間にハーフハイトピクセルがあります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.