Geburt eines Groschengrab Deluxe Automaten

Moderator: Haegar

Gesperrt
Benutzeravatar
Haegar
Beiträge: 321

Geburt eines Groschengrab Deluxe Automaten

Beitrag von Haegar »

Eine kurze Geschichte der Zeit...

In diesem Thread möchte ich die Entestehung des Groschengrab Deluxe Automaten "Cuba Libre" (Gold Cup) dokumentieren.

Dieses Thema ist schreibgeschützt, damit es nicht zum Diskussions-Thread mutieret. Kommentare sind aber an anderer Stelle willkommen und werden von mir gerne beantwortet.

Ich würde mich freuen, wenn der eine oder andere User Interesse daran zeigt, damit mein Geschreibsel nicht umsonst ist...

Ulrich
Zuletzt geändert von Haegar am 17.05.2018, 23:40, insgesamt 9-mal geändert.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Benutzeravatar
Haegar
Beiträge: 321

Aller Anfang ist leicht...

Beitrag von Haegar »

Aller Anfang ist leicht...

Zu Beginn steht das Kennenlernen des Automaten an. Nach dem Kauf bespiele ich ihn erstmal ein bis zwei Stunden, um ein Gefühl für das Gerät zu bekommen. Ich verschaffe mir einen Überblick über die Besonderheiten im Vergleich zu den zuvor umgesetzen Automaten, um zu sehen, was ich noch zu programmieren habe.

Nachdem ich mich mit dem Automaten angefreundet habe, bastel ich mit einem 3D-Programm das Gehäuse nach. Das Modell soll am Ende aus so wenig Polygonen wie möglich bestehen, da jedes überflüssige Detail später im Spiel unnötige Rechenzeit bedeutet. Allerdings darf ich auch nicht zu sparsam mit den Details umgehen, damit der Automat letztendlich nicht zu kantig wirkt.

Links oben herrscht an meinem realen Gerät gähnende Leere. Jetzt wär wohl ein günstiger Moment, einen Geldscheinakzeptor in Angriff zu nehmen. Etwas zögere ich noch mit dieser Idee, da Groschengrab Deluxe mittlerweile ziemlich komplex geworden ist und jedes neue Feature auch potentielle Fehlerquellen beinhaltet. Aber was solls, man wächst ja bekanntlich mit den Aufgaben (...und wenns nicht klappt, kann ich ihn noch immer verwerfen).

Mit dem Modellieren des Grundgehäuses endet auch schon der einfachste Teil auf dem weiten Weg zur Fertigstellung...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Haegar am 17.05.2018, 23:40, insgesamt 9-mal geändert.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Benutzeravatar
Haegar
Beiträge: 321

Texturen Teil 1

Beitrag von Haegar »

Bevor der Automat seine Frontscheibe bekommt, erstelle ich die Textur für Tasten, Digi-Zahlen und Geld.

Da die oben ganannten Objekte später allesamt ausmoddeliert werden, benötigen sie keinen Alpha-Kanal. Daher können die Grafiken auf ein solides Bild gezeichnet werden. Zudem werden nicht-transparente Grafiken aufgrund des fehlenden Alpha-Kanals schneller berechnet.

Ältere Grafikkarten verwalten nur Texturen im rechteckigen Format in den Größen 2^x (z.B: 256x256, 512x512, 1024x1024) Pixel. Vom Programmieraufwand wär es einfacher, für jedes Objekt ein einzelnes Bild zu laden. Das würde bei einem durchschnittlichen Automaten ca. 300 Bilder ergeben. Da jedes Bild ausser der Grafik noch zusätzliche Informationen beinhaltet (Größe, Farbtiefe, Position im Speicher etc), könnten ältere Grafikkarten schnell ins Schwitzen geraten.

Am meisten Rechenzeit benötigt aber das hin- und herspringen zwischen den Bildern im Grafikspeicher. Da ich mehrere Texturen auf ein Bild zeichne, komme ich in der Regel mit fünf Bildern aus. Man kann sich durchaus vortstellen, dass immens Rechenzeit gespart wird, wenn pro Zyklus nur zwischen fünf und nicht zwischen 300 Bildern hin- und hergeschaltet werden muss.

