Software-Sprites

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Software-Sprites

Beitrag von Dr. Irata »

Ich beschäftige mich gerade bei meiner Vorbereitung von CavernsOfEris mit Software-Sprites.
Das ist schon etwas kompliziertere Programmiertechnik, die ich noch nicht vollständig verstehe.
Es gibt auch hier im Forum keine Informationen zu dem Thema, in anderen Foren sieht es eher marginal aus.
Am Ende soll ein Assembler-Code rauskommen, den man in sein Programm einbauen kann und erweitern kann.
Dabei soll man später mehrere Sprites erstellen können, die auch bewegt werden.
Zusätzlich soll die Kollisionserkennung diskutiert werden und das Ganze soll für Bitmap und Charaktergrafik funktionieren.

Ein ambitioniertes umfangreiches und kompliziertes Thema, wo ich jeden einlade hier aktiv mit eigenen Ideen teilzunehmen.

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von pps »

Peter,
es gibt in den Beispielen vom MADS auch Software Sprites. Allerdings sind dort oft viele der MADS Features genutzt und wenn überhaupt in Polnisch kommentiert. Das macht es nicht unbedingt einfach es zu verstehen. Aber schauen kostet nix ;)
Gruß, Ralf
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

die Beispiele von MADS... wo finde ich die denn??

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von pps »

Im originalen Archiv sind Sie drin. Bei WUDSN "no install" waren Sie mal im Ordner, wo die Assembler mit drin sind.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

finde ich nicht auf WUDSN

Benutzeravatar
DjayBee
Beiträge: 625
Registriert: 17.08.2021 04:02
Has thanked: 384 times
Been thanked: 175 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von DjayBee »

pps hat geschrieben:
01.07.2022 16:43
Im originalen Archiv sind Sie drin. Bei WUDSN "no install" waren Sie mal im Ordner, wo die Assembler mit drin sind.
Meinst du da?
C:\jac\wudsn\Tools\ASM\MADS\examples
Dort befindet sich auch die kleine IO-Bibliothek mit deren Hilfe man Dateien fast wie aus BASIC bearbeiten kann.

Btw.: Wo finden sich eigentlich Binaries von neuen MADS-Versionen?
Ich finde auf Tebes Seite immer nur den Quellcode.

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von pps »

DjayBee hat geschrieben:
01.07.2022 18:07
Meinst du da?
C:\jac\wudsn\Tools\ASM\MADS\examples
Dort befindet sich auch die kleine IO-Bibliothek mit deren Hilfe man Dateien fast wie aus BASIC bearbeiten kann.
Ganz genau dort meine ich ;)
Btw.: Wo finden sich eigentlich Binaries von neuen MADS-Versionen?
Ich finde auf Tebes Seite immer nur den Quellcode.
https://mads.atari8.info/ ist die offizielle Webseite. Gleich oben findet man den Link zum Download. Auch wenn im github was von
Source code (zip)
steht, ist darin auch die mads.exe enthalten (und natürlich auch die examples).
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Software-Sprites

Beitrag von Dr. Irata »

... nachdem ich also nun das Parallax für mich erarbeitet habe und eine schöne lauffähige Version auch für mein zukünftiges Spiel habe, kann ich die Softwaresprites weiterentwickeln.
Prinzipiell könnte ich auch allein mit PM-Grafik arbeiten und könnte die Einschränkungen gut in Kauf nehmen - ich möchte das aber durchdringen und ich möchte erlernen, wie man mit den Sprites hier in Assembler arbeiten kann!
Ich mache es mir auch gleich etwas schwerer, denn die Sprites sollen sich nicht nur über eine Landschaft bewegen, sondern sich auch über meine scrollende Landschaft frei steuerbar bewegen können... ich denke das wird dann noch eine Ecke komplizierter. Außerdem soll die Routine mindestens 4-6 Softwaresprites gleichzeitig bewegen können...

Let´s go....

wosch
Beiträge: 489
Registriert: 17.08.2021 21:16
Wohnort: Reutlingen
Has thanked: 454 times
Been thanked: 142 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von wosch »

War nicht in einer der von mir abgescannten CK was von PFinzel über SW-Sprites :?:

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

kannst du den Link dafür hier nochmal reinstellen bitte 🙏

wosch
Beiträge: 489
Registriert: 17.08.2021 21:16
Wohnort: Reutlingen
Has thanked: 454 times
Been thanked: 142 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von wosch »

