Nun, mit zunehmender Komplexität wirds zunehmend mehr Arbeit, da mehr zu bedenken ist, grade beim Viewer/Editor. Es nervt mich zunehmend an, dass ich nicht ausgetüftelt bekomme, wie das mit indizierten Farben funktioniert. Man kann nun den Pens in den Räumen andere Inks zuweisen, aber es ist unglaublich träge, da die einzelnen Tiles komplett neu gepixelt werden müssen, nur weil sich eine Ink geändert hat. Sprich die Mode 0-Pixel von den 256 Tiles werden ausgelesen in Pens zurück-kodiert und in neue 4x8 Pixel-Grafiken gepixelt und auf 16x32 gezoomt (Zumindest dafür gibts ne eingebaute Funktion). Dann wird die Tiletabelle neu aufgebaut und danach die Raumkarte... Zwischen Farbwahl und Darstellung des Krams mit geänderten Farben liegen mehrere Sekunden... (Ist schon Interessant, dass man einen Gigaherz-Prozessor mit sowas profranem in die Knie zwingen kann).
Dem Spaß an der Sache tut das aber keinen Abbruch, da es mit dem Assemblercode dafür nun um so besser vorangeht, da man nun besser experimentieren kann und das debuggen mit Symboltabelle viel einfacher ist. Ist fast wie das englisch lernen mit Textadventures und Langenscheidt anno dunnemal, nur diesemal mit Rodey Zaks z80-Buch und dem Schneider Systemhandbuch...
Die Bedeutung der Felder der Verwaltungsstruktur der Räume ist nun vollständig bekannt, neben zwei Spawnzonen für die gegnerischen Sprites wird über 3x3 Einträge definiert, wie die Räume miteinander verkettet werden. Sprich, welcher der 9 möglichen Ausgänge zu welchem Raum führt und an welcher Stelle dort der Spawnpunkt liegt, sowie zwei Bytes für Hilfswerte um die Listenposition des Eintrags korrekt errechnen zu können.
Die Bedeutung der einzelnen Pens für die Kollisionserkennung/verwaltung ist nun auch vollständig bekannt; damit steht dann auch fest, welche Einschränkungen man beim erstellen neuer Grafiken berücksichtigen muss.
Um schon mal das Pseudo-Amstrad-Bruce Lee 2 auf Windows zu bewerten: Die Multi-Color-Sprites der neuen Gegner sind auf dem CPC nicht möglich da nur drei Farben zur Verfügung stehen.
Die Zugschalter für die Hebebrücke ist unnötige Mechanik und kann über Lampensammeln realisiert werden. Die Hebebrücke scheint auf den ersten Blick problemlos möglich. Die Schwebeplattform scheint auch möglich, sieht nach der Feuerballmechanik aus, nur wird statt nem Feuerball ein begehbares Tiles bewegt.
28 Räume... könnte funktionieren. die jetzigen zwanzig nehmen &2000 Bytes in Anspruch. Das Programm beginnt bei &1500 und endet bei &9200. Mit verlegen auf &500 müsste sich das ausgehen...
Das Schwimmen wird so eine Sache. Sieht nach der Klettermechanik, nur mit anderen Sprites, aus - leider wäre dafür kein Pen frei. Eventuell könnte man einen aus der vier-farben-Animation der "Aufzüge" klauen, wenn es gelingt, die Auf-Abwärtsbewegung der Sprites mit einem drei-Farben-Cycle zu synchronisieren, damits nicht beschissen aussieht. Für die "Aufzüge" werden Pens 4,6,12 und 14 verwendet und die "kletterfähigkeit" der Tiles mit Mode-0-Pen-Bitmasken-Magie eingegrenzt. Pen 10 gehört mit seiner Bitmaske in diesen Kreis und wird für das statische Klettergerüst verwendet.
chcl_leftpixel XREF[1]: ram:6f16(j)
ram:6efa 7e LD A,(HL)
ram:6efb e6aa AND 10101010b ; l. Pixel BM Pen 15: BruceYellow
ram:6efd fe0a CP 00001010b ; l. Pixel BM Pen 10: Climbable
ram:6eff 3806 JR C,chcl_rightpixel ; filters Bitmasks for PEN 2 and 8 out
ram:6f01 281a JR Z,chcl_isclimbable ; PEN = 10 -> Climbable, lets pass Bitmasks for PENs 4,6,12,14
ram:6f03 fe2b CP 00101011b ; and filters them out
ram:6f05 381b JR C,chcl_iselevator
chcl_rightpixel XREF[1]: ram:6eff(j)
ram:6f07 23 INC HL
ram:6f08 7e LD A,(HL)
ram:6f09 e655 AND 01010101b
ram:6f0b fe05 CP 00000101b
ram:6f0d 3806 JR C,chcl_getnext
ram:6f0f 280c JR Z,chcl_isclimbable
ram:6f11 fe16 CP 00010110b
ram:6f13 380d JR C,chcl_iselevator
chcl_getnext XREF[1]: ram:6f0d(j)
ram:6f15 19 ADD HL,DE
ram:6f16 10e2 DJNZ chcl_leftpixel
ram:6f18 dd360d00 LD (IX+0xd),0x0
ram:6f1c c9 RET
chcl_isclimbable XREF[2]: ram:6f01(j), ram:6f0f(j)
ram:6f1d dd360d01 LD (IX+0xd),0x1
ram:6f21 c9 RET
chcl_iselevator XREF[2]: ram:6f05(j), ram:6f13(j)
ram:6f22 dd360d02 LD (IX+0xd),0x2
ram:6f26 c9 RET