Später werden Ausschnitte aus den Bildern mittels Texturkoordinaten auf ein 3D-Objekt projiziert. Da die Automaten durch ihr Aussehen beeindrucken sollen, erhalten Objekte, die mal leuchten und mal nicht, zwei Texturen. Dadurch wird beispielweise der leuchtende Start-Taster nicht einfach nur heller dargestellt, sondern die Textur wirkt auch wirklich so, als ob dahinter ein Lämpchen brennt.

Damit die Objekte auch die korrekten Texturausschnitte zugewiesen bekommen, muss ich noch die jeweiligen Texturkoordinaten errechnen. Das mach ich aber erst, wenn der Automat optisch fertig ist. Dadurch kann ich noch einige Zeit Änderungen vornehmen, ohne die Texturkoordinaten ständig editieren zu müssen.

Da man Texturen beliebig zerren und stauchen kann, müssen die Texturen auf dem Bild nicht den endgültigen Proportionen entsprechen (siehe Münzen).
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Haegar am 17.05.2018, 23:40, insgesamt 9-mal geändert.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Benutzeravatar
Haegar
Beiträge: 321

Texturen Teil 2

Beitrag von Haegar »

Die Gestaltung der Leuchtfelder ist der aufwendigste Teil der Texturarbeit. Da der Automat später permanent blinkt, habe ich mir den Luxus gegönnt, leicht abdimmende Leuchtfelder zu programmieren. Das heisst, ein Leuchtfeld geht nicht schlagartig aus, sondern zwischen an und aus bleibt es für einen Sekundenbruchteil auf einer Helligkeit zwischen an und aus. Diese halbleuchtenden Felder, wie man sie auch bei der Risikoautomatik erkennen kann (Null bis Obergrenze), erfordern eine Zusatzaufgabe. Und zwar die, dass jede Textur zweimal erzeugt werden muss - einmal für komplett aus (dunkler) und einmal für an bzw. halban (hell).

Zudem muss ich versuchen, die Texturen platzsparend auf dem Bild unterzubringen, da jedes Bild Speicher der Grafikkarte belegt. Um mir die Arbeit etwas zu vereinfachen, werde ich die hellen und dunklen Texturen an derselben Position auf zwei verschiedenen Bildern zeichnen. Dadurch muss ich nur eine Texturkoordinate errechnen und nur, je nach an oder aus, das Bild wechseln. Damit die Texturen auch beim Heranzoomen gut zu erkennen sind, male ich sie auf ein 1024x1024 Pixel großes Bild. Über die Proportionen muss ich mir keine Gedanken machen, denn das regelt später die Größe des 3D-Objekts, auf das die Textur gezeichnet wird.
ggd003d.jpg
Da die Texturen hauptsächlich transparent sind, zeichne ich zusätzlich eine ausgefüllte Fläche unter jede einzelne Textur (linkes Bild), damit ich später die Koordinaten leichter ermitteln kann. Diese ausgefüllten Flächen werden in der finalen Textur entfernt.

Es gibt allerdings noch ein weiteres Detail zu beachten. Texturen werden nicht nur einmal im Speicher abgelegt, sondern für weiter entfernte Objekte heruntergerechnet. Das bedeutet, dass eine 1024x1024 Pixel große Textur beim Laden auch in den Größen 512x512, 256x256, 128x128, 64x64 etc. im Grafikspeicher abgelegt wird. Das verhindert, dass bei weit entfernten Objekten die Texturen verpixeln. Man kennt solche unschönen Effekte aus Spielen des letzten Jahrtausends.

Dieses Herunterrechnen der Texturen benötigt zum einen wieder mehr Grafikkartenspeicher und zum anderen rücken dadurch die Texturen auf dem Bild näher aneinander! Beträgt beispielsweise der Abstand zwischen zwei Texturen auf dem Originalbild noch 2 Pixel, so ist er beim nächstkleineren Bild nur noch ein Pixel groß und beim nächten Bild nicht mehr vorhanden. Bei all darunter liegenden Bildern greifen die Texturen ineinenader. Daher gibt es manchmal kleinere Ränder um das Objekt. Diese Ränder sind der Anfang der Nachbartextur.
ggd003c.jpg
Im oberen Beispiel ist zu erkennen, dass die Stärke des Randes zunimmt, je kleiner das 3D-Objekt wird. Daher versuche ich nach Möglichkeit, mindesten acht Pixel Platz zwischen den Texturen zu lassen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Haegar am 17.05.2018, 23:40, insgesamt 9-mal geändert.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Benutzeravatar
Haegar
Beiträge: 321

