Alternative, die mir grad einfällt:
-currentPlayerNumber
-currentPlayerNumber_2
-currentPlayerNumber_4
-currentPlayerNumber_8
Die Alternative ist super, das spart ne Menge Platz!
Alternative, die mir grad einfällt:
-currentPlayerNumber
-currentPlayerNumber_2
-currentPlayerNumber_4
-currentPlayerNumber_8
Die Alternative ist super, das spart ne Menge Platz!
Es funzt ja tatsächlich mal was ![]()
Hab das Bacon-Layout umgesetzt und ich kann tatsächlich auf die Werte zugreifen und sie anzeigen.
Die einzige Kröte, die es zu schlucken gilt: ich muss für jeden Wert immer mit vielen ASLs den Offset für den aktuellen Wert des Spielers berechnen. Ob das wohl noch eleganter ginge?
So sieht es derzeit aus: bisher wird der Name und das Vermögen des aktuellen Spielers angezeigt. Eigentlich bin ich soweit auch ganz zufrieden, aber Luft nach oben ist ja immer.
smallTheft:
jsr CLEAR
mov #BLACK : EXTCOL // Schwarzer Overscan
mov #BLUE : BGCOL0 // Blauer Hintergrund
mov #YELLOW : TEXTCOL // Gelbe Schrift
// Spielernamen anzeigen
lda currentPlayerNumber // Aktueller Spieler
.for (var i = 0; i < 5; i++) { // Offset für Spielernamen *2^4 = *16
asl
}
tay
mov16 #playerNames : TextPtr
jsr Print_text_offset // Schreibe den Spielernamen
lda #','
jsr BSOUT
lda #PET_CR // Zeilenumbruch
jsr BSOUT
mov16 #strYouHaveMoney : TextPtr // Text: "Sie haben"
jsr Print_text
// Geld anzeigen
lda currentPlayerNumber // Aktueller Spieler
asl
asl
tay // Geld-Offset aus Akku nach Y
mov32 playerMoney,y : hex2dec_value
jsr Print_hex32_dec
lda #' '
jsr BSOUT
lda #'$'
jsr BSOUT
jsr Wait_for_key
jmp continueMain
Alles anzeigen
Ich bleibe erstmal beim "MacBacon Layout" - ich muss tatsächlich später berechnen, welcher Spieler wie gut im Vergleich mit den Mitspielern abschneidet.
Allerdings verstehe ich das Kopierproblem nicht.
jepp wuerde das auch wie Hoogo machen, immerhin weist du ja das du 128 bytes laden/speichern moechtest dann is das
hin und her kopieren ja eher einfach zu bewerkstelligen.
Mein Problem ist, dass ich sowas noch nie gemacht habe. Klar, einen 128 Byte Block kopieren sollte ich hinbekommen. Hab schon bei Codebase64 ein Beispiel gefunden.
Was mir aber unklar ist:
bisher habe ich bei den Spielernamen einfach 32 Bytes kopiert und dafür dank euch das hier gemacht
txa
5x asl
tay
jsr print_text_offset
Jetzt wollte ich eigentlich alle Werte einzeln kopieren und dafür eine Tabelle nutzen, weil die Attribute alle unterschiedlich lang sind.
Bloß wie ich das anstelle, und ob das überhaupt geht - das ist der Kern meiner Unwissenheit ![]()
Deshalb finde ich Lösung von Bitte melde dich an, um diesen Link zu sehen. eigentlich ganz einfach. Nur der Lerneffekt ist 'übersichtlich' ![]()
Stimmt eigentlich, das spart ja auch gleich mal den ganzen temp. Speicher ein. Ja cool, dann mache ich erstmal so weiter!
Besten dank!
oh, und natürlich: ![]()
Ich tue mich wirklich schwer, aus meinen Strickmustern auszubrechen.
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 ![]()