Ich habe Spiele in BASIC gemacht, als ich ein Kind war, und ich war neugierig, wie die Grafiken in der 1988er Version von Dangerous Dave gemacht wurden, die in C ++ erstellt wurde. vor allem, weil sie damals keine lohnenden Grafikpakete hatten. Erinnern Sie sich, wie Dave, als er den Rand des Bildschirms erreichte, sich die gesamte Bildschirmgrafik in einer Schwenkbewegung nach links bewegte? Ich erinnere mich, dass ich gelesen habe, dass Romero dazu eine spezielle Technik verwendet hatte. Ich wollte so etwas wie Dave erschaffen und habe mich gefragt
- Welches Grafikpaket / welche Grafikmethode haben sie für Dave verwendet?
- und wie lässt sich die gesamte Bildschirmgrafik so bewegen, wie sie es tat?
Antworten:
Meine 1988er Version von Dangerous Dave war die Apple II-Version. Das Scrollen wurde durchgeführt, indem alle Bildschirmbytes verschoben wurden und dann eine neue Kachel am Rand des Bildschirms gezeichnet wurde. Wiederholen Sie dies 20 Mal, um den gesamten Bildschirm zu verschieben. Die Apple II-Version wurde alle in 6502 Assembler-Sprache geschrieben.
Auf dem PC, der Version von 1990, habe ich Grafikcode in der Assemblersprache 80x86 für alle Videomodi geschrieben: CGA, EGA, VGA. Der gefährliche Dave PC ist das einzige mir bekannte Spiel, in dem alle drei Videomodi enthalten sind und das jederzeit (F2) umgeschaltet werden kann, sogar mitten in einem Sprung!
Um schnell durch den Bildschirm zu scrollen, war alles in Assemblersprache und ich verwendete eine ähnliche Technik wie bei der Apple II-Version - schnell Bytes im Videospeicher verschieben und eine Kachel auf der rechten Seite zeichnen. In EGA war es schwieriger, da für die schnelle Ausführung im EGA-Modus der Latch-Modus für Speicherverschiebungen erforderlich war. Ich erinnere mich, Todd Replogle beigebracht zu haben, wie das geht, damit Duke Nukem 1 ein unterhaltsames Spiel wird (ein langsamer Duke Nukem wäre nicht cool gewesen).
Der Spielcode für Dangerous Dave PC wurde in C in der Borland C 3.0 IDE geschrieben. Das meiste Debugging wurde im Turbo Debugger auf einem 12-Zoll-Bernsteinmonitor durchgeführt, der an eine Hercules-Karte angeschlossen ist.
quelle
Ah, ich erinnere mich an diese Techniken aus meiner DOS-Zeit. Das Bewegen des Video-RAM mit dem Blitting zum Scrollen hätte zu ruckeligem Scrollen geführt. EGA hat die vertikalen und horizontalen Pixel-Panning-Register eingeführt, mit denen der Ursprung des Bildschirms festgelegt werden kann (woher die Grafikkarte im Videospeicher die Daten anzeigt). Da kein Speicherkopiervorgang stattfindet, erfolgt dies fast augenblicklich und kann für einen sehr ruckelfreien und schnellen Pixel-für-Pixel-Bildlauf auf EGA und VGA verwendet werden, wenn Sie direkten Zugriff auf die Hardwareregister haben. Die meisten Bildlaufprogramme unter DOS hätten dies verwendet, und dieser Teil des Codes wäre wahrscheinlich in Assemblersprache geschrieben worden, um direkt auf die Hardwareregister zuzugreifen. Diese Methoden sind jedoch nicht mehr gültig. Um jetzt einen ähnlichen Effekt zu erzielen, Ich denke, mit moderner Grafikhardware könnte man es wahrscheinlich schnell genug machen, indem man einfach den gesamten Bildschirm für jeden Frame neu zeichnet. Die andere Methode, die ich mir vorstellen kann, ist die Verwendung von OpenGL oder DirectX und das Rendern einer Textur auf das Vierfache der Bildschirmbreite und das Verschieben dieser. Irgendwie macht es nicht so viel Spaß, wie Hardware-Register zu manipulieren :)
quelle
Bearbeiten: Hier ist ein Link zu einem Artikel von Dr. Dobbs, der das seitliche Scrollen beschreibt. Dies kann die Methode sein, die für diesen Effekt verwendet wird.
http://www.drdobbs.com/184408045
Es ist schwer genau zu beurteilen, wie das gemacht wurde, aber man sollte bedenken, dass dieses Spiel für eine sehr spezielle Hardware-Spezifikation geschrieben wurde - DOS mit einer EGA-Grafikkarte (640x480 Pixel). Der Code führt wahrscheinlich einige ziemlich einfache Manipulationen des Videospeichers durch, damit das Scrollen reibungslos verläuft.
Auf dieser Website erfahren Sie, wie Sie DOS-Grafiken programmieren, um einen Eindruck davon zu bekommen, wie diese aussehen würden ...
http://www.phatcode.net/res/224/files/html/index.html
quelle
Metagun (Spiel entwickelt von Markus aka Notch aka MineCraft) hat das gleiche Scroll-Gefühl, das Sie suchen.
Das Spiel ist Open-Source und in Java geschrieben.
Ich hoffe, Sie werden vom Betrachten des Codes lernen.
quelle
Ich kann mir zwei Möglichkeiten vorstellen, wie dies getan wurde:
Ich würde wahrscheinlich mit 1) fortfahren, da grafisch nicht viel los ist. Möglicherweise gibt es einen selbst generierten Code, um Bilder an den Rändern auszublenden und zu beschneiden. Eine mögliche Technik, an der ein Kollege von mir damals arbeitete, waren selbstschreibende Sprites, dh die Sprite-Daten waren keine Daten, sondern Code. Dies bedeutete, dass es keine Transparenzprüfungen gab und die Daten, die vom Blit gelesen wurden, effektiv frei waren (dies war auf einem 386, wo jeder Befehl gelesen und dann decodiert wurde, so dass anstatt Code zu lesen-> Daten zu lesen-> Daten zu schreiben, nur Code zu lesen- > Daten schreiben). Es hat erstaunlich gut funktioniert - wir haben viele riesige Sprites auf mehreren Parallaxenebenen mit mehr als 25 fps erhalten.
Aber wir reden hier über Romero und es wird wahrscheinlich ein bisschen übertrieben über die Techniken.
quelle