Texturen Teil 3

Beitrag von Haegar »

Zum Schluß müssen noch die Frontscheibe und die Walzen gezeichnet werden. Bei der Frontscheibe werden lediglich die Grafiken gezeichnet, die sich nicht auf den vorangegangenen Texturen befinden. In erster Linie handelt es sich dabei um alles außer den Leuchtfeldern. Weitere Texturen, die auf diesem Bild untergebracht sind, sind Auszahlknopf und Gehäusematerial (meist kleine, dunkle und strukturlose Flächen).
ggd004.jpg
Auf den ersten Blick wirkt die Frontscheibe etwas leblos und detailarm, aber wenn im finalen Spiel die Leuchtfelder blinken, sieht das ganze schon anders aus.

Da die Glasfläche aus einem einzigen planen Objekt besteht, muss bei dieser Grafik nicht allzu viel beachtet werden. Lediglich die kleinen Gehäusegrafiken (Münzen und Scheine über dem Einwurf) habe ich nochmals detaillierter gemalt, um ihnen ein eigenes 3D-Objekt zuordnen zu können. Dadurch werden beim Heranzoomen auf den Münzeinwurf / Scheineinzug die darüber liegenden Hartgeld- und Geldscheingrafiken nicht verpixeln.

Die Automatenbeschreibung auf der Frontscheibe, sofern später überhaupt noch Platz dafür ist, werde ich erst dann einfügen, wenn der Automat komplett fertig ist. Es kann durchaus passieren (in dem meisten Fällen sogar), dass ich beim Spielen des neuen Automaten in Groschgengrab Deluxe bemerke, dass manche Leuchtfelder etwas größer dargestellt oder verschoben werden müssen. Daher könnte es passieren, dass die modifizierten Leuchtfelder in die Schrift hineinragen.

...

Abschließend wird es noch mal ein bisschen kompizierter. Da man beim Spielen am meisten auf die Walzen schaut, möchte ich die Walzengrafiken besonders detailliert zeichnen. Dazu erstelle ich der Reihe nach die Walzen 1 bis 3 besonders groß und im korrekten Seitenverhältnis (damit in diesem Beitrag die Grafik nicht allzu viel Platz einnimmt, habe nur eine Walzentextur eingefügt und diese Grafik um 90° gedreht).
ggd006.jpg
Mit der mittleren und rechten Walze verfahre ich genauso. Zum Schluss müssen alle drei Walzentexturen auf einem Bild untergebracht werden und zwar so, dass sie nach oben und unten nahtlos übergegen. Die Walzen wirken auf dem Bild stark gestaucht, aber im späteren Spiel wird das korrekte Seitenverhältnis dadurch wieder hergestellt, indem ich die Texturkoordinaten auf den 3D-Walzen strecke.
ggd005.jpg
Damit die rotierenden Walzen etwas verwaschen aussehen, habe ich an den rechten Bereich des Bildes die rotierende Textur eingefügt. Da die Textur eh schon unscharf ist, darf sie auch ruhig etwas kleiner sein. Eine Pixelreihe oben und unten habe ich dupliziert, so dass auch die Rotation nahtlos wirkt. Beim Cuba Libre allerdings muss ich eine weitere Rotationstextur einfügen, und zwar in Graustufen. Diese Textur wird in einer Sonderspiel-Serie anstatt der farbigen verwendet. Die Walzen färben sich beim Cuba Libre entsprechend der Sonderspiele-Farbe (rot = Sonderspiele, grün = Jumbospiele, blau = Money-Jumbospiele).

Würde statt der graustufigen Rotationstextur die farbie eingefärbt werden, könnten unschöne Mischfarben entstehen. Ich habe die Farbe allerdings nur zu 80% herausgenommen, damit noch kleinere Schattierungen der anderen Farben hindurchschimmern. Dadurch sehen die eingefärbten Walzen noch realistischer aus.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Haegar am 17.05.2018, 23:40, insgesamt 9-mal geändert.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Benutzeravatar
Haegar
Beiträge: 321

Re: Geburt eines Groschengrab Deluxe Automaten

Beitrag von Haegar »

Nachdem die Grafiken komplett erstellt sind, kümmere ich mich ums Positionieren der Leuchtfelder. Dazu gehört auch das Zuordnen der Texturen zu den 3D Objekten und deren Positionierung auf dem Automatengehäuse.