War ein Fehler von mir.
Sind keine SW-Sprites sondern SW-Blitter. sorry.
Gruß
Wolfgang

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

schade

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

... ich starte mal mit ein paar Vorüberlegungen:

Was muss ein Softwaresprite primär machen? Gehen wir mal von einer ganz einfachen Antic 2 Grafik aus, die mit Zeichen vollgeschrieben ist. Kein Scrolling. Nun soll ein weiteres Zeichen quasi als Sprite durch die Gegend fliegen.

Wenn wir jetzt mal das Feinscrolling dieses Sprites außer Acht lassen und es nur quasi grobscrollen wollen, dann muss man immer vor einer Bewegung den nächsten Bildschirmbereich zunächst sichern, dann den Bereich wo das Sprite reingehen soll eben mit diesem Wert überschreiben und den Bereich des Bildschirmes, wo der Sprite rausgeht wieder mit der Sicherung davor zurückschreiben (wir brauchen also zwei Sicherungen).
Das wars eigentlich.
Wenn ich nun ein Feinscroll mit einbauen will (was natürlich schöner ist), dann muss ich also dieses Feinscroll selber für mein Sprite machen. Ich brauche dann für mein 8 Bit breites Sprite wenn ich mal nur die horizontale Bewegung betrachte 16 Zustände - nämlich einmal 8 Bit komplett z.B. nach links verschoben. Diese Zustände printe ich dann jeweils in die Bildschirmstellen ein, je nach Lage bzw. Zustand des Sprites. Kommt jetzt noch das vertikale Scrolling dazu, brauche ich nochmal - am Ende habe ich wohl 16x16 Zustände! Damit läßt sich dann ein Zeichen quasi als Softwaresprite feingescrollt über den Bildschirm bewegen. Das scrollt dann auch quasi in Maximalauflösung von 320/192 über den Bildschirm.

Wenn man das so macht, wird man allerdings immer einen Schatten um das Objekt haben, da der Originalbildschirmhintergrund immer gelöscht wird - selbst wenn das Objekt gerade erst in den neuen Bereich reinfliegt. Um das ohne Schatten hinzubekommen muss man wohl vorher den Aufwand treiben jedesmal vorher den Hintergrund zu speichern, dann mit der Maske (ich glaube das ist der inverse Sprite) mit dem Hintergrund eine AND Verknüpfung durchzuführen und dann mit dem eigentlichen Sprite eine EOR Verknüpfung zu machen... das werde ich zunächst nicht machen und den Schatten in Kauf nehmen. Die aufwendigen Verknüpfungen kommen später, wenn das erste Softwaresprite "fliegt"... wir entwickeln das hier ganz langsam und Stück für Stück...

Außerdem betrachten wir gleich den Antic D Modus. Hat den Vorteil der schönen Farben und der geringeren Auflösung von 160x96 ... für eine recht flüssige Bewegung sollte das aber gut ausreichen. Wir lassen auch erstmal nur einen einzigen Sprite fliegen, der dann ja nur 4 Bit breit ist.
Das ganze wird dann gleich in meinen Parallax-Bildschirm eingebunden...

Für Anregungen und anregenden Austausch hier wäre ich sehr erfreut...

Peter

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

nun wollte ich doch mal zum Start einen einfachen SoftwareSprite in Antic 2 darstellen.
Das Programm ist recht einfach: Displaylist für Antic 2 aufbauen, Bildschirm komplett füllen, 4 Subroutinen für die Bewegung nach re./li./oben/unten schreiben, eine kleine ganz einfache Zufallslogik für die Bewegung reinbringen - fertig.
Das Aufwendigste war die Logik für die Bewegung... ich habe ein Warteschleife drin, die Bewegung nach re. und li. wird mit Warteschleife immer 3x ausgeführt,damit es nicht nur wie ein zucken aussieht. Die Bewegung nach oben und unten jeweils 1x.
Die neue Position lasse ich berechnen und habe auf eine Tabelle verzichtet.

Gruß
Peter
ssprites.MOV
(2.1 MiB) 45-mal heruntergeladen

Code: Alles auswählen

			org $1000
			
			;icl '../hardware.txt'
			
display =230
speichern1 = 232			; Hintergrund wo der Sprite steht
speichern2 = 234			; Hintergrund wo der Sprite hingeht

delay = 240
rtclok = 18	
random = 53770
		
			.proc main
			
			mwa #39936 display		;--- hier fängt die Bildschirmadresse an 0,156 = 256x156
			mwa #dlist 560	
			
		
			ldx #0				;Bildschirm füllen
			ldy #0
@			lda #7
			sta speichern1
			sta (display),y
			iny
			bne @-
			inc display+1
			clc
			inx
			cpx #4
			bne @-
			mva #157 display+1
			ldy #0
			
;--------------------------Hauptprogramm----------------------------


loop		
									;Bewegung nach re./li. wird 3x ausgeführt
			#if .byte random>#150
			jsr nachlinks
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			jsr nachlinks
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			jsr nachlinks
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			#end
			#if .byte random<#101
			jsr nachrechts
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			jsr nachrechts
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			jsr nachrechts
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			#end
									;Bewegung nach unten/oben wird einmal ausgeführt
			#if .byte random>#230
			jsr nachunten
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			#end
			#if .byte random<#10
			jsr nachoben
			lda #33
			sta (display),y
			mva #5 delay
			jsr wartes
			#end
			
			
			jmp loop		
			
			.endp
;--------------------------Subroutinen------------------------------


			.proc nachoben
			
			ldy #0
			lda speichern1
			sta (display),y
			sec
			lda display
			sbc #40
			sta display
			lda display+1
			sbc #0
			sta display+1
			lda (display),y
			sta speichern1
			rts
			.endp
			.proc nachunten
			
			ldy #0
			lda speichern1
			sta (display),y
			clc
			lda display
			adc #40
			sta display
			lda display+1
			adc #0
			sta display+1
			lda (display),y
			sta speichern1
			rts
			.endp
			.proc nachrechts
			ldy #0
			lda speichern1
			sta (display),y
			clc
			lda display
			adc #1
			sta display
			lda display+1
			adc #0
			sta display+1
			lda (display),y
			sta speichern1
			rts
			.endp
			
			.proc nachlinks
			ldy #0
			lda speichern1
			sta (display),y
			sec
			lda display
			sbc #1
			sta display
			lda display+1
			sbc #0
			sta display+1
			lda (display),y
			sta speichern1
			
			rts		
			
			.endp
			
			
			.proc wartes
			clc
 		   	ldx delay ; Warteschleife
st  		
			lda RTCLOK+2
			
wa   
			cmp RTCLOK+2 
        	beq wa 
        	
        	dex            
        	bpl st 
        	rts
     		.endp   
			
dlist		.by 112,112,112
			.by 66,0,156
:23			.by 2
			.by 65
			.wo dlist
					
			
			
			
			
			
			
			run main

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

... jetzt habe ich diesen einfachen Sprite etwas umgeschrieben, die Random-Steuerung ist raus, der Sprite wird mit dem Joystick bewegt.
Außerdem habe ich alles auf Antic D mit meiner speziellen Displaylist (die fürs Parallax) umgeschrieben.
ssprite2.MOV
(2.22 MiB) 45-mal heruntergeladen
als nächstes mache ich diesen Sprite noch dicker und etwas breiter - ich denke es sollten max. 6-8 kleine Einheiten dann einen großen SSprite bilden.
Dazu kommt dann noch ein Feinscroll in horizonter Richtung...

Benutzeravatar
DjayBee
Beiträge: 625
Registriert: 17.08.2021 04:02
Has thanked: 384 times
Been thanked: 175 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von DjayBee »

Passend zu deinen Sprites gibt es auf AtariAge gerade einen Thread zur Berechnung von Kollissionen.

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

lieben Dank für den Hinweis, da werde ich mal stöbern, wenn bei dem Punkt Kollisionen bin... das war schon bei der PM Grafik nicht so easy!!
Prinzipiell überlege ich mir folgendes (um weitere Probleme zu vermeiden):

Der eigene Player wird aus 4 Player - also 4-farbig zusammengesetzt, er bekommt 4 Missiles.
Die Gegner bestehen aus Softwaresprites (ich hoffe auf mind. 4 auf einmal), die Schüsse werden auch SSprites. Alle nötigen Kollisionen erreiche ich dann durch PM-Kollisionserkennung.
Dann spare ich mir die relativ aufwendige Berechnung der Softwaresprite-Kollisionen
Gruß
Peter

Benutzeravatar
Olix
Beiträge: 987
Registriert: 17.08.2021 07:06
Has thanked: 117 times
Been thanked: 405 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Olix »

