Return to Phobos
Moderator: Rockford
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Return to Phobos
Wo stehe ich gerade?
Die Steuerung des Raumschiffs ist fertig und ich habe am Wochenende den ersten Missile als "Schuss" fertig gestellt.
Jetzt kommt Schuss 2 - also wie bei Phobos soll das Raumschiff abwechselnd links und rechts schiessen können. Das werde ich nächste Woche implementieren und dann den Code hier hochladen.
Das ist gar nicht so unkompliziert zu programmieren und ich habe beschlossen, daß ich auf die erweiterten Möglichkeiten vom MADS Crossassembler zurückgreife und if - Bedingungen in den Code mit einbeziehe. Das macht den Code lesbarer und auch einfacher für mich zu programmieren...
Die Compabilität zu den alten Assemblern nimmt natürlich ab... ich hoffe ihr könnt auch zukünftig den Code nachvollziehen!
Wer aktuell in Assembler programmieren will sollte tatsächlich auf die Umgebung Eclipse mit WUDSN und MADS-Assembler zurückgreifen!
LG
Peter
Die Steuerung des Raumschiffs ist fertig und ich habe am Wochenende den ersten Missile als "Schuss" fertig gestellt.
Jetzt kommt Schuss 2 - also wie bei Phobos soll das Raumschiff abwechselnd links und rechts schiessen können. Das werde ich nächste Woche implementieren und dann den Code hier hochladen.
Das ist gar nicht so unkompliziert zu programmieren und ich habe beschlossen, daß ich auf die erweiterten Möglichkeiten vom MADS Crossassembler zurückgreife und if - Bedingungen in den Code mit einbeziehe. Das macht den Code lesbarer und auch einfacher für mich zu programmieren...
Die Compabilität zu den alten Assemblern nimmt natürlich ab... ich hoffe ihr könnt auch zukünftig den Code nachvollziehen!
Wer aktuell in Assembler programmieren will sollte tatsächlich auf die Umgebung Eclipse mit WUDSN und MADS-Assembler zurückgreifen!
LG
Peter
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Player und Schüsse funktionieren jetzt
Sooooo .... ich habe heute die Schüsse des Raumschiffes drin!
Dabei habe ich mir ganz schön die Programmierfinger verbogen, denn zwei Missiles so zu programmieren, das sie abwechselnd aus dem rechten bzw. linken "Schussrohr" des Raumschiffes loslaufen und je nach Schusslänge auch durchaus gleichzeitig zu sehen sind ... also zur richtigen Zeit jeweils sperren und freigeben etc. war ganz schön tricky... aber es läuft jetzt. Der Code dafür sieht recht umständlich aus und ich habe mehrere Hilfsvariablen benutzen müssen - es läuft auch noch nicht komplett fehlerfrei - je nach Höhe des Raumschiffes mehr oder weniger gut! Hier muss ich noch ein wenig den Code verfeinern...
Hier der Code für den Header:
Und hier der Programmcode:
zu zu implementierende Landschaft (lands.asm) und Die Charaktertabelle (character.asm) sind noch unverändert!
Wenn erwünscht (für die, die nicht mit Eclipse arbeiten) kann ich auch eine kurze mov -Datei hochstellen ....
Gruß
Peter
Dabei habe ich mir ganz schön die Programmierfinger verbogen, denn zwei Missiles so zu programmieren, das sie abwechselnd aus dem rechten bzw. linken "Schussrohr" des Raumschiffes loslaufen und je nach Schusslänge auch durchaus gleichzeitig zu sehen sind ... also zur richtigen Zeit jeweils sperren und freigeben etc. war ganz schön tricky... aber es läuft jetzt. Der Code dafür sieht recht umständlich aus und ich habe mehrere Hilfsvariablen benutzen müssen - es läuft auch noch nicht komplett fehlerfrei - je nach Höhe des Raumschiffes mehr oder weniger gut! Hier muss ich noch ein wenig den Code verfeinern...
Hier der Code für den Header:
Code: Alles auswählen
var1 = $a0
var2 = $a2
var3 = $a4
var4 = $a6
var5 = $a8
var6 = $b2
var7 = $b4
lms1 = $b6
lms2 = $b8
lmslo = $a0
lmshi = $a2
delay = $b0
play1 = $92
play2 = $94
play3 = $96
play4 = $98
miss1 = $c0
miss2 = $c2
miss3 = $c4
miss4 = $c6
rechts = $c8
links = $c9
xposp1 = $ca
yposp1 = $cb
joyst1 = $cc
kollp0 = $cd
xposm1 = $ce
yposm1 = $cf
xposm2 = $d0
yposm2 = $d1
kollm1 = $d2
kollm2 = $d3
feuer1 = $d4
feuer2 = $d5
yposm1hilf = $d6
feuer3 = $d7
feuer4 = $d8
yposm2hilf = $d9
feuer5 = $da
Code: Alles auswählen
org $2000
icl '../hardware.txt'
icl '../header.txt'
icl 'character.asm'
icl 'lands.asm'
dlist .byte 112,112,112,100
.byte 30,75
.byte 36,36,36,36,36,36,36,36,36,36,36,36
.byte 36,36,36,36,36,36,36,36,36,4,112
.byte 65,32,156
pm1 .byte 0,24,60,36,36,126,126,255,219,219,129,129,129,0
mi1 .byte 15,15,15,15
mi2 .byte 12,12,12,12
mi3 .byte 12,12,12,12
mi4 .byte 12,12,12,12
.proc main
main1 jsr displaylist ;Subroutine Displaylist-Aufbau
mva #33 yposp1
mva #120 xposp1
mva #42 yposm1
mva #0 xposm1
mva #94 yposm2
mva #100 xposm2
Start1 mva #>chr chbas ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #0 color4 ;Hintergrundfarbe / Helligkeit festlegen
lda #0 \ tax \ sta var3 \ sta var4 \ sta var6 \ sta var7 \ sta var6+1
mva <lands var6
mva >lands var6+1
mva #0 kollp0
; Player vorbereiten und initialisieren
lda ramtop
sec
sbc #16
sta pmbase
clc
adc #3
sta miss1+1
adc #1
sta play1+1
mva #62 sdmctl
mva #220 pcolr0
mva #220 pcolr1
mva #122 pcolr2
mva #122 pcolr3
mva #1 gprior
mva #3 gractl
mva #1 sizep0
mva #1 sizep1
mva #0 sizem
mva #0 rechts
mva #2 hitclr
main2
ldy #255 ;Speicher Player 1 leeren
lda #0
sta play1
@ sta (play1),y
dey
bpl @-
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
iny
inx
cpx #14
bne @-
clc
ldy #0
ldx #0
@ lda mi1,x
sta (miss1),y
iny
inx
cpx #2
bne @-
lda xposm1
sta p0pf
lda xposm2
sta p1pf
ldx #>vbinter ;VB-Interrupt VektorHi
ldy #<vbinter ;VB-Interrupt VektorLo
lda #7 ;Deferred Mode mit lda #7 festlegen
jsr setvbv ;Vektor für die eigene Routine über setvbv eintragen
hauptprogramm
clc
lda kollp0
cmp #1
bcc @+
jsr kollision
jmp start1
@
jsr letztereihe ;letzte Reihe (lands) Bildschirm1 printen (sichtbar)
jsr feinscroll ;Feinscroll Bildschirm1 ausführen (sichtbar)
mva #$30 var1 ;var1 auf 30000 ($7530) setzen
mva #$75 var1+1
mva #$f0 var2 ;var2 auf 30960 ($78f0) setzen
mva #$78 var2+1
jsr grobscroll ;Bildschirm1 kopieren + grobscroll
mva #$18 var1 ;var1 + var2 auf 31000 ($7918) setzen
mva #$18 var2
mva #$79 var1+1
mva #$79 var2+1
mva #1 delay
jsr wartes
jsr umschalten ;umschalten auf Bildschirm2 - Bildschirm2 wird sichtbar
jsr letztereihe
jsr feinscroll ;Feinscroll Bildschirm2 ausführen (sichtbar)
mva #$08 var2 ;var1 auf 29960 ($7508) setzen
mva #$75 var2+1
mva #$18 var1 ;var2 auf 31000 ($7918) setzen
mva #$79 var1+1
jsr grobscroll ;;Bildschirm2 kopieren + grobscroll
mva #$30 var1 ;var1 + var2 auf 30000 ($7530) setzen
mva #$30 var2
mva #$75 var1+1
mva #$75 var2+1
mva #1 delay
jsr wartes
jsr umschalten ;umschalten auf Bildschirm1 - Bildschirm1 wird sichtbar
;Ende der Bildschirmausführung / Kontrolle Durchläufe
sec
lda #38 ; - 36 = Anzahl der Durchläufe
sbc var6+1
bpl @+
jmp start1 ;Stop hier
@ jmp hauptprogramm ;weiter
.endp
; _____________________________________________________________________________________
;
; ---------------------------- S U B R O U T I N E N ----------------------------------
; _____________________________________________________________________________________
;vertical blank interrupt für Joystick / PM
vbinter
pha
txa
pha
clc ;Kollision Player 0 Abfragen
lda p0pf
cmp #1
bcc @+
mva #1 kollp0
@ mva #2 hitclr
clc ;Joystickabfragen Player1
lda stick0
cmp #15 ;keine Joystickaktion
bcs @+
cmp #14
bcs nachob
cmp #13
bcs nachun
cmp #11
bcs nachli
cmp #10
bcs nachliob
cmp #9
bcs nachliun
sec
cmp #7
bcs nachre
cmp #6
bcs nachreob
cmp #5
bcs nachreun
@ jmp write
nachre clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp write
nachreun
clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp nachun
nachreob
clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp nachob
nachli sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp write
nachliun
sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp nachun
nachliob
sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp nachob
nachob
dec yposp1
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
iny
inx
cpx #14
bne @-
jmp write
nachun
inc yposp1
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
iny
inx
cpx #14
bne @-
jmp write
@ clc
write
lda xposp1
sta hposp0
;---------- Abfrage Feuerknopf und Routine Schuss links-------
#if .byte strig0<#1 .and .byte feuer3=#0
#if .byte feuer5=#0 .or .byte feuer5>#180
mva #1 feuer1
mva #1 feuer3
mva xposp1 p0pf
lda yposp1
adc #9
sta feuer2
#end
#end
#if .byte feuer1=#1
ldy feuer2
lda #0
sta (miss1),y
iny
sty feuer2
iny
lda #3
sta (miss1),Y
#if .byte feuer2=#210
mva #0 feuer1
mva #0 feuer2
lda #0
dey
sta (miss1),y
iny
sta (miss1),y
#end
#end
;-------------------------------------------------------------
;---------- Abfrage Feuerknopf und Routine Schuss links-------
#if .byte strig0<#1 .and feuer3=#1
#if .byte feuer2=#0 .or .byte feuer2>#180
mva #1 feuer4
mva #0 feuer3
lda xposp1
adc #13
sta p1pf
lda yposp1
adc #9
sta feuer5
#end
#end
#if .byte feuer4=#1
ldy feuer5
lda #0
sta (miss1),y
iny
sty feuer5
iny
lda #12
sta (miss1),Y
#if .byte feuer5=#210
mva #0 feuer4
mva #0 feuer5
lda #0
dey
sta (miss1),y
iny
sta (miss1),y
#end
#end
;-------------------------------------------------------------
@
pla
tax
pla
jmp xitvbv ;vb-interrupt wird über xitvbv beendet!!
; -------------------------------------------------------------------------------------
kollision
lda #22
sta delay
jsr wartes
rts
; -------------------------------------------------------------------------------------
umschalten
ldy #4 ;Bildschirme umschalten von unsichtbar auf sichtbar
mva sdlstl var5
mva sdlstl+1 var5+1
lda var1
sta (var5),y
iny
lda var1+1
sta (var5),y
rts
; -------------------------------------------------------------------------------------
wartes
clc
ldx delay ; Warteschleife
st lda RTCLOK+2
wa cmp RTCLOK+2
beq wa
dex
bpl st
rts
; -------------------------------------------------------------------------------------
feinscroll
ldy #1
mva #0 delay
@ jsr wartes
sty vscrol
iny
cpy #8
bne @-
rts
; --------------------------------------------------------------------------------------
grobscroll
;Den Bildschirm um eins hoch / Grobscrolling um eine Zeile
ldx #22
@ ldy #$28
clc
@ mva (var1),y (var2),y
dey
bpl @-
clc
lda var1
adc #$28
sta var1
bcc @+
inc var1+1
@ clc
lda var2
adc #$28
sta var2
bcc @+
inc var2+1
@ clc
dex
bpl @-3
rts
; -------------------------------------------------------------------------------
displaylist
; initialisiere die Displaylist
mva sdlstl var5
mva sdlstl+1 var5+1
ldy #0
clc
@ lda dlist,y
sta (var5),y
iny
cpy #34
bne @-
rts
; ---------------------------------------------------------------------------------------
letztereihe
;Die letzte Reihe printen
;Start der letzten Reihe bei var1 - Line 22
lda var1
adc #112
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy #0
clc
lda (var6),y ;Boarder1 holen
sta var5 ;Boarderanzahl in var5 speichern
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y
ldy var5
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y ;Rand Boarder1 holen
inc var5 ;Zeilenzähler eins weiter
ldy var5
sta (var1),y ;Rand Boarder1 printen
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;leer holen
tax
lda #0
ldy var5
@ iny
sta (var1),y ; leer printen
dex
bpl @-
sty var5 ;Zeilenzähler sichern
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;Rand Boarder2 holen
ldy var5
iny
sty var5
sta (var1),y ;Rand Boarder2 printen
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;Boarder2 holen
tax ;Boarderanzahl in x speichern
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y
ldy var5
@ iny
sta (var1),y ;Boarder2 printen
dex
bpl @-
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
mva #0 vscrol
rts
; ------------------------------------------------------------------------------
run main
Wenn erwünscht (für die, die nicht mit Eclipse arbeiten) kann ich auch eine kurze mov -Datei hochstellen ....
Gruß
Peter
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Hallo!
Sind diese "Grafikfehler" bei Dir auch, oder habe ich den Programmcode falsch übernommen?
Grüße
Sind diese "Grafikfehler" bei Dir auch, oder habe ich den Programmcode falsch übernommen?
Grüße
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
nimm mal für lands.asm diesen Code:
du hast wohl noch den älteren Code für lands.asm
... bislang habe ich nur eine Testlandschaft drin, die sich dann wiederholt. Daran werde ich jetzt aber relativ zeitnah dran arbeiten.
Vorher muss ich aber noch etwas am Player arbeiten und die Kollisionen müssen noch rein!
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test1.asm
lands .byte 8,2,8,19,10,9,2
.byte 9,2,8,18,10,12,2
.byte 9,2,8,17,10,13,2
.byte 9,2,8,16,10,14,2
.byte 9,2,8,15,10,16,2
.byte 9,2,8,14,10,17,2
.byte 9,2,8,13,10,17,2
.byte 10,2,8,12,10,17,2
.byte 11,2,8,11,10,18,2
.byte 12,2,8,10,10,17,2
.byte 13,2,8,10,10,15,2
.byte 14,2,8,10,10,14,2
.byte 14,2,8,10,10,14,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 8,2,8,19,6,8,2
.byte 9,2,8,18,10,11,2
.byte 9,2,8,17,10,12,2
.byte 9,2,8,16,10,13,2
.byte 9,2,8,15,10,15,2
.byte 9,2,8,14,10,16,2
.byte 9,2,8,13,10,17,2
.byte 10,2,8,12,10,17,2
.byte 11,2,8,11,10,18,2
.byte 12,2,8,10,10,17,2
.byte 13,2,8,10,10,15,2
.byte 14,2,8,10,10,14,2
.byte 14,2,8,10,10,14,2 ;34
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 12,2,8,10,10,17,2
.byte 13,2,8,10,10,15,2
.byte 14,2,8,10,10,14,2
.byte 14,2,8,10,10,14,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 12,2,8,12,10,14,2
.byte 12,2,8,12,10,14,2 ;68
... bislang habe ich nur eine Testlandschaft drin, die sich dann wiederholt. Daran werde ich jetzt aber relativ zeitnah dran arbeiten.
Vorher muss ich aber noch etwas am Player arbeiten und die Kollisionen müssen noch rein!
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... da meine Frau bis Donnerstag auf Achse ist und ich heute erst ab 15 Uhr zu arbeiten anfange, habe ich ein wenig Zeit zu programmieren...
Den Antrieb vom Raumschiff habe ich etwas angepasst und dabei festgestellt, dass der VBI so langsam ausgereizt ist.
Daher habe ich jetzt noch schnell die Kollisionsabfragen für das Raumschiff und die beiden Schüsse in den VBI programmiert. Die beiden Schüsse laufen wie gewohnt nach ganz unten durch wenn keine Barriere im Weg ist, treffen die Schüsse auf die Landschaft, verschwinden sie einfach. Wenn bestimmte Ziele getroffen werden, passiert eine bestimmte Aktion.... das folgt dann bald!
Ich habe jetzt einen Player für das Raumschiff und einen für den Antrieb benutzt, zwei Missile für die beiden Schüsse und zwei Missile fürs Blinken. Das läuft jetzt recht stabil, ab und zu passiert mal ein kleiner Grafikfehler, den ich noch nicht entdeckt habe. Später.....
Ich bin mir aber noch nicht so ganz sicher, ob ich das nochmal umprogrammieren muss... vielleicht baue ich später das Blinken um und nutze dafür einen Player - die beiden gesparten Missile nutze ich dann für 4 statt 2 Schüsse. Auch mit dem Aufbau der Schüsse bin ich nicht so ganz zufrieden, das muss ich nochmal grundsätzlich umprogrammieren, damit alles etwas schlanker und besser läuft...
Aber so wie es jetzt ist, funktioniert schon alles recht gut und ich baue jetzt erstmal die Landschaft aus.
Auch hier muss ich etwas umprogrammieren, denn der Aufbau der letzten Reihe (hier wird ja die Landschaft kontinuierlich aus den Datensätzen gebildet) beinhaltet noch nicht die Items, die das Raumschiff abschießen soll/muss.
Das gehe ich jetzt als nächstes an!
Gruß
Peter
Den Antrieb vom Raumschiff habe ich etwas angepasst und dabei festgestellt, dass der VBI so langsam ausgereizt ist.
Daher habe ich jetzt noch schnell die Kollisionsabfragen für das Raumschiff und die beiden Schüsse in den VBI programmiert. Die beiden Schüsse laufen wie gewohnt nach ganz unten durch wenn keine Barriere im Weg ist, treffen die Schüsse auf die Landschaft, verschwinden sie einfach. Wenn bestimmte Ziele getroffen werden, passiert eine bestimmte Aktion.... das folgt dann bald!
Ich habe jetzt einen Player für das Raumschiff und einen für den Antrieb benutzt, zwei Missile für die beiden Schüsse und zwei Missile fürs Blinken. Das läuft jetzt recht stabil, ab und zu passiert mal ein kleiner Grafikfehler, den ich noch nicht entdeckt habe. Später.....
Ich bin mir aber noch nicht so ganz sicher, ob ich das nochmal umprogrammieren muss... vielleicht baue ich später das Blinken um und nutze dafür einen Player - die beiden gesparten Missile nutze ich dann für 4 statt 2 Schüsse. Auch mit dem Aufbau der Schüsse bin ich nicht so ganz zufrieden, das muss ich nochmal grundsätzlich umprogrammieren, damit alles etwas schlanker und besser läuft...
Aber so wie es jetzt ist, funktioniert schon alles recht gut und ich baue jetzt erstmal die Landschaft aus.
Auch hier muss ich etwas umprogrammieren, denn der Aufbau der letzten Reihe (hier wird ja die Landschaft kontinuierlich aus den Datensätzen gebildet) beinhaltet noch nicht die Items, die das Raumschiff abschießen soll/muss.
Das gehe ich jetzt als nächstes an!
Gruß
Peter
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... die Character habe ich angepasst - ein erstes "Item" ist fertig, nämlich der FUEL-Tank
... die Landschaft habe ich etwas erweitert: Statt 7 Bytes sind jetzt 9 Bytes pro Reihe hinterlegt, die letzten beiden Bytes legen in einer Reihe fest, welches Item an welcher Position geprintet wird - drei Tanks habe ich bereits integriert in die Landschaft, die ich entsprechend auch vergrößert habe...
... die letzte Reihe habe ich entsprechend angepasst, die Items werden jetzt erkannt (sofern in der Landschaft hinterlegt) und geprintet...
Gruß und ein schönes WE
... die Landschaft habe ich etwas erweitert: Statt 7 Bytes sind jetzt 9 Bytes pro Reihe hinterlegt, die letzten beiden Bytes legen in einer Reihe fest, welches Item an welcher Position geprintet wird - drei Tanks habe ich bereits integriert in die Landschaft, die ich entsprechend auch vergrößert habe...
... die letzte Reihe habe ich entsprechend angepasst, die Items werden jetzt erkannt (sofern in der Landschaft hinterlegt) und geprintet...
Gruß und ein schönes WE
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
sehr schwierig..
Am WE wollte ich mal kurz die Schusskollision weiter entwickeln und die entsprechende Explosion des Items (der Öltank) einfügen.
Leider habe ich hier massive Schwierigkeiten auf mehreren Ebenen bekommen.
Zunächst wollte ich die Kollisionsabfrage im VBI machen und im Hauptprogramm dann die weiteren Schritte der Erkennung der genauen Position und dann die Explosion einfügen. Beides funktionierte zunächst nicht so richtig und ich dachte, es müsse auch in den VBI komplett mit rein.
Das habe ich dann auch umgesetzt - und dabei feststellen müssen, daß er die Kollision nicht immer erkennt - ein Muster habe ich dabei nicht evaluieren können... dann kam noch die Schwierigkeit, die genaue Position des Tanks mit dem Missile zu koordinieren. Das ist in meinem Programm nicht so einfach, da der Missile eine volle Positionsauflösung hat und die Landschaft aus Charactern (8bit) aufgebaut ist. Ich muss also die x- und y-Position der Missiles zunächst umrechnen (teilen durch 8 in y und teilen durch 4 in x) und kämpfe noch mit einem Rundungsfehler.... das Teilen durch 8 geht mit drei ROR-Anweisungen!
Am Ende ist das Timing und wohl auch der Zusatzcode im VBI zu lang und gestern endlich kam der Durchbruch, wo ich es stabil geschafft habe, den Code für die Explosion im Hauptprogramm unterzubringen - im VBI gibt es zu viele Timing-Probleme.
Mein nächstes Projekt werde ich ganz anders strukturieren - das steht schon fest. Auch werde ich dann wohl mit einer ganz anderen Auflösung und Matrix arbeiten - das bringt zwar mehr Probleme was Speicher und Scrolling angeht, erleichtert aber mutmaßlich viele andere Dinge....
Ich frage mich auch zunehmend, ob es Sinn macht, den Code hier reinzustellen, denn der wird immer umfangreicher und unübersichtlicher trotz der Kommentare. Hier hätte ich gerne ein kurzes Feedback...
Liebe Grüße
Peter
Leider habe ich hier massive Schwierigkeiten auf mehreren Ebenen bekommen.
Zunächst wollte ich die Kollisionsabfrage im VBI machen und im Hauptprogramm dann die weiteren Schritte der Erkennung der genauen Position und dann die Explosion einfügen. Beides funktionierte zunächst nicht so richtig und ich dachte, es müsse auch in den VBI komplett mit rein.
Das habe ich dann auch umgesetzt - und dabei feststellen müssen, daß er die Kollision nicht immer erkennt - ein Muster habe ich dabei nicht evaluieren können... dann kam noch die Schwierigkeit, die genaue Position des Tanks mit dem Missile zu koordinieren. Das ist in meinem Programm nicht so einfach, da der Missile eine volle Positionsauflösung hat und die Landschaft aus Charactern (8bit) aufgebaut ist. Ich muss also die x- und y-Position der Missiles zunächst umrechnen (teilen durch 8 in y und teilen durch 4 in x) und kämpfe noch mit einem Rundungsfehler.... das Teilen durch 8 geht mit drei ROR-Anweisungen!
Am Ende ist das Timing und wohl auch der Zusatzcode im VBI zu lang und gestern endlich kam der Durchbruch, wo ich es stabil geschafft habe, den Code für die Explosion im Hauptprogramm unterzubringen - im VBI gibt es zu viele Timing-Probleme.
Mein nächstes Projekt werde ich ganz anders strukturieren - das steht schon fest. Auch werde ich dann wohl mit einer ganz anderen Auflösung und Matrix arbeiten - das bringt zwar mehr Probleme was Speicher und Scrolling angeht, erleichtert aber mutmaßlich viele andere Dinge....
Ich frage mich auch zunehmend, ob es Sinn macht, den Code hier reinzustellen, denn der wird immer umfangreicher und unübersichtlicher trotz der Kommentare. Hier hätte ich gerne ein kurzes Feedback...
Liebe Grüße
Peter
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Moin!
Spontan würde ich vorschlagen auf Github den Quellcode zu posten. Dort lägen dann immer alle aktuellen Files die Du nutzt und man kann jederzeit sich dieses herunterladen. Jedoch kenne ich mich mit Github nicht aus, ob und wie schwer es ist dort den Code hochzuladen.
Ansonsten hätte ich schon Interesse an den Quellcode. Die Kollision und vorallem die Identifizierung des getroffenen Objekts würden mich sehr interessieren![Smile :-)](./images/smilies/icon_e_smile.gif)
Der Quellcode kann nicht genug Remarks enthalten... dass merkt man aber erst, wenn man selber nach 3-4 Monaten etwas sucht
Grüße
Janko
Spontan würde ich vorschlagen auf Github den Quellcode zu posten. Dort lägen dann immer alle aktuellen Files die Du nutzt und man kann jederzeit sich dieses herunterladen. Jedoch kenne ich mich mit Github nicht aus, ob und wie schwer es ist dort den Code hochzuladen.
Ansonsten hätte ich schon Interesse an den Quellcode. Die Kollision und vorallem die Identifizierung des getroffenen Objekts würden mich sehr interessieren
![Smile :-)](./images/smilies/icon_e_smile.gif)
Der Quellcode kann nicht genug Remarks enthalten... dass merkt man aber erst, wenn man selber nach 3-4 Monaten etwas sucht
![Mr. Green :mrgreen:](./images/smilies/icon_mrgreen.gif)
Grüße
Janko
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... mit Github kenne ich mich auch nicht so aus ...ich denke mal darüber nach!
Mit den Remarks hast du absolut Recht! Da muss ich noch viel mehr machen!!
Das Objekt nach der Kollision zu identifizieren geht jetzt ganz gut! Du hast ja die x- und y-Position des Missile zum Zeitpunkt des Treffers. Diese Werte auslesen und sichern.
Wenn du - so wie in diesem Projekt - mit Graphics 0 arbeitest (Zeile hat 40 Character a 8 Bit und Spalte hat 24 Character a 8 Bit), dann musst du für die x-Position des Missile zunächst 48 subtrahieren und dann mittels <clc ror clc ror> durch 4 teilen. Die y-Position des Missile (oder Players) bestimmst du für die Kollision indem du zunächst 32 subtrahierst und dann durch 8 teilst <clc ror clc ror clc ror>
... das Problem nun ist: Man weiß gar nicht, ob du den linken, rechten Rand oder die Mitte des Objektes getroffen hast... entsprechend hast du nie eine ganz genaue horizontale Position... das Problem habe ich noch nicht gelöst -> man müsste hier die Umgebung des Treffers abfragen bis eine Leerstelle kommt und dann hat man die genaue Position des Objektes ...
Mit den Remarks hast du absolut Recht! Da muss ich noch viel mehr machen!!
Das Objekt nach der Kollision zu identifizieren geht jetzt ganz gut! Du hast ja die x- und y-Position des Missile zum Zeitpunkt des Treffers. Diese Werte auslesen und sichern.
Wenn du - so wie in diesem Projekt - mit Graphics 0 arbeitest (Zeile hat 40 Character a 8 Bit und Spalte hat 24 Character a 8 Bit), dann musst du für die x-Position des Missile zunächst 48 subtrahieren und dann mittels <clc ror clc ror> durch 4 teilen. Die y-Position des Missile (oder Players) bestimmst du für die Kollision indem du zunächst 32 subtrahierst und dann durch 8 teilst <clc ror clc ror clc ror>
... das Problem nun ist: Man weiß gar nicht, ob du den linken, rechten Rand oder die Mitte des Objektes getroffen hast... entsprechend hast du nie eine ganz genaue horizontale Position... das Problem habe ich noch nicht gelöst -> man müsste hier die Umgebung des Treffers abfragen bis eine Leerstelle kommt und dann hat man die genaue Position des Objektes ...
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Ich habe jetzt tatsächlich gerade eben mir die Mühe gemacht die Ränder abzufragen und entsprechend dann die Position zu korrigieren:
in var2 steht die Bildschirmadresse mit bereits korrekter y-Position
in y steht die x-Position beim Treffer des Missiles nach Korrektur (-48 /4)
in var8 geht der rechte Rand rein
in var9 geht der linke Rand rein
entsprechend verschiebe ich die x-Position um eins nach rechts oder links - oder gar nicht (mein Objekt ist 3 breit).
Lda#45 ist nur eine Hilfszahl - später baue ich hier die Explosion rein!!
Code: Alles auswählen
dey
lda (var2),y
sta var8
iny
iny
lda (var2),y
sta var9
dey
dey
#if .byte var8=#0 .and .byte var9>#0
iny
#end
#if .byte var8>#0 .and .byte var9=#0
dey
#end
lda #45
sta (var2),y
iny
sta (var2),y
iny
sta (var2),y
in y steht die x-Position beim Treffer des Missiles nach Korrektur (-48 /4)
in var8 geht der rechte Rand rein
in var9 geht der linke Rand rein
entsprechend verschiebe ich die x-Position um eins nach rechts oder links - oder gar nicht (mein Objekt ist 3 breit).
Lda#45 ist nur eine Hilfszahl - später baue ich hier die Explosion rein!!
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
jetzt habe ich noch den y-Wert - also die vertikale Position der Kollision abgefragt und entsprechend korrigiert.
Die Position am Item - also da wo die Explosion des Items bei Kollision mit dem Schuss stattfinden soll ist jetzt immer definiert und an gleicher Stelle - dafür habe ich jetzt tatsächlich erheblich Zeit und Code verwendet und frage mich natürlich, ob das nicht viel viel einfacher geht... bestimmt!! Aber egal, dieser Code und die entsprechende Logik stammt von mir und - hurra - funktioniert tadellos! Nach ca. 4 Tagen verzweifelten Kampfes![Wink ;-)](./images/smilies/icon_e_wink.gif)
Der Subroutinencode:
Dieser Code funktioniert auch für alle Kollisionen und steht entsprechend als Subroutine...
was folgt jetzt:
Bislang habe ich ja nur eine Dreierreihe als Simulation der Explosion geprintet - jetzt kommt die komplette Überschreibung des Items und dann die Animation dieser Explosionswolke...
Ich überlege noch, ob ich das folgendermaßen mache:
Entweder printe ich hintereinander verschiedene Werte in das Gebiet des Items - so daß es animiert aussieht.
Oder ich lösche das Items komplett und überlagere das Gebiet mit Player4, der selber eine Animation einer explodierenden Wolke darstellt. Problem hierbei ist, wenn ich mehrere Explosionen gleichzeitig darstellen muss.
Die Position am Item - also da wo die Explosion des Items bei Kollision mit dem Schuss stattfinden soll ist jetzt immer definiert und an gleicher Stelle - dafür habe ich jetzt tatsächlich erheblich Zeit und Code verwendet und frage mich natürlich, ob das nicht viel viel einfacher geht... bestimmt!! Aber egal, dieser Code und die entsprechende Logik stammt von mir und - hurra - funktioniert tadellos! Nach ca. 4 Tagen verzweifelten Kampfes
![Wink ;-)](./images/smilies/icon_e_wink.gif)
Der Subroutinencode:
Code: Alles auswählen
kollitem
;var8 unveränderter Bildschirmanfang
lda yschuss1 ;in Gr.0 -32 (sichtbarer Bereich ab 32 und /8
sec
sbc #32
clc
ror
clc
ror
clc
ror
sta yschuss1 ;y-Position in das x-Register schreiben
tax
dex ; und einen abziehen
lda xschuss1 ;x-Position -48 (sichtbarer Bereich)und /4
sec
sbc #48
clc
ror
clc
ror
tay ;in y geht die x-Position
sec
mva var1 var2 ;holen der Bildschirmadresse -> var2
mva var1+1 var2+1
clc
@
lda var2 ;jetzt die y-Position auf die richtige Höhe stellen
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
dex
bpl @- ;die y-Position steht in x - Addition von x Zeilen
@
dey ;die korrekte x-Position einstellen
lda (var2),y ;linken Rand checken
sta var8
iny
iny
lda (var2),y ;rechten Rand checken
sta var9
dey
dey
#if .byte var8=#0 .and .byte var9>#0 ;Position nach rechts anpassen
iny
#end
#if .byte var8>#0 .and .byte var9=#0 ;Position nach links anpassen
dey
#end
lda (var2),y ;2. Durchgang der Anpassung um letzte
sta var8 ;Fehler zu beseitigen
iny
iny
lda (var2),y
sta var9
dey
dey
#if .byte var8=#0 .and .byte var9>#0
iny
#end
#if .byte var8>#0 .and .byte var9=#0
dey
#end
lda (var2),y ;Korrektur der y-Position
sta var8 ;in var8 aktuelle BS-Position
sec
lda var2 ;eins drüber - bleibt wenn var2 zu tief
sbc #40
sta var2
lda var2+1
sbc #0
sta var2+1
lda (var2),y ;lade Bildschirminhalt eins drüber
sta var9 ;das geht in var9 rein
#if .byte var8>#0 .and .byte var9=#0 ;alte Position var2
clc ;wiederherstellen
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
#end
#if .byte var8=#0 .and .byte var9=#0 ;alte Position var2
clc ;eins runter
lda var2
adc #80
sta var2
lda var2+1
adc #0
sta var2+1
#end
lda (var2),y ;2. Durchgang der Anpassung um letzte
sta var8 ;Fehler zu beseitigen
sec
lda var2
sbc #40
sta var2
lda var2+1
sbc #0
sta var2+1
lda (var2),y
sta var9
#if .byte var8>#0 .and .byte var9=#0
clc
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
#end
#if .byte var8=#0 .and .byte var9=#0
clc
lda var2
adc #80
sta var2
lda var2+1
adc #0
sta var2+1
#end
;ab hier stimmt die Position des Items
;in der Variable y für x-Position
;und in var2 für die y-Position
lda #45
sta (var2),y
iny
sta (var2),y
iny
sta (var2),y
mva #2 hitclr
mva #0 kollm1
rts
was folgt jetzt:
Bislang habe ich ja nur eine Dreierreihe als Simulation der Explosion geprintet - jetzt kommt die komplette Überschreibung des Items und dann die Animation dieser Explosionswolke...
Ich überlege noch, ob ich das folgendermaßen mache:
Entweder printe ich hintereinander verschiedene Werte in das Gebiet des Items - so daß es animiert aussieht.
Oder ich lösche das Items komplett und überlagere das Gebiet mit Player4, der selber eine Animation einer explodierenden Wolke darstellt. Problem hierbei ist, wenn ich mehrere Explosionen gleichzeitig darstellen muss.
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Hallo!
Ich habe mal gehört (gefährliches Halbwissen), dass man Berechnungen möglichst vermeiden sollte.
So würde man eine Tabelle mit 40 Werten nehmen wo immer der erste Wert für Gr. 0 -X drin steht. Also z.B. 48, 52, 56, 60... und nun vergleicht man den X-Wert des Missels mit der Tabelle. Bei Position 5 ein Match also ist im X-Wert eine 5 für Gr. 0.
Das gleiche macht man im Y-Bereich und erhält eine Wandlung der X/Y- Spriteposition zu X/Y-Gr.0-Position.
Eine Schleife mit einem kleinem Vergleich soll wohl schneller sein also eine Berechnung.
Aber wie gesagt, ich weiß es selbst nicht wirklich.
Grüße
Janko
Ich habe mal gehört (gefährliches Halbwissen), dass man Berechnungen möglichst vermeiden sollte.
So würde man eine Tabelle mit 40 Werten nehmen wo immer der erste Wert für Gr. 0 -X drin steht. Also z.B. 48, 52, 56, 60... und nun vergleicht man den X-Wert des Missels mit der Tabelle. Bei Position 5 ein Match also ist im X-Wert eine 5 für Gr. 0.
Das gleiche macht man im Y-Bereich und erhält eine Wandlung der X/Y- Spriteposition zu X/Y-Gr.0-Position.
Eine Schleife mit einem kleinem Vergleich soll wohl schneller sein also eine Berechnung.
Aber wie gesagt, ich weiß es selbst nicht wirklich.
Grüße
Janko
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Hi Janko,
vielen Dank für diesen Hinweis - in der Tat habe ich über genau so eine Tabelle auch nachgedacht und hätte das auch so gemacht. Teilen durch 4 bzw. 8 erschien mir aber machbar durch einfache Bitrotation und funktioniert auch ganz gut. Die Größe der Tabelle hat mich etwas abgeschreckt!!
Was dann heute als echter Pferdefuss noch auftrat war dann die Tatsache, dass mein Item (also zB der Tank) ja deutlich breiter ist, als mein Schuss und ich also gar nicht so genau weiß, wo mein Schuss gelandet ist - es sei denn (fällt mir gerade zur Sekunde als Idee ein) ich gestalte die Oberfläche des Items von der Farbe her unterschiedlich - dann bekomme ich einen jeweils anderen Wert für die Kollision und kann das auch nutzen... nun ja, jetzt habe ich die entsprechenden Abfragen aufwendig programmiert und es funktioniert stabil - lass ich jetzt mal!!
Für das nächste Projekt werde ich das direkt etwas anders konzipieren....
vielen Dank für diesen Hinweis - in der Tat habe ich über genau so eine Tabelle auch nachgedacht und hätte das auch so gemacht. Teilen durch 4 bzw. 8 erschien mir aber machbar durch einfache Bitrotation und funktioniert auch ganz gut. Die Größe der Tabelle hat mich etwas abgeschreckt!!
Was dann heute als echter Pferdefuss noch auftrat war dann die Tatsache, dass mein Item (also zB der Tank) ja deutlich breiter ist, als mein Schuss und ich also gar nicht so genau weiß, wo mein Schuss gelandet ist - es sei denn (fällt mir gerade zur Sekunde als Idee ein) ich gestalte die Oberfläche des Items von der Farbe her unterschiedlich - dann bekomme ich einen jeweils anderen Wert für die Kollision und kann das auch nutzen... nun ja, jetzt habe ich die entsprechenden Abfragen aufwendig programmiert und es funktioniert stabil - lass ich jetzt mal!!
Für das nächste Projekt werde ich das direkt etwas anders konzipieren....
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... weiter gehts mit meinem Projekt!
Ich stelle auf Gr. 7 mit 4 Farben um und werde zunächst die Landschaft anpassen müssen.
Hier mal ein erstes Video mit dem Vergleich: Neu links und Alt rechts....
Die Landschaft links ist natürlich hinsichtlich Form und Farbe noch nicht angepasst, sehr schön kann man hier aber den direkten Vergleich sehen zwischen Gr.0 40x24 Textgrafik (980 Bit) zu Gr.7 40x80 Bitmapgrafik (3200)
Ich stelle auf Gr. 7 mit 4 Farben um und werde zunächst die Landschaft anpassen müssen.
Hier mal ein erstes Video mit dem Vergleich: Neu links und Alt rechts....
Die Landschaft links ist natürlich hinsichtlich Form und Farbe noch nicht angepasst, sehr schön kann man hier aber den direkten Vergleich sehen zwischen Gr.0 40x24 Textgrafik (980 Bit) zu Gr.7 40x80 Bitmapgrafik (3200)
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Vorweihnachtszeit = viel Arbeit = wenig Zeit zum programmieren...
Aber ich habe heute mich um die Farben gekümmert und bin dabei das Programm auf die neue Grafik umzustellen.
Das wird jetzt recht aufwendig, da doch einiges an Code komplett neu muss.
Ich will den Bildschirm in 16x16 Byte Blöcken einteilen, dabei brauche ich dann für einen kompletten Bildschirm nur einen Speicherbedarf von 200 Byte bei einer Auflösung von 160x80 mit 4 Farben. Das schafft die CPU noch ganz gut zu scrollen und sieht flüssig aus.
Die Matrix wird dann praktisch 20x10 sein und in dieser Matrix sind dann die Bildschirmdaten hinterlegt, die auf den sichtbaren Bildschirm zu printen sind. Beim Printen passiert direkt das scrolling... mit einem Interrupt kann ich z.B. ständig die Matrix ändern und so Teile des Bildschirms animieren... so der Plan! Hoffentlich überlaste ich den Rechner damit nicht![Wink ;-)](./images/smilies/icon_e_wink.gif)
Wir werden sehen.... wenn es geht, könnte das recht cool werden...
Anbei noch der aktuelle Stand, wo aber die Landschaft noch nicht wesentlich angepasst ist - hier läuft zunächst noch eine Testlandschaft, die sich wiederholt. Auch die Items sind noch nicht angepasst. Viel Arbeit noch
aber ich habe ja Zeit....
LG und ein frohes Fest uns allen!!
Peter
Aber ich habe heute mich um die Farben gekümmert und bin dabei das Programm auf die neue Grafik umzustellen.
Das wird jetzt recht aufwendig, da doch einiges an Code komplett neu muss.
Ich will den Bildschirm in 16x16 Byte Blöcken einteilen, dabei brauche ich dann für einen kompletten Bildschirm nur einen Speicherbedarf von 200 Byte bei einer Auflösung von 160x80 mit 4 Farben. Das schafft die CPU noch ganz gut zu scrollen und sieht flüssig aus.
Die Matrix wird dann praktisch 20x10 sein und in dieser Matrix sind dann die Bildschirmdaten hinterlegt, die auf den sichtbaren Bildschirm zu printen sind. Beim Printen passiert direkt das scrolling... mit einem Interrupt kann ich z.B. ständig die Matrix ändern und so Teile des Bildschirms animieren... so der Plan! Hoffentlich überlaste ich den Rechner damit nicht
![Wink ;-)](./images/smilies/icon_e_wink.gif)
Wir werden sehen.... wenn es geht, könnte das recht cool werden...
Anbei noch der aktuelle Stand, wo aber die Landschaft noch nicht wesentlich angepasst ist - hier läuft zunächst noch eine Testlandschaft, die sich wiederholt. Auch die Items sind noch nicht angepasst. Viel Arbeit noch
![Wink ;-)](./images/smilies/icon_e_wink.gif)
LG und ein frohes Fest uns allen!!
Peter
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... gerade habe ich nun die FUEL-Tanks optisch angepasst und die komplette Animation der Explosion generiert.
Dafür brauche ich 3x12 = 36 Charakter!
Nun grübel ich allerdings schon seit Tagen, wie ich diese Explosion am besten umsetze. Eine richtig einfache Lösung habe ich noch nicht gefunden - ein denkbarer Ansatz, den ich gerade verfolge ist relativ aufwendig zu programmieren.
Vorweg: Einfach die Charakter ändern geht nicht, denn dabei würden sich ja dann z.B. alle Tanks entsprechend animieren - also explodieren und nicht nur der, der getroffen wurde.
Es hilft nichts: Ich muss die Kollision abfragen, die ganz genaue Position des getroffenen Tanks bestimmen, diesen dann mit der ersten Explosionssequenz überschreiben, beim scrolling muss ich die Position des Tanks entsprechend weiterschreiben, damit die 2. und 3. und dann 4. Sequenz der Explosion auf die entsprechende Stelle geschrieben werden kann. Das muss ja auch 2-4 x zugleich auf dem Bildschirm ablaufen können, denn man kann ja mehr als immer nur einen Tank bzw. Item treffen.
Vielleicht hat jemand hier noch eine bessere Idee...
Hier noch eine mov-Datei mit dem aktuellen Stand...
Sobald ich den Code für die Explosion drin habe, kommen die nächsten Items und dann baue ich die Landschaft weiter. Dann stelle ich auch wieder den aktuellen Code rein!
Allen eine frohe Weihnacht und bis bald!
Gruß
Peter
Dafür brauche ich 3x12 = 36 Charakter!
Nun grübel ich allerdings schon seit Tagen, wie ich diese Explosion am besten umsetze. Eine richtig einfache Lösung habe ich noch nicht gefunden - ein denkbarer Ansatz, den ich gerade verfolge ist relativ aufwendig zu programmieren.
Vorweg: Einfach die Charakter ändern geht nicht, denn dabei würden sich ja dann z.B. alle Tanks entsprechend animieren - also explodieren und nicht nur der, der getroffen wurde.
Es hilft nichts: Ich muss die Kollision abfragen, die ganz genaue Position des getroffenen Tanks bestimmen, diesen dann mit der ersten Explosionssequenz überschreiben, beim scrolling muss ich die Position des Tanks entsprechend weiterschreiben, damit die 2. und 3. und dann 4. Sequenz der Explosion auf die entsprechende Stelle geschrieben werden kann. Das muss ja auch 2-4 x zugleich auf dem Bildschirm ablaufen können, denn man kann ja mehr als immer nur einen Tank bzw. Item treffen.
Vielleicht hat jemand hier noch eine bessere Idee...
Hier noch eine mov-Datei mit dem aktuellen Stand...
Sobald ich den Code für die Explosion drin habe, kommen die nächsten Items und dann baue ich die Landschaft weiter. Dann stelle ich auch wieder den aktuellen Code rein!
Allen eine frohe Weihnacht und bis bald!
Gruß
Peter
- pps
- Beiträge: 566
- Registriert: 18.06.2021 23:05
- Has thanked: 122 times
- Been thanked: 225 times
- Kontaktdaten:
Re: Return to Phobos
Da Du nun doch den Charmode nutzt...
Für die Explosionen nutze nicht einfach 36 Zeichen, sondern nutze nur die Zeichen, die für denTank nötig sind. Die Explosion wird dann erzeugt, indem die entsprechenden Zeichen mit dem neuen Werten direkt verändert werden. So äußerst Du Platz im Font für möglichst viele Sachen.
Aber Du musst dann natürlich mehr Dinge kopieren.
Für die Explosionen nutze nicht einfach 36 Zeichen, sondern nutze nur die Zeichen, die für denTank nötig sind. Die Explosion wird dann erzeugt, indem die entsprechenden Zeichen mit dem neuen Werten direkt verändert werden. So äußerst Du Platz im Font für möglichst viele Sachen.
Aber Du musst dann natürlich mehr Dinge kopieren.
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
hmmmm....
also ein Tank besteht bei mir aus 4 Reihen a 3 Character - also insgesamt 12 Character für den Öltank.
Der Öltank ist das größte Item - die Explosion muss also auch 12 Character haben, animiert 3x12 also 36.
Klar könnte ich das mit 12 machen und die Phasen reinkopieren - gute Idee - das Problem ist dann aber wenn ich (und das kommt vor) zwei oder sogar 3 Items abballere, die dann auch in unterschiedlichen Phasen explodieren und dabei auch noch hochgescrollt werden müssen weil das Spiel ja weiterläuft.
Da hänge ich gerade....
Jede Lösung erscheint von nicht unerheblichen Programmieraufwand. Da warte ich noch auf die Eingebung, wie ich das viel leichter lösen kann ...
also ein Tank besteht bei mir aus 4 Reihen a 3 Character - also insgesamt 12 Character für den Öltank.
Der Öltank ist das größte Item - die Explosion muss also auch 12 Character haben, animiert 3x12 also 36.
Klar könnte ich das mit 12 machen und die Phasen reinkopieren - gute Idee - das Problem ist dann aber wenn ich (und das kommt vor) zwei oder sogar 3 Items abballere, die dann auch in unterschiedlichen Phasen explodieren und dabei auch noch hochgescrollt werden müssen weil das Spiel ja weiterläuft.
Da hänge ich gerade....
Jede Lösung erscheint von nicht unerheblichen Programmieraufwand. Da warte ich noch auf die Eingebung, wie ich das viel leichter lösen kann ...
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Hallo!
Ich weiß nicht wieviel Platz Du noch in Deinem Char-Set hast, aber Du könntest festlegen, dass nur 4 Tanks gleichzeitig vorhanden sein dürfen und vergibst für jeden Tank dann seine eigenen Zeichensequenz. So musst Du 48 Zeichen für 4 Tanks vorhalten, kannst dann aber jeden der 4 Tanks einzeln animieren.
Grüße
Janko
Ich weiß nicht wieviel Platz Du noch in Deinem Char-Set hast, aber Du könntest festlegen, dass nur 4 Tanks gleichzeitig vorhanden sein dürfen und vergibst für jeden Tank dann seine eigenen Zeichensequenz. So musst Du 48 Zeichen für 4 Tanks vorhalten, kannst dann aber jeden der 4 Tanks einzeln animieren.
Grüße
Janko
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
daran habe ich auch schon gedacht, aber ich werde nicht nur Tanks haben, sondern noch weitere Items - und dann wird es irgendwann knapp im Zeichensatz! Ich habe ja nur 128...
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Ja, aber wenn nur 4 Items gleichzeitig sichtbar sind, kannst Du mit den Zeichen auch andere Items darstellen. Je nach Scrollposition.
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Die letzten Tage habe ich immer wieder an der Explosion gearbeitet - und dabei festgestellt, daß es viel viel schwieriger ist, als gedacht.
Die Animation für eine Explosion ist zunächst völlig ausreichend, da mein Raumschiff gar nicht so oft hintereinander schießen kann - zwei Tanks gleichzeitig zur Explosion zu bringen ist dabei fast unmöglich.
Dann habe ich viel mit dem Timing experimentiert und entweder läuft die Explosion zu schnell ab und man sieht die Phasen gar nicht, oder zu langsam, wenn ich es in den Code aufwendig in verschiedenen Phasen zwischen Feinscroll und Grobscroll integriere. Die Explosion in den VBI zu bringen läuft auch zu schnell - hier könnte man mit ein wenig Programmieraufwand das Zeittiming für die Explosion vielleicht noch besser hinbekommen.
Ich habe es jetzt aber erstmal einfacher gelöst: Die Explosion mit der Animation läuft direkt hintereinander ab mit einem kleinen Zeitdelay, was man leider dann im Spiel merkt, da es während der animierten Explosion zu einem kleinen Stop kommt. Ich lasse das jetzt aber erstmal so und mache endlich mit den anderen Items weiter und vor allem baue ich jetzt die Landschaft weiter aus...
Gruß
Peter
Die Animation für eine Explosion ist zunächst völlig ausreichend, da mein Raumschiff gar nicht so oft hintereinander schießen kann - zwei Tanks gleichzeitig zur Explosion zu bringen ist dabei fast unmöglich.
Dann habe ich viel mit dem Timing experimentiert und entweder läuft die Explosion zu schnell ab und man sieht die Phasen gar nicht, oder zu langsam, wenn ich es in den Code aufwendig in verschiedenen Phasen zwischen Feinscroll und Grobscroll integriere. Die Explosion in den VBI zu bringen läuft auch zu schnell - hier könnte man mit ein wenig Programmieraufwand das Zeittiming für die Explosion vielleicht noch besser hinbekommen.
Ich habe es jetzt aber erstmal einfacher gelöst: Die Explosion mit der Animation läuft direkt hintereinander ab mit einem kleinen Zeitdelay, was man leider dann im Spiel merkt, da es während der animierten Explosion zu einem kleinen Stop kommt. Ich lasse das jetzt aber erstmal so und mache endlich mit den anderen Items weiter und vor allem baue ich jetzt die Landschaft weiter aus...
Gruß
Peter
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
ich war fleißig, auch wenn man es vielleicht nicht so sehr sieht!!
Zunächst habe ich die Explosion implementiert, die Landschaft und die Charakter weiter ausgebaut - hier fehlen noch ein paar Landschaftsteile.
Dann habe ich die Anzeige mit Titel, Score, Fuel incl. Laufleiste für den Fuel implementiert.
Ich musste den Aufbau der letzten Reihe erweitern, was mich viel Schweiß gekostet hat - das war nötig weil ich die Randbegrenzung komplettieren wollte / musste. Danach hatte ich ganz unerklärliche Ruckelartefakte - daran habe ich jetzt fast 2 Tage gesessen... ich dachte schon, daß die CPU langsam an die Grenze kommt und der VBI Störartefakte reinhaut... alles musste runterreduziert werden, ohne Erfolg. Am Ende war es die Displaylist. Eine kleine Anpassung und der Ruckler war wieder raus ... omG !!!!
Programmieren ist manchmal wie ein Krimi.
Jetzt baue ich so langsam die Landschaft weiter aus - wie man sieht auf dem Video gibt es noch eine Menge an kleineren Fehlern. Warum nur bekomme ich diesen grünen Balken links zusätzlich rein...
Der Code wird immer länger und unübersichtlicher trotz Dokumentation... noch komme ich aber klar! Aber jetzt bloß keine zu lange Pause machen.
Ich stelle gerne den gesamten Code hier online und wer möchte kann selber daran rumfummeln... ob jemand da aber noch durchsteigt .. keine Ahnung!!
Jetzt noch eine kleine mov - Datei - und wie gesagt: Bei Interesse stelle ich den Code hier rein!
Es ist noch viel zu tun....![Wink ;-)](./images/smilies/icon_e_wink.gif)
Zunächst habe ich die Explosion implementiert, die Landschaft und die Charakter weiter ausgebaut - hier fehlen noch ein paar Landschaftsteile.
Dann habe ich die Anzeige mit Titel, Score, Fuel incl. Laufleiste für den Fuel implementiert.
Ich musste den Aufbau der letzten Reihe erweitern, was mich viel Schweiß gekostet hat - das war nötig weil ich die Randbegrenzung komplettieren wollte / musste. Danach hatte ich ganz unerklärliche Ruckelartefakte - daran habe ich jetzt fast 2 Tage gesessen... ich dachte schon, daß die CPU langsam an die Grenze kommt und der VBI Störartefakte reinhaut... alles musste runterreduziert werden, ohne Erfolg. Am Ende war es die Displaylist. Eine kleine Anpassung und der Ruckler war wieder raus ... omG !!!!
Programmieren ist manchmal wie ein Krimi.
Jetzt baue ich so langsam die Landschaft weiter aus - wie man sieht auf dem Video gibt es noch eine Menge an kleineren Fehlern. Warum nur bekomme ich diesen grünen Balken links zusätzlich rein...
Der Code wird immer länger und unübersichtlicher trotz Dokumentation... noch komme ich aber klar! Aber jetzt bloß keine zu lange Pause machen.
Ich stelle gerne den gesamten Code hier online und wer möchte kann selber daran rumfummeln... ob jemand da aber noch durchsteigt .. keine Ahnung!!
Jetzt noch eine kleine mov - Datei - und wie gesagt: Bei Interesse stelle ich den Code hier rein!
Es ist noch viel zu tun....
![Wink ;-)](./images/smilies/icon_e_wink.gif)
- pps
- Beiträge: 566
- Registriert: 18.06.2021 23:05
- Has thanked: 122 times
- Been thanked: 225 times
- Kontaktdaten:
Re: Return to Phobos
Mach das mal mit dem Code. Dann kann ich Dir vielleicht helfen dass Du wieder einen einfacheren Durchblick bekommst.
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
here we go...
Hauptprogramm:
lands:
character:
header:
hardware:
Gruß Peter
![Wink ;)](./images/smilies/icon_e_wink.gif)
Hauptprogramm:
Code: Alles auswählen
org $2000
icl '../hardware.txt'
icl '../header.txt'
icl 'character.asm'
icl 'lands.asm'
dlist .byte 112,112,112,100
.byte 30,75
.byte 36,36,36,36,36,36,36,36,36,36,36,36
.byte 36,36,36,36,36,36,36,36,36,4,4,4,4,4
.byte 65,32,156
pm1 .byte 0,24,60,36,36,126,126,255,219,219,129,129,129,0
pm41 .byte 0,28,28,8,8,0,4,0,0,0,0,0,0,0
.byte 0,28,28,24,8,8,4,4,0,0,4,0,8,0
.byte 0,28,24,28,24,8,4,8,8,4,0,0,0,0
mi1 .byte 3,3,3,3
mi2 .byte 12,12,12,12
mi3 .byte 12,12,12,12
mi4 .byte 12,12,12,12
.proc main
main1 jsr displaylist ;Subroutine Displaylist-Aufbau
mva #30 yposp1
mva #120 xposp1
mva #42 yposm1
mva #0 xposm1
mva #94 yposm2
mva #100 xposm2
mva #0 tank1x
mva #0 tank1y
mva #151 fuelzaehleritem
mva #0 fuelzaehler
jsr text
Start1 mva #>chr chbas ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3
mva #15 color3 ;Schriftfarbe
mva #218 color1 ;Gelb
mva #154 color0 ;Blau
mva #52 color2 ;Rot
mva #180 color2 ; Grün
mva #0 color4 ;Hintergrundfarbe
lda #0 \ tax \ sta var3 \ sta var4 \ sta var6 \ sta var7 \ sta var6+1
; Player vorbereiten und initialisieren
lda ramtop
sec
sbc #16
sta pmbase
clc
adc #3
sta miss1+1
adc #1
sta play1+1
adc #3
sta play4+1
lda #9
sta play4
mva #62 sdmctl
mva #56 pcolr0
mva #56 pcolr1
mva #142 pcolr2
mva #142 pcolr3
mva #1 gprior
mva #3 gractl
mva #1 sizep0
mva #1 sizep1
mva #0 sizem
mva #0 rechts
mva #2 hitclr
mva #48 blink
main2 mva <lands var6
mva >lands var6+1
mva #0 kollp0
ldy #255 ;Speicher Player 1 leeren
lda #0
sta play1
@ sta (play1),y
sta (play4),y
dey
bpl @-
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
;lda pm41,x
;sta (play4),y
iny
inx
cpx #14
bne @-
clc
ldy #0
ldx #0
@ lda mi1,x
sta (miss1),y
iny
inx
cpx #2
bne @-
lda xposm1
sta p0pf
lda xposm2
sta p1pf
ldx #>vbinter ;VB-Interrupt VektorHi
ldy #<vbinter ;VB-Interrupt VektorLo
lda #7 ;Deferred Mode mit lda #7 festlegen
jsr setvbv ;Vektor für die eigene Routine über setvbv eintragen
hauptprogramm
clc
lda kollp0
cmp #1
bcc @+
jsr kollision
mva #0 kollp0
@ jsr letztereihe ;letzte Reihe (lands) Bildschirm1 printen (sichtbar)
jsr feinscroll ;Feinscroll Bildschirm1 ausführen (sichtbar)
mva #$30 var1 ;var1 auf 30000 ($7530) setzen
mva #$75 var1+1
mva #$E4 var2 ;var2 auf 31460 ($7AE4) setzen
mva #$7A var2+1
jsr grobscroll ;Bildschirm1 kopieren + grobscroll
mva #$0C var1 ;var1 + var2 auf 31500 ($7B0C) setzen
mva #$0C var2
mva #$7B var1+1
mva #$7B var2+1
jsr umschalten
inc fuelzaehleritem
lda fuelzaehler
tax
lda fuelzaehleritem
sta 31043,x
sta 32543,x
#if .byte fuelzaehleritem=#155
mva #151 fuelzaehleritem
inc fuelzaehler
#end
#if .byte fuelzaehler>#200
mva #0 fuelzaehler
#end
#if .byte fuelzaehler=#20
mva #52 color3
#end
#if .byte fuelzaehler>#34 .and .byte fuelzaehler<#200
jmp main1 ;Fuel zuende Neustart
#end
mva #0 kollm1
mva #0 kollm2 ;umschalten auf Bildschirm2 - Bildschirm2 wird sichtbar
jsr letztereihe
jsr feinscroll ;Feinscroll Bildschirm2 ausführen (sichtbar)
mva #$08 var2 ;var1 auf 29960 ($7508) setzen
mva #$75 var2+1
mva #$0C var1 ;var2 auf 31500 ($7B0C) setzen
mva #$7B var1+1
#if .byte kollges=#4
mva #15 color3
sec
lda fuelzaehler
sbc #10
sta fuelzaehler
tax
mva #151 fuelzaehleritem
clc
lda fuelzaehleritem
@ sta 31043,x
sta 32543,x
inx
cpx #36
bne @-
jsr kollitem
mva #0 kollges
#end
mva #$08 var2 ;var1 auf 29960 ($7508) setzen
mva #$75 var2+1
mva #$0C var1 ;var2 auf 31500 ($7B0C) setzen
mva #$7B var1+1
jsr grobscroll ;;Bildschirm2 kopieren + grobscroll
mva #$30 var1 ;var1 + var2 auf 30000 ($7530) setzen
mva #$30 var2
mva #$75 var1+1
mva #$75 var2+1
;mva #1 delay
jsr umschalten ;umschalten auf Bildschirm1 - Bildschirm1 wird sichtbar
inc fuelzaehleritem
lda fuelzaehler
tax
lda fuelzaehleritem
sta 31043,x
sta 32543,x
#if .byte fuelzaehleritem=#155
mva #151 fuelzaehleritem
inc fuelzaehler
#end
;Ende der Bildschirmausführung / Kontrolle Durchläufe
sec
lda #40 ; - 36 = Anzahl der Durchläufe - auf 4 beschränkt, da die Landschaft noch rudimentär ist und sich dann wiederholen soll
sbc var6+1
bpl @+
jmp start1 ;Stop hier
@
jmp hauptprogramm ;weiter
.endp
; _____________________________________________________________________________________
;
; ---------------------------- S U B R O U T I N E N ----------------------------------
; _____________________________________________________________________________________
;vertical blank interrupt für Joystick / PM
vbinter
pha
txa
pha
mva #0 atract ;Bildschirmschoner aus
inc blink
lda blink2
adc #20
sta blink2
clc ;Kollisionen abfragen
lda p0pf
cmp #1
bcc @+
mva #1 kollp0
@
clc ;Joystickabfragen Player1
lda stick0
cmp #15 ;keine Joystickaktion
bcs @+
cmp #14
bcs nachob
cmp #13
bcs nachun
cmp #11
bcs nachli
cmp #10
bcs nachliob
cmp #9
bcs nachliun
sec
cmp #7
bcs nachre
cmp #6
bcs nachreob
cmp #5
bcs nachreun
@ jmp write
nachre clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp write
nachreun
clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp nachun
nachreob
clc
lda xposp1
cmp #192
bcs @+
inc xposp1
@ jmp nachob
nachli sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp write
nachliun
sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp nachun
nachliob
sec
lda xposp1
cmp #49
bcc @+
dec xposp1
@ jmp nachob
nachob
dec yposp1
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
iny
inx
cpx #14
bne @-
jmp write
nachun
inc yposp1
clc
ldy yposp1 ;verticale Startpos. Player 1 + füllen
ldx #0
@ lda pm1,x
sta (play1),y
iny
inx
cpx #14
bne @-
jmp write
clc
write
lda xposp1 ;Blinkabschnitt
sta hposp0
adc #2
sta hposp3
#if .byte blink<#64 ;Blink links
ldy yposm3
lda #0
sta (miss1),y
mva hposp0 xposm3
ldy yposp1
lda #48
iny
iny
iny
iny
iny
iny
sta (miss1),y
mva xposp1 p2pf
mva xposp1 xposm3
sty yposm3
#end
#if .byte blink>#63 .and .byte blink<#128 ;Blink rechts
ldy yposm3
lda #0
sta (miss1),y
ldy yposp1
lda #192
iny
iny
iny
iny
iny
iny
sta (miss1),y
lda xposp1
adc #13
sta p3pf
mva xposp1 xposm3
sty yposm3
#end
#if .byte blink>#127 .and .byte blink<#192 ;Blink links
ldy yposm3
lda #0
sta (miss1),y
mva hposp0 xposm3
ldy yposp1
lda #48
iny
iny
iny
iny
iny
iny
sta (miss1),y
mva xposp1 p2pf
mva xposp1 xposm3
sty yposm3
#end
#if .byte blink>#191 .and .byte blink<#255 ;Blink rechts
ldy yposm3
lda #0
sta (miss1),y
ldy yposp1
lda #192
iny
iny
iny
iny
iny
iny
sta (miss1),y
lda xposp1
adc #13
sta p3pf
mva xposp1 xposm3
sty yposm3
#end
;---------- Abfrage Feuerknopf und Routine Schuss links-------
#if .byte strig0<#1 .and .byte feuer3=#0
#if .byte feuer5=#0 .or .byte feuer5>#180
mva #1 feuer1
mva #1 feuer3
mva xposp1 p0pf
mva xposp1 xschuss1
lda yposp1
adc #9
sta feuer2
#end
#end
#if .byte feuer1=#1
ldy feuer2
iny
iny
lda #0
sta (miss1),y
sty feuer2
iny
iny
lda #3
sta (miss1),Y
mva m0pf kollm1
#if .byte kollm1=#4
mva kollm1 kollges
mva feuer2 yschuss1
#end
#if .byte kollm1>#2
mva #211 feuer2
#end
#if .byte feuer2>#210
mva #0 feuer1
mva #0 feuer2
lda #0
sta (miss1),y
#end
#end
;-------------------------------------------------------------
;---------- Abfrage Feuerknopf und Routine Schuss rechts-------
#if .byte strig0<#1 .and feuer3=#1
#if .byte feuer2=#0 .or .byte feuer2>#180
mva #1 feuer4
mva #0 feuer3
lda xposp1
adc #13
sta p1pf
sta xschuss1
lda yposp1
adc #9
sta feuer5
#end
#end
#if .byte feuer4=#1
ldy feuer5
iny
iny
lda #0
sta (miss1),y
sty feuer5
iny
iny
lda #12
sta (miss1),Y
mva m1pf kollm2
mva m1pf kollm2
#if .byte kollm2=#4
mva kollm2 kollges
mva feuer5 yschuss1
#end
#if .byte kollm2>#1
mva #211 feuer5
#end
#if .byte feuer5>#210
mva #0 feuer4
mva #0 feuer5
lda #0
dey
sta (miss1),y
iny
sta (miss1),y
#end
#end
;-------------------------------------------------------------
ldy yposp1
clc
#if .byte blink2>#0 .and .byte blink2<#75
ldx #0
#end
#if .byte blink2>#75 .and .byte blink2<#160
ldx #14
#end
#if .byte blink2>#160 .and .byte blink2<#255
ldx #28
#end
dey
mva #0 lms2
@
lda pm41,x
sta (play4),y
iny
inx
inc lms2
lda lms2
cmp #14
bne @-
mva #2 hitclr
pla
tax
pla
jmp xitvbv ;vb-interrupt wird über xitvbv beendet!!
; -------------------------------------------------------------------------------------
kollision
ldx #0
clc
@ inx
cpx #255
bcc @-
rts
; -------------------------------------------------------------------------------------
umschalten
ldy #4 ;Bildschirme umschalten von unsichtbar auf sichtbar
mva sdlstl var5
mva sdlstl+1 var5+1
lda var1
sta (var5),y
iny
lda var1+1
sta (var5),y
rts
; -------------------------------------------------------------------------------------
wartes
clc
ldx delay ; Warteschleife
st lda RTCLOK+2
wa cmp RTCLOK+2
beq wa
dex
bpl st
rts
; -------------------------------------------------------------------------------------
feinscroll
ldy #1
mva #0 delay
@ jsr wartes
sty vscrol
iny
cpy #8
bne @-
rts
; --------------------------------------------------------------------------------------
grobscroll
;Den Bildschirm um eins hoch / Grobscrolling um eine Zeile
ldx #22
@ ldy #$28
clc
@ lda (var1),y
sta itemex
#if .byte itemex=#68
jsr fuel
#end
sta (var2),y
dey
bpl @-
clc
lda var1
adc #$28
sta var1
bcc @+
inc var1+1
@ clc
lda var2
adc #$28
sta var2
bcc @+
inc var2+1
@ clc
dex
bpl @-3
rts
; -------------------------------------------------------------------------------
displaylist
; initialisiere die Displaylist
mva sdlstl var5
mva sdlstl+1 var5+1
ldy #0
clc
@ lda dlist,y
sta (var5),y
iny
cpy #34
bne @-
rts
; ---------------------------------------------------------------------------------------
letztereihe
;Die letzte Reihe printen
;Start der letzten Reihe bei var1 - Line 22
;in Var6 (+1) wird die Position von lands gespeichert
;in Var5 gehen Infos der Boarderanzahl rein
;in y ist der Zähler für letzte Reihe
;x wird als Zähler fürs printen benutzt
lda var1+1
;sta var8+1
;sta var7+1
lda var1
;sta var8
;sta var7
adc #112
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy #0
clc
lda (var6),y ;Boarderanzahl 1 holen
sta var5 ;Boarderanzahl 1 in var5 speichern
jsr var6up
lda (var6),y ;Boarderart 1 holen
ldy var5 ;Zeilenzählen in y übertragen
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
jsr var6up
adc #0
sta var6+1
lda (var6),y ;Boarderanzahl 2 holen
tax
jsr var6up
lda (var6),y ;Boarderart 2 holen
ldy var5
@ iny
sta (var1),y ;leer printen
dex
bpl @-
sty var5 ;Zeilenzähler sichern
jsr var6up
lda (var6),y ;Rand Boarder2 holen
inc var5 ;Zeilenzähler eins weiter
ldy var5
sta (var1),y ;Rand Boarder1 printen
jsr var6up
inc var5
lda(var6),y ;leer holen
tax
lda #0
ldy var5
@ iny
sta (var1),y ;leer printen
dex
bpl @-
sty var5 ;Zeilenzähler sichern
jsr var6up
lda(var6),y ;Rand Boarder3 holen
ldy var5
iny
sty var5
sta (var1),y ;Rand Boarder3 printen
jsr var6up
lda(var6),y ;Boarder4 holen
tax ;Boarderanzahl in x speichern
jsr var6up
lda (var6),y
ldy var5
@ iny
sta (var1),y ;Boarder4 printen
dex
bpl @-
sty var5 ;Zeilenzähler sichern
jsr var6up
lda(var6),y ;Boarder5 holen
tax ;Boarderanzahl in x speichern
jsr var6up
lda (var6),y
ldy var5
@ iny
sta (var1),y ;Boarder5 printen
dex
bpl @-
jsr var6up
lda (var6),y ;Sonderitem holen
sta var5 ;Item in Var5 speichern
jsr var6up
#if .byte var5=#56 ;Öltank printen
#if .byte tank1x=#0
mva var1 tank1y
mva var1+1 tank1y+1
sec
lda tank1y
sbc #120
sta tank1y
lda tank1y+1
sbc #0
sta tank1y+1
#end
lda (var6),y ;Startposition des Items in y speichern
sta tank1x
tay
jsr fuel ;Fueltank printen
#end
jsr var6up
mva #0 vscrol
sec
lda tank1y
sbc #40
sta tank1y
lda tank1y+1
sbc #0
sta tank1y+1
lda tank1x
tay
mva #0 var5
rts
var6up clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
rts
; --------------------------------------------------------------------------------------
fuel sec ;Routine um den Öltank zu printen - es werden 12 Character meanderförmig geprinten 3x4 Matrix
lda var1
sbc #160
sta var2
lda var1+1
sbc #0
sta var2+1
fuelex lda var5
sta (var2),y ;1
inc var5
lda var5
iny
sta (var2),y ;2
inc var5
lda var5
iny
sta (var2),y ;3
clc
lda var2
adc #41
sta var2
lda var2+1
adc #0
sta var2+1
dey
inc var5
lda var5
sta (var2),y ;4
dey
inc var5
lda var5
sta (var2),y ;5
dey
inc var5
lda var5
sta (var2),y ;6
clc
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
inc var5
lda var5
sta (var2),y ;7
inc var5
lda var5
iny
sta (var2),y ;8
inc var5
lda var5
iny
sta (var2),y ;9
clc
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
inc var5
lda var5
sta (var2),y ;10
dey
inc var5
lda var5
sta (var2),y ;11
dey
inc var5
lda var5
sta (var2),y ;12
tya
rts
; ------------------------------------------------------------------------------
kollitem ;Kollisionsroutine
;var8 unveränderter Bildschirmanfang
lda yschuss1 ;in Gr.0 -32 (sichtbarer Bereich ab 32 und /8
sec
sbc #32
clc
ror
clc
ror
clc
ror
sta yschuss1 ;y-Position in das x-Register schreiben
tax
dex ; und einen abziehen
lda xschuss1 ;x-Position -48 (sichtbarer Bereich)und /4
sec
sbc #48
clc
ror
clc
ror
tay ;in y geht die x-Position
sec
mva var1 var2 ;holen der Bildschirmadresse -> var2
mva var1+1 var2+1
clc
@ lda var2 ;jetzt die y-Position auf die richtige Höhe stellen
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
dex
bpl @- ;die y-Position steht in x - Addition von x Zeilen
@ dey ;die korrekte x-Position einstellen
lda (var2),y ;linken Rand checken
sta var8
iny
iny
lda (var2),y ;rechten Rand checken
sta var9
dey
dey
#if .byte var8=#0 .and .byte var9>#0 ;Position nach rechts anpassen
iny
#end
#if .byte var8>#0 .and .byte var9=#0 ;Position nach links anpassen
dey
#end
lda (var2),y ;2. Durchgang der Anpassung um letzte
sta var8 ;Fehler zu beseitigen
iny
iny
lda (var2),y
sta var9
dey
dey
#if .byte var8=#0 .and .byte var9>#0
iny
#end
#if .byte var8>#0 .and .byte var9=#0
dey
#end
lda (var2),y ;Korrektur der y-Position
sta var8 ;in var8 aktuelle BS-Position
sec
lda var2 ;eins drüber - bleibt wenn var2 zu tief
sbc #40
sta var2
lda var2+1
sbc #0
sta var2+1
lda (var2),y ;lade Bildschirminhalt eins drüber
sta var9 ;das geht in var9 rein
#if .byte var8>#0 .and .byte var9=#0 ;alte Position var2
clc ;wiederherstellen
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
#end
#if .byte var8=#0 .and .byte var9=#0 ;alte Position var2
clc ;eins runter
lda var2
adc #80
sta var2
lda var2+1
adc #0
sta var2+1
#end
lda (var2),y ;2. Durchgang der Anpassung um letzte
sta var8 ;Fehler zu beseitigen
sec
lda var2
sbc #40
sta var2
lda var2+1
sbc #0
sta var2+1
lda (var2),y
sta var9
#if .byte var8>#0 .and .byte var9=#0
clc
lda var2
adc #40
sta var2
lda var2+1
adc #0
sta var2+1
#end
#if .byte var8=#0 .and .byte var9=#0
clc
lda var2
adc #80
sta var2
lda var2+1
adc #0
sta var2+1
#end
;ab hier stimmt die Position des Items (meistens)
;in der Variable y für x-Position
;und in var2 für die y-Position
expl11
mva var2 tank1pos ;y-Position für Explosion1
mva var2+1 tank1pos+1
mva #68 var5
jsr fuelex
tay
iny
expl22
mva #80 var5
mva tank1pos var2
mva tank1pos+1 var2+1
mva #1 delay
jsr wartes
jsr fuelex
tay
iny
expl33
mva #92 var5
mva tank1pos var2
mva tank1pos+1 var2+1
mva #1 delay
jsr wartes
jsr fuelex
tay
iny
expl44
mva #104 var5
mva tank1pos var2
mva tank1pos+1 var2+1
mva #1 delay
jsr wartes
jsr fuelex
tay
iny
rts
; ------------------------------------------------------------------------------
text ldx #0
lda #52
jsr prte
inx
lda #45
jsr prte
inx
lda #54
jsr prte
inx
lda #31
jsr prte
inx
lda #52
jsr prte
inx
lda #49
jsr prte
inx
lda #0
jsr prte
inx
lda #54
jsr prte
inx
lda #50
jsr prte
inx
lda #0
jsr prte
inx
lda #51
jsr prte
inx
lda #47
jsr prte
inx
lda #50
jsr prte
inx
lda #42
jsr prte
inx
lda #50
jsr prte
inx
lda #53
jsr prte
inx
lda #0
jsr prte
inx
lda #55
jsr prte
inx
lda #34
jsr prte
inx
lda #32
jsr prte
inx
lda #34
jsr prte
inx
lda #34
jsr prte
inx
lda #0
jsr prte
inx
lda #51
jsr prte
inx
lda #45
jsr prte
inx
lda #54
jsr prte
inx
lda #45
jsr prte
inx
lda #52
jsr prte
inx
lda #0
jsr prte
inx
lda #51
jsr prte
inx
lda #52
jsr prte
inx
lda #50
jsr prte
inx
lda #44
jsr prte
inx
lda #45
jsr prte
inx
lda #47
jsr prte
inx
lda #48
jsr prte
inx
lda #0
jsr prte
ldx #0 ;Fuel
lda #46
jsr prte2
inx
lda #31
jsr prte2
inx
lda #45
jsr prte2
inx
lda #48
jsr prte2
ldx #10 ;Score
lda #53
jsr prte2
inx
lda #43
jsr prte2
inx
lda #50
jsr prte2
inx
lda #52
jsr prte2
inx
lda #45
jsr prte2
inx
lda #0
jsr prte2
inx
lda #160
jsr prte2
inx
lda #32
jsr prte2
inx
lda #32
jsr prte2
inx
lda #32
jsr prte2
ldx #23 ;Ships
lda #53
jsr prte2
inx
lda #47
jsr prte2
inx
lda #33
jsr prte2
inx
lda #51
jsr prte2
inx
lda #53
jsr prte2
inx
lda #0
jsr prte2
inx
lda #28
jsr prte2
inx
lda #29
jsr prte2
inx
lda #0
jsr prte2
inx
lda #28
jsr prte2
inx
lda #29
jsr prte2
inx
lda #0
jsr prte2
inx
lda #28
jsr prte2
inx
lda #29
jsr prte2
ldx #0
fuellauf
clc
lda fuelzaehleritem
@ jsr prte3
inx
cpx #36
bne @-
rts
prte sta 30923,x
sta 32423,x
rts
prte2 sta 31003,x
sta 32503,x
rts
prte3 sta 31043,x
sta 32543,x
rts
; ------------------------------------------------------------------------------
run main
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test.asm
; Aufbau der letzten Reihe:
; Boarder1 Boarder2 Rand1(gelb) Mitte(Leerraum) Rand2(gelb) Boarder3 Boarder4 Item(z.B. Öltank - Charakter 56)
; Beispiel: 3,2,4,1,5,22,6,4,2,1,1,56,11
; 3x BoarderArt 2 printen / 4x BoarderArt 1 printen / 1x RandArt 1 printen / 22 Leerzeichen printen
; 1x RandArt 6 printen, 4x BoarderArt 2 printen, 1x BoarderArt 1 printen, Öltank (56) an Stelle 11 printen
; Die Routine "letztereihe" verarbeitet dies kontinuierlich nach jedem Feinscroll/Grobscroll
lands .byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,2,4,2,10,22,11,4,2,1,2,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0 ;22
.byte 6,1,5,2,10,16,11,4,1,1,1,56,9
.byte 6,1,5,1,10,13,11,2,2,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 12,1,3,2,7,9,11,2,1,6,1,56,14
.byte 13,1,3,1,7,8,11,2,1,6,1,0,0
.byte 13,1,4,1,7,7,11,2,1,6,1,0,0
.byte 13,1,5,1,10,6,11,2,1,6,1,0,0
.byte 13,1,4,1,8,7,11,2,1,6,1,0,0
.byte 17,1,0,8,0,7,11,2,1,6,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0 ;22
.byte 6,1,5,2,10,16,11,4,1,1,1,56,9
.byte 6,1,5,1,10,13,11,2,2,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 12,1,3,2,7,9,11,2,1,6,1,56,14
.byte 13,1,3,1,7,8,11,2,1,6,1,0,0
.byte 13,1,4,1,7,7,11,2,1,6,1,0,0
.byte 13,1,5,1,10,6,11,2,1,6,1,0,0
.byte 13,1,4,1,8,7,11,2,1,6,1,0,0
.byte 17,1,0,8,0,7,11,2,1,6,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0 ;22
.byte 6,1,5,2,10,16,11,4,1,1,1,56,9
.byte 6,1,5,1,10,13,11,2,2,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 6,1,5,1,10,13,11,2,1,6,1,0,0
.byte 12,1,3,2,7,9,11,2,1,6,1,56,14
.byte 13,1,3,1,7,8,11,2,1,6,1,0,0
.byte 13,1,4,1,7,7,11,2,1,6,1,0,0
.byte 13,1,5,1,10,6,11,2,1,6,1,0,0
.byte 13,1,4,1,8,7,11,2,1,6,1,0,0
.byte 17,1,0,8,0,7,11,2,1,6,1,0,0
.byte 1,1,4,1,10,22,11,4,1,1,1,0,0
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test2.asm
chr .byte 0,0,0,0,0,0,0,0
.byte 255,255,255,255,255,255,255,255 ;1 Color 2 (grün - alternativ)
.byte 170,255,255,255,255,255,255,255
.byte 255,255,255,255,255,255,255,170
.byte 128,224,248,248,248,248,224,128
.byte 2,11,47,47,47,47,11,2
.byte 170,255,255,255,255,255,255,170 ;6
.byte 128,224,224,248,248,248,254,254
.byte 254,254,248,248,248,224,224,128
.byte 254,254,248,248,248,224,224,170
.byte 128,128,128,128,128,128,128,128
.byte 2,2,2,2,2,2,2,2
.byte 254,254,254,254,254,254,254,254 ;12
.byte 191,191,191,191,191,191,191,191
.byte 0,0,0,0,0,0,0,0
.byte $e0,$e0,$ee,$ee,$ee,$ee,$e0,$e0
.byte $ee,$ee,$ee,$ee,$ee,$ee,$ee,$ee
.byte $0e,$0e,$ee,$ee,$ee,$ee,$0e,$0e
.byte $e0,$e0,$e0,$e0,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.byte $0,$0,$0,$0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,0,0,0,0
.byte $e0,$e0,$e0,$e0,$ee,$ee,$ee,$ee
.byte 0,0,255,255,255,255,0,0 ;Fuel lauf - 123
.byte 0,0,63,63,63,63,0,0 ;F
.byte 0,0,15,15,15,15,0,0 ;U - 25
.byte 0,0,3,3,3,3,0,0 ;U
.byte 0,0,0,0,0,0,0,0 ;E - 27
.byte 1,4,4,21,85,81,64,64 ;28 -> Schiff klein
.byte 64,16,16,84,85,69,1,1 ;29 -> Schiff klein
.byte 0,0,0,0,0,0,$f0,$f0 ;L
.byte 136,136,136,136,136,136,136,168 ;31 -> U
.byte 32,136,136,136,168,136,136,32 ;32 -> 0
.byte 32,32,32,32,32,32,32,32
.byte 168,8,8,168,168,128,128,168 ;34 -> 2
.byte 170,2,2,170,170,2,2,170 ;33 -> 5
.byte 128,136,136,170,170,8,8,8 ;36 -> 4
.byte 170,128,128,170,170,2,2,170
.byte 128,128,128,170,130,130,130,170 ;38 -> 6
.byte 168,8,8,42,42,8,8,8
.byte 170,130,130,170,170,130,130,170 ;40 -> 8
.byte 170,130,130,170,170,2,2,2 ;41 -> 9
.byte 160,136,136,160,160,136,136,160 ;42 -> B
.byte 40,128,128,128,128,128,128,40 ;43 -> C
.byte 160,136,136,136,136,136,136,160 ;44 -> D
.byte 168,128,128,168,168,128,128,168 ;45 -> E
.byte 168,128,128,168,168,128,128,128 ;46 -> F
.byte 136,136,136,168,168,136,136,136 ;47 -> H
.byte 128,128,128,128,128,128,128,170 ;48 -> L
.byte 130,130,162,162,138,138,138,130 ;49 -> N
.byte 32,136,136,136,136,136,136,32 ;50 -> O
.byte 160,136,136,168,160,128,128,128 ;51 -> P
.byte 160,136,136,168,160,136,136,136 ;52 -> R
.byte 40,128,128,168,168,8,8,160 ;53 -> S
.byte 168,168,32,32,32,32,32,32 ;54 -> T
.byte 0,0,8,32,32,32,32,8 ;55 -> c
tank .byte 0,0,0,0,15,15,53,53 ;56 -> Fuel Tank
.byte 0,0,255,255,255,255,185,185
.byte 0,0,192,192,252,252,111,111
.byte 239,239,111,111,239,239,107,107
.byte 185,185,185,185,185,185,169,169
.byte 55,55,53,53,55,55,55,55
.byte 15,15,0,0,0,0,2,2
.byte 255,255,136,136,136,136,170,170
.byte 252,252,128,128,128,128,160,160
.byte 32,32,168,168,8,8,42,42
.byte 8,8,170,170,8,8,42,42
.byte 2,2,10,10,8,8,42,42 ;67
expl1 .byte 0,0,0,32,32,8,5,1 ;68
.byte 0,0,0,2,24,85,154,102
.byte 0,0,64,64,0,0,66,72
.byte 80,144,160,84,152,100,100,170
.byte 101,153,153,86,102,106,153,153
.byte 5,9,134,22,25,41,22,150
.byte 166,25,25,41,86,6,5,9
.byte 154,102,102,149,153,90,101,166
.byte 89,84,100,164,104,80,144,144
.byte 64,6,8,0,0,0,0,0
.byte 150,153,89,20,2,0,0,0
.byte 17,1,0,2,8,0,0,0 ;79
expl2 .byte 0,0,0,0,0,0,0,0 ;80
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 4,16,128,128,64,64,64,160
.byte 20,90,89,165,150,90,105,101
.byte 8,8,1,1,1,2,6,5
.byte 1,2,2,1,1,8,8,32
.byte 149,153,170,102,85,105,24,20
.byte 96,64,128,144,16,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 8,2,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0 ;91
expl3 .byte 0,0,0,0,0,0,0,0 ;92
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,2,24,89,102,150
.byte 0,0,0,0,2,0,0,0
.byte 0,0,2,0,0,0,0,0
.byte 169,89,90,36,0,0,0,0
.byte 0,0,0,128,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0 ;103
expl4 .byte 0,0,0,0,0,0,0,0 ;104
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0
.byte 15,15,0,0,0,0,2,2
.byte 255,255,136,136,136,136,170,170
.byte 252,252,128,128,128,128,160,160
.byte 32,32,168,168,8,8,42,42
.byte 8,8,170,170,8,8,42,42
.byte 2,2,10,10,8,8,42,42
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;F - 132
.byte $f0,$f0,0,0,$f0,0,0,0 ;F
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;U - 134
.byte $0f,$0f,$0f,$0f,$0f,$0f,$ff,$ff ;U
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;E - 136
.byte $f0,$f0,0,0,$f0,0,$f0,$f0 ;E
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;L - 138
.byte 0,0,0,0,0,0,$f0,$f0 ;L
.byte $44,$44,$44,$44,$40,$40,$40,$40
.byte $04,$04,$04,$04,$44,$44,$44,$44
.byte $44,$44,$44,$44,$04,$04,$04,$04
.byte $30,$30,$33,$33,$33,$33,$30,$30 ;143
.byte $33,$33,$33,$33,$33,$33,$33,$33
.byte $03,$03,$33,$33,$33,$33,$03,$03
.byte $30,$30,$30,$30,$30,$30,$30,$30
.byte $03,$03,$03,$03,$03,$03,$03,$03
.byte $0,$0,$0,$0,$33,$33,$33,$33
.byte $33,$33,$33,$33,0,0,0,0
.byte $30,$30,$30,$30,$33,$33,$33,$33
.byte $33,$33,$33,$33,$30,$30,$30,$30
.byte $03,$03,$03,$03,$33,$33,$33,$33
.byte $33,$33,$33,$33,$03,$03,$03,$03
.byte $20,$20,$22,$22,$22,$22,$20,$20 ;154
.byte $22,$22,$22,$22,$22,$22,$22,$22
.byte $02,$02,$22,$22,$22,$22,$02,$02
.byte $20,$20,$20,$20,$20,$20,$20,$20
.byte $02,$02,$02,$02,$02,$02,$02,$02
.byte $0,$0,$0,$0,$22,$22,$22,$22
.byte $22,$22,$22,$22,0,0,0,0
.byte $20,$20,$20,$20,$22,$22,$22,$22
.byte $22,$22,$22,$22,$20,$20,$20,$20
.byte $02,$02,$02,$02,$22,$22,$22,$22
.byte $22,$22,$22,$22,$02,$02,$02,$02
.byte $10,$10,$11,$11,$11,$11,$10,$10 ;165
.byte $11,$11,$11,$11,$11,$11,$11,$11
.byte $01,$01,$11,$11,$11,$11,$01,$01
.byte $10,$10,$10,$10,$10,$10,$10,$10
.byte $01,$01,$01,$01,$01,$01,$01,$01
.byte $0,$0,$0,$0,$11,$11,$11,$11
.byte $11,$11,$11,$11,0,0,0,0
.byte $10,$10,$10,$10,$11,$11,$11,$11
.byte $11,$11,$11,$11,$10,$10,$10,$10
.byte $01,$01,$01,$01,$11,$11,$11,$11
.byte $11,$11,$11,$11,$01,$01,$01,$01
.byte $10,$10,$11,$11,$11,$11,$10,$10 ;176
.byte $11,$11,$11,$11,$11,$11,$11,$11
.byte $01,$01,$11,$11,$11,$11,$01,$01
.byte $10,$10,$10,$10,$10,$10,$10,$10
;184 Fuel-Tank
;.byte 0,0,0,0,15,15,53,53
;.byte 0,0,255,255,255,255,185,185
;.byte 0,0,192,192,252,252,111,111
;.byte 239,239,111,111,239,239,107,107
;.byte 185,185,185,185,185,185,169,169
;.byte 55,55,53,53,55,55,55,55 ;190
;.byte 15,15,0,0,0,0,2,2 ;191
;.byte 255,255,136,136,136,136,170,170 ;192
;.byte 252,252,128,128,128,128,160,160
;.byte 32,32,168,168,8,8,42,42
;.byte 8,8,170,170,8,8,42,42
;.byte 2,2,10,10,8,8,42,42
Code: Alles auswählen
var1 = $a0
var2 = $a2
var3 = $a4
var4 = $a6
var5 = $a8
var6 = $b2
var7 = $b4
lms1 = $b6
lms2 = $b8
lmslo = $a0
lmshi = $a2
delay = $b0
play1 = $92
play2 = $94
play3 = $96
play4 = $98
miss1 = $c0
miss2 = $c2
miss3 = $c4
miss4 = $c6
rechts = $c8
links = $c9
xposp1 = $ca
yposp1 = $cb
joyst1 = $cc
kollp0 = $cd
xposm1 = $ce
yposm1 = $cf
xposm2 = $d0
yposm2 = $d1
xposm3 = $dc
yposm3 = $dd
kollm1 = $d2
kollm2 = $d3
feuer1 = $d4
feuer2 = $d5
yposm1hilf = $d6
feuer3 = $d7
feuer4 = $d8
yposm2hilf = $d9
feuer5 = $da
feuer6 = $db
blink = $de
blink2 = $df
ysonder = $e0
xschuss1 = $e1
yschuss1 = $e2
xschuss2 = $e4
yschuss2 = $e5
var8 = $e7
var9 = $e8
kollges = $f0
explosion1 = $f1
itemex = $f2
tank1exp = $f4
tank1pos = $f6
tank1x = $f8
tank1y = $fa
exp1 = $1900
exp2 = $1902
exp3 = $1904
exp4 = $1906
fuelzaehler = $1908
fuelzaehleritem = $1909
Code: Alles auswählen
LINZBS = $0000
CASINI = $0002
RAMLO = $0004
TRAMSZ = $0006
TSTDAT = $0007
WARMST = $0008
BOOT? = $0009
DOSVEC = $000a
DOSINI = $000c
APPMHI = $000e
POKMSK = $0010
BRKKEY = $0011
RTCLOK = $0012
BUFADR = $0015
ICCOMT = $0017
DSKFMS = $0018
DSKUTL = $001a
PTIMOT = $001c
PBPNT = $001d
PBUFSZ = $001e
PTEMP = $001f
ICHIDZ = $0020
ICDNOZ = $0021
ICCOMZ = $0022
ICSTAZ = $0023
ICBALZ = $0024
ICPTLZ = $0026
ICBLLZ = $0028
ICAX1Z = $002a
ICAX2Z = $002b
ICAX3Z = $002c
ICAX4Z = $002c
ICAX5Z = $002e
ICAX6Z = $002f
STATUS = $0030
CHKSUM = $0031
BUFRLO = $0032
BUFRHI = $0033
BFENLO = $0034
BFENHI = $0035
CRETRY = $0036
DRETRY = $0037
BUFRFL = $0038
RECVDN = $0039
XMTDON = $003a
CHKSNT = $003b
NOCKSM = $003c
BPTR = $003d
FTYPE = $003e
FEOF = $003f
FREQ = $0040
SOUNDR = $0041
CRITIC = $0042
FMZSPG = $0043
ZDRVA = $0045
ZSBA = $0047
ERRNO = $0049
CKEY = $004a
CASSBT = $004b
DSTAT = $004c
ATRACT = $004d
DRKMSK = $004e
COLRSH = $004f
TMPCHR = $0050
HOLD1 = $0051
LMARGN = $0052
RMARGN = $0053
ROWCRS = $0054
COLCRS = $0055
DINDEX = $0057
SAVMSC = $0058
OLDROW = $005a
OLDCOL = $005b
OLDCHR = $005d
OLDADR = $005e
NEWROW = $0060
NEWCOL = $0061
LOGCOL = $0063
ADRESS = $0064
MLTTMP = $0066
SAVADR = $0068
RAMTOP = $006a
BUFCNT = $006b
BUFSTR = $006c
BITMSK = $006e
SHFAMT = $006f
ROWAC = $0070
COLAC = $0072
ENDPT = $0074
DELTAR = $0076
DELTAC = $0077
ROWINC = $0079
COLINC = $007a
SWPFLG = $007b
HOLDCH = $007c
INSDAT = $007d
COUNTR = $007e
; hardware shadow registers
VDSLST = $0200
VPRCED = $0202
VINTER = $0204
VBREAK = $0206
VKEYBD = $0208
VSERIN = $020a
VSEROR = $020c
VSEROC = $020e
VTIMR1 = $0210
VTIMR2 = $0212
VTIMR4 = $0214
VIMIRQ = $0216
CDTMV1 = $0218
CDTMV2 = $021a
CDTMV3 = $021c
CDTMV4 = $021e
CDTMV5 = $0220
VVBLKI = $0222
VVBLKD = $0224
CDTMA1 = $0226
CDTMA2 = $0228
CDTMF3 = $022a
SRTIMR = $022b
CDTMF4 = $022c
INTEMP = $022d
CDTMF5 = $022e
SDMCTL = $022f
SDLSTL = $0230
SSKCTL = $0232
SPARE = $0233
LPENH = $0234
LPENV = $0235
BRKKY = $0236
CDEVIC = $023a
CCOMND = $023b
CAUX1 = $023c
CAUX2 = $023d
TEMP = $023e
ERRFLG = $023f
DFLAGS = $0240
DBSECT = $0241
BOOTAD = $0242
COLDST = $0244
DSKTIM = $0246
LINBUF = $0247
GPRIOR = $026f
PADDL0 = $0270
PADDL1 = $0271
PADDL2 = $0272
PADDL3 = $0273
PADDL4 = $0274
PADDL5 = $0275
PADDL6 = $0276
PADDL7 = $0277
STICK0 = $0278
STICK1 = $0279
STICK2 = $027a
STICK3 = $027b
PTRIG0 = $027c
PTRIG1 = $027d
PTRIG2 = $027e
PTRIG3 = $027f
PTRIG4 = $0280
PTRIG5 = $0281
PTRIG6 = $0282
PTRIG7 = $0283
STRIG0 = $0284
STRIG1 = $0285
STRIG2 = $0286
STRIG3 = $0287
CSTAT = $0288
WMODE = $0289
BLIM = $028a
TXTROW = $0290
TXTCOL = $0291
TINDEX = $0293
TXTMSC = $0294
TXTOLD = $0296
TMPX1 = $029c
HOLD3 = $029d
SUBTMP = $029e
HOLD2 = $029f
DMASK = $02a0
TMPLBT = $02a1
ESCFLG = $02a2
TABMAP = $02a3
LOGMAP = $02b2
INVFLG = $02b6
FILFLG = $02b7
TMPROW = $02b8
TMPCOL = $02b9
SCRFLG = $02bb
HOLD4 = $02bc
HOLD5 = $02bd
SHFLOK = $02be
BOTSCR = $02bf
PCOLR0 = $02c0
PCOLR1 = $02c1
PCOLR2 = $02c2
PCOLR3 = $02c3
COLOR0 = $02c4
COLOR1 = $02c5
COLOR2 = $02c6
COLOR3 = $02c7
COLOR4 = $02c8
; IO space
RUNAD = $02e0
INITAD = $02e2
RAMSIZ = $02e4
MEMTOP = $02e5
MEMLO = $02e7
DVSTAT = $02ea
CBAUDL = $02ee
CBAUDH = $02ef
CRSINH = $02f0
KEYDEL = $02f1
CH1 = $02f2
CHACT = $02f3
CHBAS = $02f4
CHAR = $02fa
ATACHR = $02fb
CH = $02fc
FILDAT = $02fd
DSPFLG = $02fe
SSFLAG = $02ff
DDEVIC = $0300
DUNIT = $0301
DCOMND = $0302
DSTATS = $0303
DBUFLO = $0304
DBUFHI = $0305
DTIMLO = $0306
DUNUSE = $0307
DBYTLO = $0308
DBYTHI = $0309
DAUX1 = $030a
DAUX2 = $030b
TIMER1 = $030c
ADDCOR = $030e
CASFLG = $030f
TIMER2 = $0310
TEMP1 = $0312
TEMP2 = $0314
TEMP3 = $0315
SAVIO = $0316
TIMFLG = $0317
STACKP = $0318
TSTAT = $0319
HATABS = $031a
IOCB0 = $0340
IOCB1 = $0350
IOCB2 = $0360
IOCB3 = $0370
IOCB4 = $0380
IOCB5 = $0390
IOCB6 = $03a0
IOCB7 = $03b0
PRNBUF = $03c0
CASBUF = $03fd
; GTIA write locations
HPOSP0 = $d000
HPOSP1 = $d001
HPOSP2 = $d002
HPOSP3 = $d003
HPOSM0 = $d004
HPOSM1 = $d005
HPOSM2 = $d006
HPOSM3 = $d007
SIZEP0 = $d008
SIZEP1 = $d009
SIZEP2 = $d00a
SIZEP3 = $d00b
SIZEM = $d00c
GRAFP0 = $d00d
GRAFP1 = $d00e
GRAFP2 = $d00f
GRAFP3 = $d010
GRAFM = $d011
COLPM0 = $d012
COLPM1 = $d013
COLPM2 = $d014
COLPM3 = $d015
COLPF0 = $d016
COLPF1 = $d017
COLPF2 = $d018
COLPF3 = $d019
COLBK = $d01a
PRIOR = $d01b
VDELAY = $d01c
GRACTL = $d01d
HITCLR = $d01e
CONSOL = $d01f
; GTIA read locations
M0PF = $d000
M1PF = $d001
M2PF = $d002
M3PF = $d003
P0PF = $d004
P1PF = $d005
P2PF = $d006
P3PF = $d007
M0PL = $d008
M1PL = $d009
M2PL = $d00a
M3PL = $d00b
P0PL = $d00c
P1PL = $d00d
P2PL = $d00e
P3PL = $d00f
TRIG0 = $d010
TRIG1 = $d011
TRIG2 = $d012
TRIG3 = $d013
PAL = $d014
; POKEY write locations
AUDF1 = $d200
AUDC1 = $d201
AUDF2 = $d202
AUDC2 = $d203
AUDF3 = $d204
AUDC3 = $d205
AUDF4 = $d206
AUDC4 = $d207
AUDCTL = $d208
STIMER = $d209
SKREST = $d20a
POTGO = $d20b
SEROUT = $d20d
IRQEN = $d20e
SKCTL = $d20f
; POKEY read locations
POT0 = $d200
POT1 = $d201
POT2 = $d202
POT3 = $d203
POT4 = $d204
POT5 = $d205
POT6 = $d206
POT7 = $d207
ALLPOT = $d208
KBCODE = $d209
RANDOM = $d20a
SERIN = $d20d
IRQST = $d20e
SKSTAT = $d20f
; PIA
PORTA = $d300
PORTB = $d301
PACTL = $d302
PBCTL = $d303
; ANTIC write locations
DMACTL = $d400
CHACTL = $d401
DLISTL = $d402
DLISTH = $d403
HSCROL = $d404
VSCROL = $d405
PMBASE = $d407
CHBASE = $d409
WSYNC = $d40a
NMIEN = $d40e
NMIRES = $d40f
; ANTIC read locations
VCOUNT = $d40b
PENH = $d40c
PENV = $d40d
NMIST = $d40f
NMIEN_DLI = $80
NMIEN_VBI = $40
; vector tables
EDITRV = $e400
SCRENV = $e410
KEYBDV = $e420
PRINTV = $e430
CASETV = $e440
DISKIV = $e450
DSKINV = $e453
CIOV = $e456
SIOV = $e459
SETVBV = $e45c
SYSVBV = $e45f
XITVBV = $e462
SIOINV = $e465
SENDEV = $e468
INTINV = $e46b
CIOINV = $e46e
BLKBDV = $e471
WARMSV = $e474
COLDSV = $e477
RBLOKV = $e47a
CSOPIV = $e47d
- pps
- Beiträge: 566
- Registriert: 18.06.2021 23:05
- Has thanked: 122 times
- Been thanked: 225 times
- Kontaktdaten:
Re: Return to Phobos
Hallo Peter,
ich habe nur ein paar kleine Dinge geändert und auch 2, 3 Hinweise hinzugefügt. Ich denke der Unterschied ist schnell zu sehen und Du kannst das selbst nach Deinem Gutdünken ausweiten. Aber das Teilen und in Prozeduren packen hilft ungemein bei größeren Projekten. Wie man ein Label in einer anderen Prozedur ansprechen kann, sieht man bei einigen jsr fuel.fuelex aufrufen.
Bei "go lucky" und "runfast" habe ich da auch ordentlich Code in halbwegs übersichtliche Dateien packen können. So konnte ich auch viel Code von "go lucky" direkt bei "runfast" wieder verwenden. Das hat die Entwicklung enorm beschleunigt.
Viel Spaß beim weitercoden
Ich hoffe, Dir das nun ein wenig leichter gemacht zu haben.
Ralf
PS: Die erste Zeile in den ausgelagerten Dateien sorgt dafür, dass man dort direkt das gesamte Programm assemblieren kann.
ich habe nur ein paar kleine Dinge geändert und auch 2, 3 Hinweise hinzugefügt. Ich denke der Unterschied ist schnell zu sehen und Du kannst das selbst nach Deinem Gutdünken ausweiten. Aber das Teilen und in Prozeduren packen hilft ungemein bei größeren Projekten. Wie man ein Label in einer anderen Prozedur ansprechen kann, sieht man bei einigen jsr fuel.fuelex aufrufen.
Bei "go lucky" und "runfast" habe ich da auch ordentlich Code in halbwegs übersichtliche Dateien packen können. So konnte ich auch viel Code von "go lucky" direkt bei "runfast" wieder verwenden. Das hat die Entwicklung enorm beschleunigt.
Viel Spaß beim weitercoden
![Wink ;)](./images/smilies/icon_e_wink.gif)
Ralf
PS: Die erste Zeile in den ausgelagerten Dateien sorgt dafür, dass man dort direkt das gesamte Programm assemblieren kann.
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Guten Morgen Ralf,
vielen Dank für deine Mühe und Arbeit.
Größere Abschnitte sinnvoll auszulagern macht auf jeden Fall Sinn - also auch der VBI.
An der DList muss ich noch ein wenig rumschrauben... wahrscheinlich kommt da auch noch ein Interrupt rein.
Der VBI ist zu lang, da muss ich noch kürzen... was unheimlich aufwendig als Code geworden ist, ist das Blinken des Raumschiffes. Das muss viel einfacher gehen. Auch mit den Schüssen bin ich nicht so ganz zufrieden - ich wollte es so programmieren, das die Schüsse nur abwechselnd ausgelöst werden können, vielleicht muss ich da noch einen anderen Weg gehen.
Das Printen der letzten Reihe (ist nicht im VBI) ist zu aufwendig, das muss ich auch ändern, ich habe da auch schon eine gute Idee.
Ein großer Knackpunkt ist auch die genaue Kollisionserkennung... da habe ich richtig viel Code reingesteckt und es läuft immer noch nicht 100% ig richtig. Das werde ich auch komplett umbauen. Eigentlich geht es da ja hauptsächlich um die korrekte x-Position des getroffenen Items - sowohl die x als auch die y-Position habe ich beim printen - vielleicht speicher ich das einfach zwischen und greife dann bei der Kollision darauf zurück und muss nur die y-Position ändern - die habe ich ja aber zum Zeitpunkt der Kollision........
Jetzt baue ich aber zunächst die Landschaft weiter aus und die anderen Items, damit ich die Landschaft befüllen kann - dann kümmere ich mich um die Codeverbesserungen und Fehlerbereinigungen.
Ideen und Codefehler-/Optimierungsvorschläge sind auf jeden Fall gerne gesehen!
Für mich dient dieses Projekt in erster Linie, um Spaß beim programmieren zu haben und um zu lernen... wenn ich meine Anfänge im August 2021 ("Hallo Welt") mit dem Fortschritt jetzt vergleiche, dann bin ich mehr als zufrieden!
LG Peter
vielen Dank für deine Mühe und Arbeit.
Größere Abschnitte sinnvoll auszulagern macht auf jeden Fall Sinn - also auch der VBI.
An der DList muss ich noch ein wenig rumschrauben... wahrscheinlich kommt da auch noch ein Interrupt rein.
Der VBI ist zu lang, da muss ich noch kürzen... was unheimlich aufwendig als Code geworden ist, ist das Blinken des Raumschiffes. Das muss viel einfacher gehen. Auch mit den Schüssen bin ich nicht so ganz zufrieden - ich wollte es so programmieren, das die Schüsse nur abwechselnd ausgelöst werden können, vielleicht muss ich da noch einen anderen Weg gehen.
Das Printen der letzten Reihe (ist nicht im VBI) ist zu aufwendig, das muss ich auch ändern, ich habe da auch schon eine gute Idee.
Ein großer Knackpunkt ist auch die genaue Kollisionserkennung... da habe ich richtig viel Code reingesteckt und es läuft immer noch nicht 100% ig richtig. Das werde ich auch komplett umbauen. Eigentlich geht es da ja hauptsächlich um die korrekte x-Position des getroffenen Items - sowohl die x als auch die y-Position habe ich beim printen - vielleicht speicher ich das einfach zwischen und greife dann bei der Kollision darauf zurück und muss nur die y-Position ändern - die habe ich ja aber zum Zeitpunkt der Kollision........
Jetzt baue ich aber zunächst die Landschaft weiter aus und die anderen Items, damit ich die Landschaft befüllen kann - dann kümmere ich mich um die Codeverbesserungen und Fehlerbereinigungen.
Ideen und Codefehler-/Optimierungsvorschläge sind auf jeden Fall gerne gesehen!
Für mich dient dieses Projekt in erster Linie, um Spaß beim programmieren zu haben und um zu lernen... wenn ich meine Anfänge im August 2021 ("Hallo Welt") mit dem Fortschritt jetzt vergleiche, dann bin ich mehr als zufrieden!
LG Peter
- Sleeπ
- Beiträge: 1642
- Registriert: 18.06.2021 20:58
- Has thanked: 105 times
- Been thanked: 322 times
- Kontaktdaten:
Re: Return to Phobos
Das kannst Du auch sein! Respekt.
![Smile :-)](./images/smilies/icon_e_smile.gif)
![Rolling Eyes :roll:](./images/smilies/icon_rolleyes.gif)
Sleeπ
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Hallo!
Ich nutze in meinem Programm viele Subroutinen und würde Deine "Blinkroutine" entsprechend so ändern:
Bei mir funktioniert es.
Ist jetzt nur ein Beispiel, wie man den Code kürzen kann.
Grüße
Janko
Ich nutze in meinem Programm viele Subroutinen und würde Deine "Blinkroutine" entsprechend so ändern:
Code: Alles auswählen
blinklinks ldy yposm3
lda #0
sta (miss1),y
mva hposp0 xposm3
lda yposp1
clc
adc #6
tay
lda #48
sta (miss1),y
mva xposp1 p2pf
mva xposp1 xposm3
sty yposm3
rts
blinkrechts ldy yposm3
lda #0
sta (miss1),y
lda yposp1
clc
adc #6
tay
lda #192
sta (miss1),y
lda xposp1
clc
adc #14
sta p3pf
mva xposp1 xposm3
sty yposm3
rts
write
lda xposp1 ;Blinkabschnitt
sta hposp0
adc #2
sta hposp3
#if .byte blink<#64 ;Blink links
jsr blinklinks
#end
#if .byte blink>#63 .and .byte blink<#128 ;Blink rechts
jsr blinkrechts
#end
#if .byte blink>#127 .and .byte blink<#192 ;Blink links
jsr blinklinks
#end
#if .byte blink>#191 .and .byte blink<#255 ;Blink rechts
jsr blinkrechts
#end
Ist jetzt nur ein Beispiel, wie man den Code kürzen kann.
Grüße
Janko
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... ich habe beide Änderungen eingebaut und noch den kleinen zusätzlichen Fehler beseitigt, der mich schon die ganze Zeit nervt - nämlich daß durch den Blinker immer mal wieder ein paar Bits auf dem Screen stehenbleiben - bei der Abfrage statt > und < einfach ein >= und <= ersetzt und schon ist es weg - logisch.
Ansonsten finde ich die neue Blinkerroutine schlanker und strukturierter... supi. Auch den VBI auszulagern macht Sinn. Der VBI muss aber noch ein wenig schlanker werden, ein paar Sachen sollen da ja noch rein und die Sounds fehlen ja auch noch komplett.
Außerdem muss ich den Aufbau der letzten Reihe noch optimieren..das hatte ich schon vorgestern deutlich besser und schlanker umgesetzt, aber nachts um 1:30 war dann mit meiner Konzentration Schluss und den einen Fehler habe ich einfach nicht wegbekommen und es wurde immer schlimmer, so daß ich auf meine alte Routine zurückgegangen bin und diese dann erweitert habe. Auch muss ich mir Gedanken machen, wie ich das so gestalte, daß ich die letzte Reihe einfacher konstruieren kann... so ist es ganz schön mühsam... vielleicht baue ich mit extra dafür ein kleines Programm welches übersichtlicher die Landschaft bauen läßt...
... gerade noch einen kleinen Bug in der Routine der letzten Reihe fixiert... da war ein inc var5 zu viel... jetzt läuft es ganz ohne Fehler![Cool 8-)](./images/smilies/icon_cool.gif)
Ansonsten finde ich die neue Blinkerroutine schlanker und strukturierter... supi. Auch den VBI auszulagern macht Sinn. Der VBI muss aber noch ein wenig schlanker werden, ein paar Sachen sollen da ja noch rein und die Sounds fehlen ja auch noch komplett.
Außerdem muss ich den Aufbau der letzten Reihe noch optimieren..das hatte ich schon vorgestern deutlich besser und schlanker umgesetzt, aber nachts um 1:30 war dann mit meiner Konzentration Schluss und den einen Fehler habe ich einfach nicht wegbekommen und es wurde immer schlimmer, so daß ich auf meine alte Routine zurückgegangen bin und diese dann erweitert habe. Auch muss ich mir Gedanken machen, wie ich das so gestalte, daß ich die letzte Reihe einfacher konstruieren kann... so ist es ganz schön mühsam... vielleicht baue ich mit extra dafür ein kleines Programm welches übersichtlicher die Landschaft bauen läßt...
... gerade noch einen kleinen Bug in der Routine der letzten Reihe fixiert... da war ein inc var5 zu viel... jetzt läuft es ganz ohne Fehler
![Cool 8-)](./images/smilies/icon_cool.gif)
Zuletzt geändert von Dr. Irata am 06.01.2022 17:38, insgesamt 1-mal geändert.
- Kveldulfur
- Beiträge: 649
- Registriert: 17.08.2021 02:32
- Has thanked: 250 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Return to Phobos
Ich habe die komplette Joystickabfrage und Bewegung des Players ausserhalb des VBI.
Als erstes wird der Joystick abgefragt, dann die neue Position berechnet.
Nun warte ich auf einen VSync (also dass das Bild gerade nicht aufgebaut wird) und positioniere meinen Player.
Die Routine schaut, welche Bildschirmzeile gerade aufgebaut wird. Ist der Wert kleiner $68 warte ich auf darauf, dass dieser Wert überschritten wird. Ist der Wert bereits über $68, warte ich erst einmal, dass dieser kleiner $68 ist.
Der Wert $68 kommt daher, dass mein Spielfeld nicht bis nach ganz unten reicht und ich somit mehr Zeit für die Playerdarstellung habe.
Vielleicht kannst Du das irgendwie nutzen?
Als erstes wird der Joystick abgefragt, dann die neue Position berechnet.
Nun warte ich auf einen VSync (also dass das Bild gerade nicht aufgebaut wird) und positioniere meinen Player.
Code: Alles auswählen
; ############################################################################
; # VSync
; #
.proc WaitVSync
lda VCOUNT
cmp #$68
bcc @+1
@ lda VCOUNT
cmp #$68
bcs @-
@ lda VCOUNT
cmp #$68
bcc @-
rts
.end
Der Wert $68 kommt daher, dass mein Spielfeld nicht bis nach ganz unten reicht und ich somit mehr Zeit für die Playerdarstellung habe.
Vielleicht kannst Du das irgendwie nutzen?
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Hallo Janko,
das schaue ich mir mal später an.... das würde natürlich den VBI deutlich entlasten.
Liebe Dank!!
das schaue ich mir mal später an.... das würde natürlich den VBI deutlich entlasten.
Liebe Dank!!
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
Ich habe jetzt die anderen Items programmiert und dabei leider feststellen müssen, daß ich zu leichtfertig mit der Anzahl der Charakter umgegangen bin, denn plötzlich war b ei 128 Schluß... also ran ans Werk, optimieren und umprogrammieren. Danach ging es an die restlichen Items und danach habe ich die Landschaft weiter ausgebaut...
Nun werde ich die nächsten Tage und Wochen weiter an der Landschaft arbeiten, dann kommen noch Kollisionsabfragen und Aktionen auf die Kollisionen und weitere Items, die aktiv und animiert sind... danach Sound - ein noch riesiger Brocken! Das Projekt wächst und macht Spass...
Ein kleiner aktueller Stand anbei:
Nun werde ich die nächsten Tage und Wochen weiter an der Landschaft arbeiten, dann kommen noch Kollisionsabfragen und Aktionen auf die Kollisionen und weitere Items, die aktiv und animiert sind... danach Sound - ein noch riesiger Brocken! Das Projekt wächst und macht Spass...
Ein kleiner aktueller Stand anbei:
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... ich war trotz wenig Zeit nicht untätig!
Bevor ich den Sound angehe, gibt es noch etliches an Code Bereinigung!
Der VBI muss schlanker und ich habe zunächst mit dem Blinker des Raumschiffes begonnen.
Für den Blinker hatte ich ursprünglich 2 Missiles benutzt und die im VBI aufwendig abwechselnd blinken lassen. Dadurch habe ich aber auch nur noch 2 Missiles für die Schüsse übrig.
Ich habe das jetzt umprogrammiert und nehme zum blinken einfach einen weiteren Player, der am Raumschiff das Blinken übernimmt. Dadurch kann ich noch eine weitere Farbe ins Raumschiff bringen.
Der ganze Code wird dadurch schon etwas schlanker. Anschließend habe ich fast den gesamten Blinkcode aus dem VBI ins Hauptprogramm gezogen und die ganzen zeitaufwendigen IF - Abfragen sind jetzt im Hauptcode.
Jetzt kann ich den Code für die Schüsse umbauen - damit war ich noch nie so richtig zufrieden - außerdem sollen jetzt alle 4 Missiles als Schüsse benutzbar werden - auch den Code versuche ich wenn es geht auszulagern....
Liebe Grüße
Peter
Bevor ich den Sound angehe, gibt es noch etliches an Code Bereinigung!
Der VBI muss schlanker und ich habe zunächst mit dem Blinker des Raumschiffes begonnen.
Für den Blinker hatte ich ursprünglich 2 Missiles benutzt und die im VBI aufwendig abwechselnd blinken lassen. Dadurch habe ich aber auch nur noch 2 Missiles für die Schüsse übrig.
Ich habe das jetzt umprogrammiert und nehme zum blinken einfach einen weiteren Player, der am Raumschiff das Blinken übernimmt. Dadurch kann ich noch eine weitere Farbe ins Raumschiff bringen.
Der ganze Code wird dadurch schon etwas schlanker. Anschließend habe ich fast den gesamten Blinkcode aus dem VBI ins Hauptprogramm gezogen und die ganzen zeitaufwendigen IF - Abfragen sind jetzt im Hauptcode.
Jetzt kann ich den Code für die Schüsse umbauen - damit war ich noch nie so richtig zufrieden - außerdem sollen jetzt alle 4 Missiles als Schüsse benutzbar werden - auch den Code versuche ich wenn es geht auszulagern....
Liebe Grüße
Peter
- Dr. Irata
- Beiträge: 946
- Registriert: 24.08.2021 14:40
- Has thanked: 113 times
- Been thanked: 275 times
- Kontaktdaten:
Re: Return to Phobos
... die letzten Tage konnte ich endlich meinen Atari-Raum einrichten - noch ist es nicht fertig, aber ich habe schon mal meinen 130 XE aufgebaut, die Fujinet drangehängt, mit meinem Netzwerk verbunden und dann direkt mit meinem Mac das Programm retrun2phobos.xex gestartet... und es läuft. Das war der erste Test meines Programmes auf einem original Atari-Rechner.
- Sleeπ
- Beiträge: 1642
- Registriert: 18.06.2021 20:58
- Has thanked: 105 times
- Been thanked: 322 times
- Kontaktdaten:
Re: Return to Phobos
Sehr praktisch - programmieren auf dem Äpfelchen und testen direkt auf originaler Hardware ohne die Dateien erst hin-und herzukopieren. ![Cool 8-)](./images/smilies/icon_cool.gif)
![Cool 8-)](./images/smilies/icon_cool.gif)
Sleeπ
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast