Hallo Besucher, der Thread wurde 25k mal aufgerufen und enthält 185 Antworten

letzter Beitrag von tilobyte am

ELITE tech Diskussion

  • wie schauts aus

    Danke der Nachfrage. Der aktuelle Stand der Dinge ist etwas konfus. Nachdem ich mehrere Sachen ausprobiert hatte, bemerkte ich, daß ich nicht wirklich weiterkomme. Um das Spiel gut zu patchen und tiefer in das Programm eingreifen zu können, braucht man relokatiblen Code, so daß man beliebig Teile des Programms einfügen oder entfernen kann, ohne daß das Programm durch die dadurch entstandene Verschiebung im Speicher abstürzt. Diesen Zustand habe ich erst an diesem Wochenende erreicht. Der nächste Schritt wäre jetzt, den Code um unbenutzte Teile zu reinigen, einige Stellen auszubessern und zu versuchen, dadurch soviel neuen freien Speicher zu erhalten wie möglich. Erst der freie Speicher erlaubt diverse Veränderungen, die mit dem bisherigen Flickenteppichverfahren (Patch im wahrsten Sinne des Wortes) bislang nicht durchführbar sind. BIslang verwende ich hauptsächlich Bereiche hinter der Bitmap ($5f40..$5fff) oder unbenutzte Teile des Farbrams, was aber zu wenig ist. Welche der experimentellen Veränderungen nachher vielleicht mal in das Programm einfließen, kann ich jetzt noch nicht sagen. Daher mache ich dazu keine näheren Angaben. Geändert wird aber auf jeden Fall:

    - Voreinstellung des Speichermediums auf Diskette

    - Bug (Feature) bereinigt: Nach Laden eines Spielstands sprang das Programm in die Titelbildroutine nach dem JSR-Aufruf zum Einschalten der Titelmelodie. Der Label wurde umgesetzt.

    - Diverse kleine Code-Optimierungen. Es ist doch immer wieder erstaunlich, daß man auch Werke wie "Elite" aus der Distanz von vielen Jahren und unter Zuhilfenahme eines modernen Texteditors auf dem PC noch optimieren kann. Schaut man sich jedoch an, unter welchen Bedingungen damals der Code entstand, ist es kein Wunder.

    Was die aktuelle Probeversion anbelangt, so ist diese reichlich fehlerbehaftet und eignet sich daher eher nicht zum Austesten. Falls Du magst, kann ich sie Dir natürlich trotzdem zuschicken, aber lieber würde ich vorher noch etwas daran arbeiten.

    Nebenbei: Bei der Originalversion wird beim "Game Over"-Screen (alias "Schiff zerstört") der übliche gelbe Rahmen um die Anzeige komplett ausgeblendet. Ist das zwingend notwendig, oder könnte der Rahmen weiter bestehen bleiben? (Bei der Amiga/AtariST-Version wird die Zerstörungssequenz auch angezeigt, ohne daß die Cockpitgraphik weggeblendet wird.)

  • Könntest Du deinen fertigen und fehlerbereinigten Quellcode veröffentlichen? Ich bin sehr interessiert, auch mal einen Blick unter die Motorhaube zu werfen.

    Das ist nicht so einfach. Die Vorgehensweise sieht so aus: Ich erstelle eine Batchdatei für meinen Disassembler, die einerseits angibt, welche Teile des Originalprogramms disassembliert werden, andererseits auch die neuen Portionen enthält, die an Ort und Stelle statt des Originalcodes übernommen werden sollen. Der Disassembler erzeugt den Code für meinen Assembler, der um Befehle zum Umkopieren von Daten (z. B. für die Cockpitgraphik) erweitert wird. Das Ganze ist jetzt nicht wirklich gut lesbar, geschweige denn irgendwie kommentiert. Außerdem heißt "fehlerbereinigt" auch, daß ich am Ende vielleicht viele Kilobytes an Code austausche, insbesondere ausgerechnet die Kernelemente. Da wäre es vielleicht besser auf den von JeeK verlinkten Code zurückzugreifen. Daher meine Frage: Bist Du wirklich am ganzen Code interessiert oder nur an bestimmte Stellen?

  • Mich interessiert die Umsetzung der mathematischen Routinen.

    Die mathematischen Routinen sind eine Mischung aus klassischen Unrolled-Routinen für 8 Bit-Multiplikation und -Division, Schleifen für größere Berechnungen (24 * 8 ) und Verwendung von Logarithmentabellen in den Fällen, wo Genauigkeit keine große Rolle spielt (hauptsächlich bei der Grafikberechnung).

    Wenn Du magst, kannst Du Dir im verlinkten Code mal diese Stellen anschauen:

    $393e: Mutipliziere einen vorzeichenbehafteten 8 Bit Wert mit einem 5 Bit-Drehwert.

    $3b0d: Dividiere Wert durch die Konstante #$60, was dem Wert 1.0 der Matrix entspricht.

    $3b37: Dividiere zunächst 8 Bit mittels unrolled loop und anschließend den Mod-Rest mittels Logarithmentabelle.

    $3bc3: Dividiere 24 Bit-Wert durch 24 Bit Z-Wert des Objekts. Reduziere für eine schnellere Berechnung vorher die Werte auf 8 Bit.

    Weitere Routinen findest Du in der Datei "math.inc".

    Wichtig: Elite benutzt für negative Werte nicht die 2er-Komplement-Darstellung, sondern einen Absolutwert mit gesetztem Highbit. Der Wert -1 wird dargestellt als $01 + $80 = $81, und -127 entspricht $7f + $80 = $ff.

  • Wollte mal nachhören wies aussieht?

    Zur Zeit sieht es so aus, daß ich mich völlig verzettelt habe, was auch an den vielen Experimenten zur Menüführung liegt. Daher muß ich Dich noch für eine ganze Weile um Geduld bitten. Vor Weihnachten wird es sicherlich nichts mehr werden. :( Tut mir leid.

    Is ja kein Problem. Haupsache dieses großhartige Projekt, schläft nicht ein. Die bisherige Version, fand ich nämlich bis auf das fehlende Fadenkreuz, schon extrem geil !!!

  • Hallo MJ,

    darf ich noch um einen Nachschlag bei diesem wichtigen Projekt bitten? Es geht um einen fiesen Bug, der verhindert dass Joystick und keyboard gleichzeitig benutzt werden. Wenn man also z.B. mit dem Joystick nach oben zieht, und gleichzeitig die Geschwindigkeit drosseln oder erhoehen will mit Space oder /, dann geht das nicht, man muss erst den Knueppel loslassen.

    Damit wird der Nahkampf zum Nahkrampf. Mir ist das erst dadurch aufgefallen weil ich das Spiel fuer den Nintendo 3DS optimiere (ueber Vice 3DS). Frueher waere ich nie auf den Gedanken gekommen den Joystick zu benutzen.

    Es gibt auch eine Version die das Problem geloest hat, und meines Wissens ist es die einzige, Elite 128

    https://csdb.dk/release/?id=176103

    Diese ist optimiert fuer C128 im C64 Modus, laeuft aber auch auf einem normalen C64.

    http://www.gamebase64.com/olds…ofweek/elite/Elite128.txt


    Ich habe auch auf der easyflash wishlist gebeten dass jemand eine Vereinigung aller spielbaren Versionen, deutsch, englisch, 128, hacks, artwork, docs und optimierungen wie Deinen Ansatz baut.


    Elite ist irgendwie lang ueberfaellig mal richtig aufgeraeumt und optimiert zu werden.

  • M. J. gehe ich recht in der Annahme, das du nach der veröffentlichung von Elite 128 V2.0, kein Interesse mehr an der Optimierung der C64 Version hast? Wäre Schade, aber hier tut sich ja nun schon ewig nix mehr, daher meine Vermutung.

    EDIT: Elite 128 hat ja leider fehlende Laser, ist also im grunde unbrauchbar, selbst in der V2.0

  • gehe ich recht in der Annahme, das du nach der veröffentlichung von Elite 128 V2.0, kein Interesse mehr an der Optimierung der C64 Version hast?

    Jein. Einerseits ist "Elite 128" schon recht ausgefeilt mit sehr vielen Extras usw. Da noch einen weiteren "Elite"-Mod hinzuzufügen, ergibt nicht wirklich viel Sinn. Andererseits bin ich schon weiterhin am Thema "3d Grafik auf dem C64" interessiert. Von daher würde ich nicht ausschließen, daß ich irgendwann mal etwas dazu mache. Momentan sieht es jedoch so aus, daß die wenige freie Zeit, die mir noch bleibt, bereits in ein anderes Projekt fließt. Kleine, überschaubare Sachen kann ich wohl gelegentlich dazwischen schieben, aber alles, was darüber hinausgeht (und "Elite" ist schon etwas sehr Großes), muß ich notgedrungen vertagen. :(

    Elite 128 hat ja leider fehlende Laser, ist also im grunde unbrauchbar, selbst in der V2.0

    War mir auch noch nicht aufgefallen. Hierfür gäbe es hauptsächlich zwei Gründe:

    a) Bei der Routine wurde aus Versehen der Teil, der den Laser malt, deaktiviert oder herausgenommen.

    b) Die Routine zur Punktberechnung speichert ihre Punkte nicht im Eliteformat. Dadurch erkennt die Routine zum Lasermalen nicht, daß sie überhaupt malen darf. Die Vorgehensweise ist nämlich etwas krude (und nicht ohne Risiko). Zu Beginn werden die Koordinaten des Objektpunkts, von dem der Laser abgeschossen wird, auf einen nahezu unmöglichen Wert gesetzt. Wird dieser von der Punktberechnung überschrieben, "weiß" die Routine beim Lasermalen, daß dieser Punkt als 2d-Koordinate für den Bildschirm berechnet wurde, die Koordinatenwerte somit gültig sind, und kann den Laser malen. Läuft dieser Test aber aus irgendeinem Grunde schief, wird nie ein Laser gezeichnet.

    Die Handhabung des Lasers war auch der Punkt, an dem ich aufgehört hatte, den Code zu verändern. Ich hatte mehrere neue Verfahren ausgetestet, um die Bildschirmpunkte sauberer und schneller zu berechnen, doch setzen diese voraus, daß die Punkte in ihrer Reihenfolge umsortiert werden. Danach aber stimmt die Angabe des Laserabschuß-Punktes nicht mehr, weshalb ich die Experimente erst mal wieder begraben habe.

  • Ok, dann ist das Thema Elite Enhanced also vorerst vom Tisch. Schade das die Elite 128 V2 , das so total versemmelt hat. Alles läuft Flüssig und Flickerfrei und dann fehlt sowas simples wie die Laser und das ganze Spiel ist unspielbar. Naja und der neue Font ist auch Grauenhaft, denn kann man kaum lesen.

  • Ich habe die hoffnung darauf das eine der beiden überarbeiteten Elite Fassungen je fertig wird, aufgegeben. Elite128 V2.0 ist wegen Bugs unspielbar und die Version von M.J. die mir sogar besser gefallen hat, ist ja aktuell in einem sehr "unaufgeräumten" zustand und müsste erstmal bereinigt werden, wozu M.J. aber wohl nicht mehr so die Lust hat.

    Alles in Allem wiessen wir zumindest jetzt, das auch auf dem C64 eine Flackerfreie Version mit diversen Kompfort funktionen und verbesserungen, durchaus möglich ist.