Keine Ahnung ob das was für dich ist, aber von Titel her passt es zum Thema:

"Hi-Res PUT and GET Animation without Player/Missiles" aus ANTIC VOL. 8, NO. 4 / AUGUST 1989
https://www.atarimagazines.com/v8n4/hiresputget.html

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

Hallo Olix,
vielen Dank für den Link... sehr interessant aber nur bedingt für mich verwertbar.

Am WE ging leider nicht viel, daher hatte ich erst heute 2 Stunden Programmierzeit.
Ich habe ein wenig an den Softwaresprites gearbeitet und die flüssige Animation jetzt drin.
Das Video anbei sieht sicherlich nicht spektakulär aus, das Programm dahinter leistet aber schon eine ganze Menge.

Der gesamte Bildschirm ist gefüllt - damit man was erkennt mit immer dem gleichen Wert. Ein einzelner Sprite wird per Joystick in alle Richtungen gesteuert - letztlich also ein Sprite, der über dem Bildschirm saust, ohne ihn "kaputt" zu machen.
Das funktioniert also schon mal. Man kann jetzt den Code noch erweitern und mehrere kleine Sprites zu einem größeren zusammenzubauen. Theoretisch könnte man nun ganz viele davon über den Bildschirm steuern lassen, hier begrenzt nur die Rechenkapazität das ganze Geschehen...

Wenn man davon ausgeht, daß ein größerer Teil des Bildschirmes über den der Sprite saust leer ist, dann stört vielleicht der Schatten nicht, will man den Schatten verhindern, muss man die Sprites nicht einfach nur überschreiben, sondern mit dem Bildschirminhalt fusionieren... darum kümmern wir uns dann im nächsten Schritt...

Gruß
Peter
ssprite5.MOV
(2.12 MiB) 56-mal heruntergeladen

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

... jetzt hatte ich doch noch ein paar Fehler in den Sprites und habe heute das komplette Coading überarbeitet und geändert.
Das läuft jetzt ganz sauber! Ich bewege nun also einen einzelnen 4Bit Sprite über den Bildschirm. Noch habe ich den Schatten drin und im nächsten Schritt kommt dann die Fusion mittels AND und EOR - für mein Programm werde ich aber wohl den Schatten in Kauf nehmen, da der gesamte Rechenaufwand und der Codeaufwand nicht unerheblich ist. Zudem brauche ich 4 davon Minimum - besser 16 kleine 4 Bit Sprites für einen großen... das wird den Aufwand weiter stark erhöhen und ich denke viel mehr als 4-5 Sprites sind dann gar nicht drin. Ich überlege also den Schatten in Kauf zu nehmen und die Sprites kleiner zu machen.

Anbei nochmal ein kurzes Video mit dem neuen Code als .mov und ein kurzes Listing wie die Bewegung des Sprites nach rechts ausseht...
ssprite6.MOV
(1.6 MiB) 45-mal heruntergeladen

Code: Alles auswählen

			.proc nachrechts
			ldx xstore
			inx
			inx
			stx xstore
			#if .byte xstore=#8
			lda #0 
			sta xstore
			tax
			lda (display),y
			sta zwischen1
			iny
			lda (display),y
			sta zwischen2
			inx
			lda tmp,x
			sta (display),y
			dex
			dey
			lda tmp,x
			sta (display),y
			mva tmp,x+1 tmp,x
			
			iny
			lda zwischen1
			sta (display),y
			iny 
			lda (display),y
			sta tmp,x+1
			lda zwischen2
			sta (display),y
			dey
			#end
			
			lda player,x
			sta (display),y
			inx
			iny
			lda player,x
			sta (display),y
			dey
			
			sty ystore
			#if .byte ystore=#44
			ldy #43
			#end
			
			rts
			.endp

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

Hallöle und einen schönen Samstag!

Nun hatte ich doch Lust, das Programm zu optimieren. Ich habe also für mein kleines Sprite eine Maske gebaut, dann die Programmschritte (AND,EOR) für de jeweilige Bewegungen dazugefügt und einige Bugs noch entfernt... einige Programmschritte waren überflüssig bzw. wurden optimiert, so daß der Gesamtcode zwar aufwendig und im Detail komplex ist, aber perfekt funktioniert.
Für die Demo habe ich ein etwas komplexeres Zufallsmuster gemacht, über das jetzt der kleine gelbe Sprite ohne Schatten ganz wir ein Player sich bewegt.
Dies ist also ein Softwaresprite!
Für mein Programm werde ich jetzt im nächsten Schritt den Sprite größer machen und dann sehen, wie viele größere Sprites ich gut animieren kann. Dann verbinde ich diesen Programmteil mit dem Parallax...
Wenn Interesse besteht, kann ich hier den Code veröffentlichen und auch gerne im Detail erklären... vielleicht ist das Thema aber auch nicht so von Interesse...