Jedes Leuchtfeld erhält drei Werte: die Nummer (Reihenfolge) des Leuchtfeldes, die Position auf dem Automatengehäuse und die Position der Texturkoordinate auf dem 3D Objekt. Weiterhin muss ich beachten, dass die Leuchtfelder, die unter einem anderen Leuchtfeld liegen, in der Liste weiter oben erscheinen. Die Leuchtfelder werden nämlich der Reihe nach gezeichnet. Sollte nun ein darüberliegendes Objekt VOR dem darunterliegenden Objekt gezeichnet werden, entsteht um den gesamten Alphakanal, der NICHT Null entspricht, ein unsichtbarer Saum. An diesem Saum wird das darunterliegende Objekt auslöscht - klingt komisch, ist aber so - :)

Um hierüber einen Überblick zu erhalten, zeichne ich auf einem Blatt die Positionen aller Leuchtfelder ein. Die lila umrandeten Leuchtfelder liegen über den schwarzrandigen und die roten über den lilafarbigen. Anschließend vergebe ich die Reihenfolge der Objekte, wie sie später gerendert werden. Sollte ich hierbei einen Fehler machen, muss ich den kompletten Automaten neu überdenken! Die Fehler sehe ich nämlich nicht auf dem Papier, sondern erst später, wenn der Automat dargestellt wird. Und bis dahin habe ich alle Zuordnungen bereits berechnet.
ggd007.jpg
Mit einem Programm, das ich zur Ermittlung der Textur- und Matrix-Koordinaten geschrieben habe, ermittel ich für jedes Leuchtfeld die entsprechenden Werte. Diese Werte trage ich in den Groschengrab-Deluxe-Editor ein, dessen erste Seite ungefähr so aussieht (Collage, damit ich mit einem Screenshot auskomme):
ggd010.jpg
Anschließend muss ich den 3D-Objekten noch ihre Bestimmung zuweisen (was ist das Gehäuse, welches die Tasten etc...) und mit den Texturnamen verknüpfen. Um den Editor auch für zukünftige Automaten so flexibel wie möglich zu halten, kann dieses hin- und herverknüpfen und Zuordnen zu Objekten und Texturen nicht einfacher gestaltet werden. Das dauert leider seine Zeit, aber dafür habe ich die höchstmögliche Freiheit beim Anordnen der Objekte und Zuweisen der Texturen.

Nun folgt der bis dahin spannendste Moment: der neue Automat wird erstmal in Groschengrab Deluxe aufgerufen. Spielen kann man damit noch nicht, aber optisch sollte er im günstigsten Falle aussehen wie sein reales Pendant.
ggd008.jpg
Autsch! Da ging irgend etwas schief... Eine Faustregel besagt, dass große Abweichungen vom erwünschten Ergebnis meist kleine Ursachen haben. Da ich nicht davon ausgehe, alles falsch ermittelt zu haben, ist der Fehler vermutlich klein, der sich auf alles auswirkt. Und in der Tat, ich habe bei der Zuwesung lediglich vergessen, die Leuchtfelder mit den Objekten zu verknüpfen. Mit geübten Auge kann man nämlich sehen, dass alle Leuchtfelder aus den Start- und Stopptasten bestehen.

Nach dem ersten Schreck und der folgenden Korrektur sieht das Ergebnis schon anders aus:
ggd009.jpg
Zwar gibt es auch hier noch ein paar Ungereimtheiten, aber das meiste befindet sich am korrekten Platz. Auffällig ist beispielsweise, dass die Koordinaten der Bonuspfeile identisch sind. Die Walzen und Geld- / Sonderspielanzeigen fehlen noch komplett. Auch der Schriftzug "Cuba Libre" hat noch die falschen Positionskoordinaten (Matrizen). Was mich aber wundert sind die fehlerhaften Darstellungen der 20 bis 200 Ct.-Felder im Fußbereich des Cocktails.

Aber, darum kümmere ich mich morgen...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
[[[User with Nick:@"Haegar"] numberOfPosts] increaseByOne];

Mein Portfolio:
Bally's Würfel, Crown Action, Crown Action Spezial, ADP Chili, Crown Royal No. 1, Crown M5, NSM Mint Super, Monarch, Exquisit Gold

Gesperrt

Zurück zu „Groschengrab“