Mein erstes Spiel...

Moderator: Rockford

yMoreT8
Beiträge: 43
Registriert: 18.03.2024 17:33
Has thanked: 7 times
Been thanked: 2 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von yMoreT8 »

Danke, aber Eure Mithilfe hat auch einen nicht unerheblichen Anteil daran! :-)

Ich habe ja so kein richtiges Konzept, ist eher so on-the-fly. Vielleicht wird es garnicht ein Galaxian-Clone, sondern was eigenes... Aber ich habe Ideen und mal schauen was draus wird.

Ich würde mich auch furchtbar gern um das Thema Sound-Effekte und Musik kümmern, aber dafür bleibt grad gar keine Zeit. Wie ihr mach ich das ja alles in meiner Freizeit als Hobby und die Zeit ist eh schon knapp und es ist auch nicht mein einziges Hobby. Neben Elektronik, KFZ-Technik, Reverse-Engineering, ein paar Wikis und Foren sowie einem Dutzend weiterer Themenfelder nun auch noch Spiele-Entwicklung... ;-)

Online
Benutzeravatar
Olix
Beiträge: 1094
Registriert: 17.08.2021 07:06
Has thanked: 132 times
Been thanked: 475 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Olix »

Noch ein kleiner Tip:

Blättere doch auf jeden Fall mal dieses Forum durch (Softare/Programmierung)-
Hier hat sich über die letzten Jahre einiges an Wissen angesammelt.

Hier mein kleiner Beitrag z.B. zum Thema VBI: viewtopic.php?f=7&t=928
Noch spannender ist aber noch das Timing des DLI, da muss man unter umständen dann wirklich jeden einzelnen Takt zählen ;)

Benutzeravatar
Mathy
Beiträge: 1170
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 478 times
Been thanked: 261 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Mathy »

.
Hallo Peter

Dr. Irata hat geschrieben:
25.03.2024 10:21
leider kann ich mit Mac keine AVI abspielen
Hast Du VLC probiert? Laut deren Website müsste VLC AVI abspielen können. Bin auf der Arbeit, hier gibt's nur Windoof, kann also nicht ausprobieren ob's stimmt.

Tschüß

Mathy
Wer oder was hat denn da geblitzt?

Benutzeravatar
andymanone
Beiträge: 2585
Registriert: 17.08.2021 12:34
Wohnort: Berlin - Suburban
Has thanked: 525 times
Been thanked: 863 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von andymanone »

Mathy hat geschrieben:
25.03.2024 14:02
.
Hallo Peter

Dr. Irata hat geschrieben:
25.03.2024 10:21
leider kann ich mit Mac keine AVI abspielen
Hast Du VLC probiert? Laut deren Website müsste VLC AVI abspielen können. Bin auf der Arbeit, hier gibt's nur Windoof, kann also nicht ausprobieren ob's stimmt.

Tschüß

Mathy

VLC kann (fast) alles 8-) !
(Auch AVI ;))

Gtx.
andY
Ressortleiter Hardware - Save the past and use the future!© andYManOne / Demozoo / My brandnew, experimental Album "Apocalyptic Symphony"

yMoreT8
Beiträge: 43
Registriert: 18.03.2024 17:33
Has thanked: 7 times
Been thanked: 2 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von yMoreT8 »

Dr. Irata hat geschrieben:
25.03.2024 10:21
leider kann ich mit Mac keine AVI abspielen
Oh, sorry, hier nochmal als MP4 (.mov). Beim Abspielen hat er das aus irgendeinem Grund um 90° nach rechts gedreht, musst mal schaun ob das bei Dir auch so ist und ggf. korrigieren.
Dateianhänge
shipmove.mov
(551.93 KiB) 11-mal heruntergeladen

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Dr. Irata »

ja, ist gedreht bei mir... aber egal!

Für die Erstellung von Sprites oder Charaktern gibt es etliche Hilfsprogramme - die wirst gut brauchen.
Ich nutze den Online SSpred von MatoSimi oder den SprEd aud gleicher Schmiede...

yMoreT8
Beiträge: 43
Registriert: 18.03.2024 17:33
Has thanked: 7 times
Been thanked: 2 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von yMoreT8 »

Dr. Irata hat geschrieben:
25.03.2024 16:33
Für die Erstellung von Sprites oder Charaktern gibt es etliche Hilfsprogramme - die wirst gut brauchen.
Ich nutze den Online SSpred von MatoSimi oder den SprEd aud gleicher Schmiede...
Genau, so eine Aufstellung von Tools wäre auch hilfreich. Ich hatte beim schnellen suchen diesen hier gefunden: SprEd v.1.2.1 https://bocianu.gitlab.io/spred/
der aussieht wie eine Weiterentwicklung des von Dir genannten SwSprEd v.0.8.4 https://bocianu.gitlab.io/spred/