Gruß
Peter
softwaresprite.MOV
(1.46 MiB) 52-mal heruntergeladen

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

... nun habe ich es noch weiterentwickelt...
Ich habe jetzt 3 kleine Sprites zu einem etwas größeren zusammengefaßt (eigentlich sind es 6 kleinste Einheiten) und den Code weiter optimiert.

Ziel ist es, diesen Sprite möglichst einfach und kompakt im Programmcode aufzurufen, zu steuern und zu kopieren - später dann damit beliebig viele zu größeren Einheiten zu kombinieren. Der jetzige Code ist tatsächlich auch genauso angelegt. Jeder Sprite ist zunächst 4-farbig (abhängig von der Displaylist) bei einer Bildschirmauflösung von 160x96 (Antic D). Die Sprites können beliebig animiert werden - einzige Limitation ist im Prinzip der Speicher und die Geschwindigkeit. Bei der Geschwindigkeit sieht es allerdings im Moment so aus, daß ich noch trotz Warteschleife für einen Sprite eine enorme Geschwindigkeit bekomme. 2 Beispiele habe ich angehängt. Bei der schnellen Variante ist immer noch eine erhebliche Warteschleife drin. Ich kann bestimmt 10-30 Sprites ausreichend schnell darstellen.

In dem Beispiel ist eine automatische Bewegung für diesen Sprite hinterlegt, der Sprite wird jeweils im Hauptprogramm aufgerufen mit einem JSR-Befehl und das wars...

die schnelle Variante:
ssprite7.1.MOV
(1.19 MiB) 37-mal heruntergeladen
etwas gemütlicher:
ssprite7.2.MOV
(2.45 MiB) 44-mal heruntergeladen
der eigentliche Aufruf sieht so aus:

Code: Alles auswählen

;------------------------------------------Hauptprogramm------------------
loop                	jsr player1
       
                        jmp loop

;-----------------------------------------------Ende------------------------------
mehr nicht, alles andere läuft automatisiert im Unterprogramm player1!

Als nächstes werde ich mehrere Player machen und schauen, wie viele man mit guter Geschwindigkeit unabhängig voneinander darstellen kann.

Gruß
Peter

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

Neue Herausforderungen!!!

Das Programm habe ich weiter umgestellt, so daß man relativ einfach weitere Sprites generieren kann. Ich werde das jetzt mal versuchen maximal auszureizen. Durch die Umstellung kann ich jetzt die Hauptroutine für alle Sprites nutzen und muss nur eine Reihe von Variablen übergeben... das klappt auch ganz gut. Ich habe ein 2. Sprite eingefügt und mal kalkuliert wie der Speicherbedarf ist:

Für das Programm mit einem Sprite brauche ich 1510 Bytes - da ist aber alles drin incl. der Steuerung, der Bewegungsmuster, der Masken, der DL usw.
Ein weiteres Sprite mit Bewegung kostet mich nun zusätzliche 550 Byte. Die Geschwindigkeit ist noch sehr hoch... ich werde das mal weiter ausreizen und schauen, wie die Geschwindigkeit bei 20 Sprites ist... ich schätze das geht noch flott!

Anbei ein kurzes Video mit den 2 Sprites. Der Hintergrund ist noch per Random und die Sprites habe ich relativ einfach und noch gleich... das muss man natürlich noch gestalten. Hier geht es aber zunächst um das Prinzip.
sprite8.MOV
(988.15 KiB) 44-mal heruntergeladen
Ein neues Problem habe ich schon theoretisch erahnt und kommt jetzt auf mich zu und habe ich auch schon direkt gesehen und simuliert.. und leider habe ich da noch keine gute Lösung. Vielleicht hat ja einer der Profis die passende Idee - den Kniff...

Das Sprite muss sich den Hintergrund "merken", denn der wird ja immer wieder mit dem aktuellen Sprite fusioniert bzw. wenn der Sprite weg ist zurück auf den Bildschirm geschrieben (restauriert). Wenn jetzt ein 2. Sprite über das 1. zieht, dann merkt sich das 2. Sprite das 1. Sprite (weil es denkt dies ist der aktuelle Hintergrund) und es treten die entsprechenden Fehler auf. Sprite 2 müsste also erkennen, dass es gerade auf Sprite 1 hängt und müsste das entsprechend verarbeiten... dafür habe ich noch keine Lösung.
Es muss aber irgendwie gehen...

Gruß
Peter

Benutzeravatar
LarsImNetz
Beiträge: 152
Registriert: 24.08.2021 18:27
Has thanked: 109 times
Been thanked: 80 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von LarsImNetz »

Hallo Peter,

das selbe Problem habe ich bei Pacmen-Evolution auch gehabt. Die Augen sind Software-Sprites.
Ich habe es so gelöst:
1. Sprite setzen (Hintergrund merken), 2. Sprite setzen (Hintergrund merken), 3. Sprite setzen (Hintergrund merken), 4. Sprite setzen (Hintergrund merken)

Sobald ich aus dem sichtbaren Bereich raus bin:
4. Sprite abräumen, 3. Sprite abräumen, 2. Sprite abräumen, 1. Sprite abräumen.

Also Rückwärts den Hintergrund wieder herstellen, Problem gelöst.

Solange man bei 50/60hz bleibt und nur wenig Sprites hat, funktioniert es ganz gut, sonst wird es durch Double-Buffering teuer.

LG
Lars

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

Hallo Lars,
vielen Dank für die Idee. Das Problem in meinem Fall ist allerdings folgendes: Es wird ja ein scrollendes System sein und vom Prinzip her wollte ich es so haben, daß die Sprites ganz unabhängig laufen können, es kann also sein, daß sich 10 Sprites überlagern und keiner weiß so ganz genau wann welches Sprite rein oder raus geht. Die Reihenfolge ist gar nicht so richtig festgelegt... und alles in einer Art Stapelregister (wie im Netz erwähnt) zu speichern, zu lesen und zu vergleichen geht zwar, die kleine 6502 wird damit aber eher überlastet.
Eben gerade kam mir dann die Erleuchtung: Ich arbeite wegen des Scrollers (und dem Parallax) ja eh schon mit einer Kopie des Bildschirmes... warum nicht einfach die Hintergrundinformationen hier entnehmen und dann im sichtbaren Bildschirm zurückschreiben wenn der Sprite wieder abrückt... das hat nur wenig Code erfordert und ich habe es direkt umgesetzt und es funktioniert!!! Die Sprites überlappen sich und alle funktioniert tadellos!
Gruß
Peter
Dateianhänge
spriteoverlap.MOV
(2.11 MiB) 42-mal heruntergeladen

Benutzeravatar
LarsImNetz
Beiträge: 152
Registriert: 24.08.2021 18:27
Has thanked: 109 times
Been thanked: 80 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von LarsImNetz »

Perfekt.

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

10 / 60 Software-Sprites

Beitrag von Dr. Irata »

... ich wollte das noch auf die Spitze treiben und 20 Sprites auf einmal darstellen und schauen, was die CPU damit machen kann. Jedes Sprite besteht eigentlich aus 6 kleinen Sprite-Einheiten, was man auf dem Bildschirm sieht, sind jetzt insgesamt 10 große Sprites (die ich auch zusammenlegen kann) - also eigentlich 60 kleinsten Einheiten.

Betrachtet man nur die 10 großen Einheiten, dann sieht man jetzt im ersten Video wie schön die umhertanzen (ich habe alle Sprites mit der gleichen Maske hinterlegt, aber jedes Sprite kann man einzeln individuell gestalten mit 4 Farben. Auch bei den Bewegungsmustern habe ich jetzt hier in der Demo nur drei hinterlegt, das kann man aber beliebig variieren.

Das gesamte Demoprogramm schluckt jetzt ca. 5,5 KB - ein Sprite verbraucht dabei ca. knapp 500 Byte. Da ist also noch Luft nach oben.
sprites9.MOV
(2.31 MiB) 39-mal heruntergeladen
hier noch mit einem vollen Bildschirm:
sprites10.MOV
(1.25 MiB) 38-mal heruntergeladen
Zuletzt geändert von Dr. Irata am 04.08.2022 17:18, insgesamt 1-mal geändert.

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

final...

Beitrag von Dr. Irata »

... ich habe mich jetzt seit dem 1.7.22 mit der Parallax - Programmierung und den Softwaresprites beschäftigt.
5 Wochen relativ intensiven Lernens und Programmierens. Beide Techniken stehen jetzt bereit, scheinen aber entweder zu bekannt oder zu komplex, um hier größeres Interesse zu generieren.
Ich persönlich finde beide Techniken - vor allem die der Softwaresprites - höchst spannend, da sie die Möglichkeiten bei Programmen deutlich erweitern.

Dies ist nun also der letzte Post über Softwaresprites, ich widme mich jetzt wieder CoE und werde als nächstes mein Parallax mit den Softwaresprites verbinden...

Gruß

Peter

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von pps »

Ich denke schon, dass Interesse da ist. Ich verfolge Deine Themen zumindest gerne.

Ohne Code kann man allerdings nicht so viel helfen was mitzuentwickeln bzw. zu optimieren.

Natürlich kann man natürlich auch nicht immer jede Zeile Code zeigen...
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

Hallo Ralf,
ich hatte ja oben geschrieben, daß ich gerne den Code hier reinstelle und auch im Detail erklären bzw. diskutieren würde.
Da kam aber gar keine Reaktion und dann kann es nicht so interessant sein.
Mir persönlich bringt der Austausch immer sehr viel. Es ist allerdings auch Arbeit und Zeit.... und ich bin mir da immer unsicher, inwieweit das Thema überhaupt von Bedeutung ist. Die Profis werden vielleicht eher gelangweilt sein, die Anfänger vielleicht überfordert, da es schon auch komplex ist. Zudem ist der Code in MADS und nicht eins zu eins übertragbar in den älteren Assemblerversionen.

Das Thema Softwaresprites beispielsweise findet man fast nirgends. Als Vorlage hatte ich einen Code von Atari-Age, den ich zunächst auf MADS umgeschrieben habe, aber der Code war so eigen, daß ich es beiseite gelegt habe und von Grund auf (für mich) neu hergeleitet habe. Das Endprodukt ist natürlich komplex, aber vom Prinzip her ist das gar nicht mal so schwierig... viele werden sich allerdings fragen: Was brauche ich diese Softwaresprites, ich habe doch die gute alte PM-Grafik. Stimmt. Nur mit der PM ist man aber erheblich limitiert, daher die Softwaresprites...
Gruß
Peter

FlorianD
Beiträge: 182
Registriert: 19.08.2021 00:18
Has thanked: 21 times
Been thanked: 55 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von FlorianD »

mach nur bitte weiter, ich lese das immer mit und gucke die Videos an und bin begeistert!

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Dr. Irata »

hmmmm ... ok!

Neben meinem Projekt CavernsOfEris würde ich dann hier den vorhandenen optimierten Code am Beispiel von drei Softwaresprites Stück für Stück im Detail posten und diskutieren / erklären. Am Ende kommt der gesamte Code, den jeder dann gerne frei nutzen und erweitern kann - ich hege da keine Ansprüche!

wosch
Beiträge: 489
Registriert: 17.08.2021 21:16
Wohnort: Reutlingen
Has thanked: 454 times
Been thanked: 142 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von wosch »

Ich denke auch das hier viele, so wie ich, mitlesen und eigentlich nur Bahnhof verstehen :mrgreen:
Ich finde das aber hier trotzdem super interessant und auch wie du dich da rein kniest. Meinen Respekt hast du auf jeden Fall.
Ich könnte mir auch vorstellen das der eine oder andere hier sich davon anstecken lässt und selbst mal was versucht.
Erfahrungsaustausch wäre mit Sicherheit gewährleistet, oder :D
Man muss halt auch bedenken das wir hier Deutsch sprechen, auf AA ist mit Sicherheit ein grösseres Publikum vorhanden. Aber ich lese lieber Deutsch und schreiben in Englisch ist nicht so mein Ding.
Also gerne weiter hier posten :!:
Gruß
Wolfgang

Benutzeravatar
Olix
Beiträge: 987
Registriert: 17.08.2021 07:06
Has thanked: 117 times
Been thanked: 405 times
Kontaktdaten:

Re: Software-Sprites

Beitrag von Olix »

So ist es. Auch ich verstehe nur die Hälfte und lese trotzdem immer mit. Und schaue mir begeistert jedes Video an. Bitte weiter berichten!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast