Anbei mal, woran ich in den Wintern der letzten Jahre so rumgetüftelt habe.
Das ganze ist noch in der Phase "make in run". Gesichert ist eigentlich nur, dass es mindestens 128kb-RAM brauchen wird. Über die Speicheraufteilung bin ich noch am Grübeln. Momentan halte ich die Tiles in der Speichererweiterung, und die einzelnen Abschnitte der Welt werden bei Bedarf von der Disk gestreamt (direkter Sektorenzugriff und fest einkodierte Adressierung). Da mir das auf Original-HW nicht sehr materialschonend erscheint bin ich am überlegen, ob ich nicht die 64k-Worldmap in die Speichererweiterung lege und die Tiles in den normalen RAM. Womit mir dort allerdings schon wieder 16k blockiert wären...
Die Erfahrungen aus dem Spieleumfragethread über die Dauer etc. kann ich bestätigen, da es ein ziemlicher K(r)ampf war, die Informationen zusammenzutragen und reichlich Vorarbeit erforderte. Konvertierung der Daten von PC-CGA-Format ins CPC-Grafikformat. RLE-Decomplessor etc.
Es ist eine ziemlich fieselige Umsetzung von veröffentlichten C64-Dissassemblys von
Ultima IV - Tech Info mittels einer z80/6502-Vergleichstabelle der Befehle. (Wobei ich nie gedacht hätte, dass der Line-of-Sight-Alghoritmus auf Anhieb funktioniert) sowie einer Reassemblierung der Atari-ST Version (mit TT-Digger und DesertDrain). Der 68000er-Code sieht nach einem ziemlich direktem Port der 8-Bit-Versionen aus, während Ultima 5 schon in einer Hochsprache geschrieben sein muss.
Allerdings trage ich mich hier noch mit der Überlegung, da mixed-Mode-Spiele (Basic mit RSX-Erweiterung für zeitkritische Dinge) wie Pirates nicht unüblich sind, den Code umzuschmeissen und die Bildschirmdarstellung durch RSX erledigen zu lassen und die Spiellogik ansonsten durch Basic zu erledigen.
Da fehlt mir allerdings noch die zündende Idee, wie die Grafik da am laufen zu halten wäre. Die Darstellung müsste ich ja irgendwie an eine Interruptroutine auslagern, damit die Grafik animiert bleibt und trotzdem Basic nutzen zu können. Hach... das ist alles nicht so einfach...
Von Sound und Musik ganz zu schweigen. An die Music der Atari-Version komme ich nicht ran, da ich den Player nicht wirklich verstehe. Ich wüsste auch nicht zu sagen, wieviel Performance der Arkos Player schlucken würde, wenn ich den einbauen würde und versuche irgendwie aus den im WWW vorhandenen Midi-Tracks Arkos-Module zu bauen. Sound und Music liegt somit erstmal auf Eis.
So, was macht der Code, abgesehen davon, ziemlich chaotisch auszusehen (ich muss bei Gelegenheit mal Aufräumen und fertige Teile in eigene Files tun). Ein Großteil der Programmroutinen, die Leben in die Welt bringt sind umgesetzt aber noch nicht scharfgeschaltet, da noch etliches an Subroutinen fehlt. So durchläuft das Programm momentan nur eine kleine Schleife.
Viel zu tun, ausser mit den Cursortasten auf der Oberwelt umherzulaufen und mit Q das Programm zu beenden gibts daher noch nicht. Aktualisiert werden eigentlich nur die Monde und Teile der Umwelt. Die Moongates werden auch schon dargestellt, haben aber noch einen Bug in der Adressermittlung weswegen sie beim Scrolling ihre Darstellungsposition verlassen. Traveling ist noch nicht möglich.
Letzte Codingschritte umfassten eigentlich nur den Einbau der Speicherverwaltungsroutinen um das Tileset aus den ersten 16KB der Speichererweiterung auszulesen.
Als nächsten Schritt wollte ich mal gucken, Routinen einzubauen um Städtefiles einzulesen und in ihnen Herumwandern zu können.
Auf der Disk habe ich daher auch Tools abgespeichert um die Speicherbuffer analysieren zu können ob die Daten auch richtig von der Disk eingelesen wurden.
TILEMAP.BAS stellt mir daher hier die vier 256-Bytes-Buffer dar für die vier 16x16-Maptiles der Oberwelt, MAP3232.BAS das gleiche bei Organisation in 32x32-Tiles für die Stadtkarten.
Mal gucken, wie sich das Projekt noch so entwickelt, da ja doch noch eine ganze Menge zu tun ist. Intro, Charaktergenerierung, Dungeons, Sound und Musik, Battlescreens, Story & Questverwaltung etc...
Hängt immer davon ab, wie ich Zeit, Lust und Laune finde...