Die innere schleife zeichnet immer eine Pixel Zeile und da immer nur jeden 4. Pixel, wegen Mode X !!!
Wenn genug Pixel gesetzt wurden in der Zeile, das sind maximal 32/4 = 8, unterbricht die innere schleife.
Die mittlere wird jetzt 1x durchlaufen,
Hier wird die X Position zurück gesetzt und mit >> sa+=80;<< im Grafikspeicher eine Zeile dazu addiert (320/4=80 byte je Zeile >> Mode-X 4 Planes)
Wenn die letzte Zeile gesetzt ist, durchläuft die äussere Schleife 1x und setzt alles wieder zurück um in das nächste Plane die Pixel zu schreiben. 4 Planes , also durchläuft die äussere Schleife nur 4x insgesamt.
Plane wechsel sind Leistungsfresser, 4x ist hier das Minimum.
- DCco = sprite(map1, position) (wahrscheinlich intern mehrere Schritte?)
map1 ist die Textur Nummer im Array und position ist die Position des Pixels im Textur speicher innerhalb der Textur.
Die Funktion prüft welches Array für die Textur zuständig ist und gibt dann den angefragten Farbwert zurück.
Die Funktion hat das direkte auslesen des Arrays ersetzt, weil es jetzt 4 Arrays gibt.
Leider ändern sich die Texturen sonst würde ich zu Funktionsbeginn einfach mehrere Pointer auf die richtige Textur setzen.
MXs++; // WEGLASSEN? MXs wird nie gelesen, ist einem früheren Umbau zum opfer gefallen. Kann tatsächlich weg.
Das ganze hatte ich so oft umgebaut und auch mehrere Funktionen Parallel laufen um zu vergleichen, da übersieht man schnell mal was.
Ich schaue die Funktionen Regelmässig durch und versuche Abfall zu beseitigen.
Ich schreibe das dann nochmal um und dann schauen wir weiter.
die Funktionen zum einlesen von Dateien sind fast alle geändert und die NPC's Sprites sind auch schon aufgeteilt... es gibt jetzt dann 8 50Textur Arrays und 1 Aray in dem unterschiedlich grosse Texturen gespeichert sind für spezielle Effekte und Objekte.
Es ist jetzt 2 FPS schneller wie vor diesem Umbau.