Huhu,
ich hab schon wieder was, wobei ich gar nicht weiß, ob das überhaupt geht.
Ich habe einen Speicherbereich, wo ich für alle Mitspieler die Attribute ablege. Aktuell dachte ich an 128 Byte pro Spieler, wobei ich aktuell 76 Byte auch wirklich benutze.
Das Spiel ist rundenbasiert und ich wollte für jede Runde die Werte aus obigen Speicherbereich in einen temp. Bereich kopieren. Also ungefähr sowas:
curentPlayerMoney:
.dword $0000,$0000 // Vermögen 4 Byte
currentPlayerDebtFlag:
.byte 00 // Schulden in bit 7 1 Byte
currentPlayerEstate: // Anteile der Gegend 1 Byte
.byte 00
// Besitz 14 Byte
currentPlayerSlotmachine:
.word $0000
etc...
Und dann habe ich noch player1 mit 128 byte Platzhalter, player2, player3 usw.
Jetzt dachte ich mir das so: Ich lade pro Runde die Spielernummer ins X-Register und dann rufe ich eine Kopierroutine auf, die dann alles in den temp Bereich kopiert. Am Ende der Runde wird dann alles zurückgeschrieben.
Aber... geht das auch?
Ich dachte irgendwie an Tabellen, ungefähr so:
// Adressen der Spielerarrays zum Durchzählen in der Schleife
playerAddressTbl:
.word player1, player2, player3, player4, player5, player6, player7, player8
// Attribut-Offsets der einzelnen Werte
playerAttrTbl:
.byte 4,1,1,14,10,10,1,1,1,1,32
Und jetzt kommt der Part, wo ich dann gar nicht mehr durchsteige
Der Algoritmus wäre:
Lade den Größe des Speicherbereichs aus playerAttrTbl ins Y-Register: ldy playerAttrTbl, X
Schleife über Y
- Hole die Adresse von PlayerX
- lade das Byte + Y in den Akku
- speichere das Byte an die Zieladresse
Könnte man das so machen? Und wenn ja, kann ich die Bytes 1:1 kopieren oder muss ich die LittleEndian-mäßig vertauschen. Geht das mit den Tabellen überhaupt oder muss ich die ZP benutzen?
Es wäre schön, wenn jemand Licht in mein ewiges Dunkel bringen könnte