Dann habe ich von ihm noch den Atari Fontmaker geladen: https://github.com/matosimi/atari-fontmaker#readme

So ganz blicke ich noch nicht durch, vor allem wie man mit den Farben umgeht und wie man später die Sprites zeichnet und animiert. Ich würde da unterscheiden in Verikales Scrolling und Animation bei Bewegung oder Zerstörung.

Man hat ja 4 Sprites (players) mit jeweils 128 oder 256 Byte Höhe. Diesen Block muss man ja erstmal im RAM per PMBASE zuweisen und initialisieren (mit 00en befüllen).
Dann muss ich meine Spritedaten da rein kopieren und bestimmte mit der Startadresse auch die Y-Position. Wenn ich das Sprite dann bewegen will mache ich das horizontal über das HPOS Register und vertikal über Scrolling oder Bytemove. Hier sehe ich zwei Möglichkeiten:
a) Ein echtes vertikal Scrolling verwenden
b) Die Bytes im Sprite verschieben, also von unten nach oben oder umgekehrt einen Byteshift durch den player-data Bereich machen.
c) Den gesamten 256 Byte Block des Players mit $00 löschen und das Sprite an der gewünschten Position neu einkopieren.
d) Die Daten des Sprites an der letzten bekannten Position durch überschreiben mit $00 löschen und an der neuen gewünschten Position wieder einkopieren

Gibt es hier bevorzugte Methoden, bzw. habe ich eine übersehen?
Ich persönlich würde Methode c) oder d) wählen weil es mir am flexibelsten erscheint. Ich kann so im Gegensatz zum zeilenweisen Scrolling direkt eine neue Position erreichen die mehrere Pixel von der alten entfernt ist. Aber das würde u.U. bedeuten das ich mein Sprite an einer Kollision vorbei bewegen könnte. Knifflig.

Bezüglich Animation wird man wohl eine Datenstruktur anlegen (Array) und irgendwo einen Index hinterlegen der beim zeichnen dann verschiedene Varianten des Sprites darstellt. Das zu steuern ist auch nicht ohne, da käme wieder sowas wie ein Scheduler zum Einsatz. Man kann sich ja auch in Ruheposition "wabernde" Gegner vorstellen, ebenso wie Animationen nur während einer Bewegung.

Und ist es so das man die Hintergründe (was so oft als Fields bezeichnet wird) dann über den ANTIC-Textmode und spezielle Fonts macht? Ggf. auch Gegner? Man hat ja nur 4 Sprites, das ist nicht viel und im Fall von Galaxian kann man die obere Reihe wohl eher nicht mit Sprites darstellen?

Auch ist mir noch ein Rätsel wie ich das mit dem animierten Sternenhintergrund hinbekomme. Hier wurde ja schonmal auf Missile diagnostiziert, aber mir fehlt noch jegliche Idee dazu das umzusetzen. Auch benötige ich die Missiles ja eigentlich für mein eigenes und das gegnerische Feuer?

Wie mal Fragen über Fragen... währenddessen ziehe ich mir die WUDSN Tutorials rein, lese div. Handbücher wie das Profi-Buch Seite für Seite durch und versuche aus zahlreichen Online-Quellen wie playermissile.com, AtariWiki etc. schlauer zu werden und ganz nebenbei noch das doch recht aufwändige 6502 Assembler zu lernen. Die fehlenden 16-Bit Register/Funktionen machen das Coding doch recht aufwändig, besonders bei Datenstrukturen die man ja nicht immer auf Page-Boundaries legen kann.

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Dr. Irata »

Also ich mache das aktuell so:

Mein Schiff besteht aus 2 Playern, dadurch erhalte ich drei Farben und es ist etwas breiter. Man kann theoretisch auch durch DLI´s aus einem Player einen mehrfarbigen Player machen, aber das ist etwas komplizierter und das brauche ich nicht zur Zeit.
Mit dem SpriteEd habe ich dann den Sprite gezeichnet. Dieser Editor hat schon eine Abspielfunktion drin und hat auch schon die Funktion mit drei Farben drin. Die Daten kann man dann ganz einfach per copy/paste in das Programm übernehmen.
Hier habe ich eine Extradatei in .txt Form angelegt, die Daten des Player lege ich dort per .dta ab. Die Datendatei wird mit icl eingebunden.
Ein Unterprogramm welches ständig aufgerufen wird im VBI schreibt ständig die Werte aus der "Datenbank" in die jeweilige gewünschte ypos des Player ein. Ich habe immer über und unter den Playerdaten eine 0 - also Leerwert, das löscht immer den oberen und unteren Anteil des Player, alles andere wird jeweils vom neuen Wert überschrieben. Mit einem Zähler bestimme ich, welche Phase aus der "Datenbank" gelesen wird und in den Player eingeschrieben wird. Thats it...

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Dr. Irata »

übrigens besteht mein Schiff aus 2 Playern und 2 Missiles... aber das ändert ja nix von der Theorie her...

Hier mal mein Code - wie gesagt ich schreibe gerne mit IF Then weil es sehr übersichtlich ist, wenn es hart auf Zeit geht, wandel ich das später durchaus um:

Code: Alles auswählen

	; Endteil des Codes aus meinem VBI
		lda xposp1 
		sta hposp0
		sta hposp1
		mva xposm1 hposm0
		mva xposm2 hposm1
		
		inc playerphasez
		
		#if .byte playerphasez<#11
		jsr playerphase1
		#end
		#if .byte playerphasez>#10 .and .byte playerphasez<#21
		jsr playerphase2
		#end
		#if .byte playerphasez>#20 .and .byte playerphasez<#31
		jsr playerphase3
		#end
		#if .byte playerphasez>#30 .and .byte playerphasez<#41
		jsr playerphase4
		#end
		#if .byte playerphasez>#40 .and .byte playerphasez<#51
		jsr playerphase5
		#end
		#if .byte playerphasez>#50 .and .byte playerphasez<#61
		jsr playerphase6
		#end
		#if .byte playerphasez>#60
		mva #0 playerphasez
		#end
		
		jsr joystick
		inc explosionindex
		
		plr
		jmp xitvbv	
und hier ein Ausschnitt der Daten meines Players (nur 1 Player - da fehlt dann noch der andere Player und die beiden Missiles...
soll aber nur das Prinzip verdeutlichen:

Code: Alles auswählen

	; SPRITE COLORS 0
	;dta 132, 132, 132, 132, 132, 132
	; SPRITE COLORS 1
	;dta 136, 136, 136, 136, 136, 136

sprite01		; Frame 0
  dta 0,0, 4, 0, 4, 0, 4, 27, 10, 4, 85, 21, 68, 32, 32, 0, 0,0
sprite02		; Frame 1
  dta 0,0, 0, 4, 0, 4, 4, 10, 10, 36, 4, 36, 27, 4, 0, 0, 0,0
sprite03		; Frame 2
  dta 0,0, 4, 4, 0, 4, 0, 16, 0, 20, 4, 21, 4, 0, 4, 0, 0,0
sprite04		; Frame 3
  dta 0,0, 4, 0, 4, 0, 4, 8, 8, 12, 4, 14, 0, 4, 0, 4, 0,0
sprite05		; Frame 4
  dta 0,0, 0, 4, 4, 0, 4, 1, 0, 5, 4, 21, 0, 0, 4, 0, 0,0
sprite06		; Frame 5
  dta 0,0, 4, 4, 0, 4, 4, 10, 10, 4, 4, 36, 27, 0, 0, 4, 0,0

Das macht wahrscheinlich jeder anders und wahrscheinlich bin ich der Einzige, der IF Then verwendet ;-)

patjomki
Beiträge: 234
Registriert: 18.08.2021 23:21
Has thanked: 72 times
Been thanked: 27 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von patjomki »

yMoreT8 hat geschrieben:
26.03.2024 08:30
b) Die Bytes im Sprite verschieben, also von unten nach oben oder umgekehrt einen Byteshift durch den player-data Bereich machen.
c) Den gesamten 256 Byte Block des Players mit $00 löschen und das Sprite an der gewünschten Position neu einkopieren.
d) Die Daten des Sprites an der letzten bekannten Position durch überschreiben mit $00 löschen und an der neuen gewünschten Position wieder einkopieren

Gibt es hier bevorzugte Methoden, bzw. habe ich eine übersehen?
Abgesehen von Methode a) haben tatsächlich alle so ihre Vor- und Nachteile. Wenn man den Player nur in einem sehr begrenzten Rahmen bewegt (also wie z.B. bei Crownland) dann würde ich Methode b) nutzen. Methode c) ist einfach, benötigt mehr CPU-Last aber weniger Verwaltungsaufwand. Methode d) benötigt weniger CPU-Last, dafür aber mehr Verwaltungsaufwand.

Finde Dein Engagement jedenfalls sehr gut.

Genau genommen benötigt es für Spieleentwicklung ja immer ein Grundgerüst, von dem Du Dir schon viel erarbeitet hast.

Displaylist
Scrolling
Interrupts (VBI und DLI)
Timer
P/M-Grafik
Pokey-Programmierung

Dafür war ja mal eine Idee mit dem Wiki gedacht, aber leider komme ich nicht dazu, das bereits von Carsten eingerichtete Wiki auch mal zu füllen.

Ich nutze folgende Tools:
Entwicklungsumgebung: wudsn mit mads als Assembler und Altirra als Emu und zum Souce-Level-Debugging
Sprites: bocianus von Dir erwähnten SpriteEd
Fonts: matosimis von Dir ebenfalls erwähnten FontMaker
Sound/Chipmusik: RasterMusicTracker (RMT) von Raster (R.I.P.) http://raster.infos.cz/atari/rmt/rmt.htm#download bzw. in einer überarbeiteten aber strubbeligen Fassung von VinsCool https://github.com/VinsCool/RASTER-Music-Tracker

yMoreT8
Beiträge: 43
Registriert: 18.03.2024 17:33
Has thanked: 7 times
Been thanked: 2 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von yMoreT8 »

Ich habe mir das Image von "Galaxian (1982)(Atari)(US)[a].exe" im Altirra Debugger näher angeschaut um zu lernen.
Der Code wird laut COM Prefix ab $5500 geladen. Das DLIST Register wird auf $3D00 gesetzt und die dort liegende DLIST kann man mit einem Kommando in der Altirra Console prima debuggen:

Code: Alles auswählen

Altirra> .dumpdlist $3d00
  3D00:      blank.i 8
  3D01:      blank 8
  3D02:      mode.i 6 @ 0B20
  3D05:      blank 6
  3D06:      mode.v.h E @ 1028
  3D09: x7   mode.v.h E
  3D10:      mode.i.v.h E
  3D11:      blank 4
  3D12: x8   mode.v.h E
  3D1A:      mode.i.v.h E
  3D1B:      blank 4
  3D1C: x8   mode.v.h E
  3D24:      mode.i.v.h E
  3D25:      blank 4
  3D26: x8   mode.v.h E
  3D2E:      mode.i.v.h E
  3D2F:      blank 4
  3D30: x9   mode.v.h E
  3D39:      blank 4
  3D3A:      blank 3
  3D3B: x5   blank 8
  3D40:      mode 6 @ 1E00
  3D43:      blank 8
  3D44:      blank.i 8
  3D45: x2   blank 8
  3D47:      blank 1
  3D48: x7   blank 8
  3D4F:      mode.h E @ 0818
  3D52: x8   mode.h E
  3D5A:      mode.i.h E
  3D5B:      blank 1
  3D5C:      mode 2 @ 2D00
  3D5F:      waitvbl 3D00
Es ist also ein durchaus komplexer Mix verschiedener Graphics-Modes, teilweise mit LMS zu eigenen RAM-Locations und Blanks.

Benutzeravatar
LarsImNetz
Beiträge: 156
Registriert: 24.08.2021 18:27
Has thanked: 115 times
Been thanked: 84 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von LarsImNetz »

Ich nutze folgende Tools:
Entwicklungsumgebung: wudsn mit mads als Assembler und Altirra als Emu und zum Souce-Level-Debugging
Sprites: bocianus von Dir erwähnten SpriteEd
Fonts: matosimis von Dir ebenfalls erwähnten FontMaker
Sound/Chipmusik: RasterMusicTracker (RMT) von Raster (R.I.P.) http://raster.infos.cz/atari/rmt/rmt.htm#download bzw. in einer überarbeiteten aber strubbeligen Fassung von VinsCool https://github.com/VinsCool/RASTER-Music-Tracker
Um mal das komplette Gegenteil zu zeigen:

Ich nutze folgende Tools:
Entwicklungsumgebung: IntelliJ-CE und Emacs als Editor, Makefiles um die Abhängigkeiten aufzulösen, atasm v1.23 und atari800 oder Altirra, falls ich debuggen muss. Des Weiteren verwende ich meist meine selbst geschriebene Algol 68 ähnliche Sprache zum Programmieren von Dingen, die nicht soo zeitkritisch sind. Sonst natürlich Assembler. Der Compiler nimmt mir echt eine Menge Dinge ab. Das ist dann wie programmieren mit Action oder Basic nur halt ähnlich schnell wie Assembler.
Als Tipp: Ich lege meine Sprite/Font-Daten meist als Binärzahlen im Sourcecode ab, dann sind die Dateien zwar locker 8x größer, aber auf einem aktuellen PC spielt das keine Rolle. So könnte ich auch schnell Dinge anpassen im Sourcecode. Statt Oktal unterstützt mein Compiler die Quad-Zahlen (0-3) damit lassen sich dann mehrfarbige Fonts einfach anlegen.
Grundsätzlich verwende ich Git als Revision-Controll-System. Bei mir lokal auf meinem Server rennt ein Gitea, das verwende ich ausgiebig.
Als Sprite-Editor nehme ich gerne Piskel, damit kann man sehr schnell Animationen zaubern.
Für Sounds habe ich mir selbst etwas zusammengezimmert, nicht weil ich RMT nicht mag, sondern weil ich es einfach wollte.

Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Mein erstes Spiel...

Beitrag von Dr. Irata »

Hi Y - was macht deine Programmiereuphorie?
Kommst du voran?

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast