ubuntuusers.de

Projektvorstellung: SLUDGE

projektvorstellung.png

SLUDGE 🇬🇧 ist ein System, mit dem jeder auf Ubuntu und anderen Plattformen Grafikadventures entwickeln und spielen kann.

Adventure-Fans wird der Name SCUMM etwas sagen. OpenSLUDGE ist eine freie Alternative, mitsamt Entwicklungswerkzeugen, dazu. Da die Geschichte von SLUDGE als Windows-Programm bereits mehr als zehn Jahre zurückreicht, sind schon einige relativ aufwändige Spiele entstanden. Da SLUDGE mittlerweile auch auf anderen Plattformen erschienen ist, laufen diese Spiele nun natürlich auch unter Linux. Näheres zu den Spielen ist im Wikiartikel zu SLUDGE enthalten. Dieser beschreibt außerdem die Installation von SLUDGE auf Ubuntu.

Der vorliegende Artikel soll nun einen kleinen Einblick in die ersten Schritte der Spielentwicklung mit SLUDGE geben.

Adventures entwickeln mit SLUDGE

verbcoin.png
Verbmünzen-Interface beim „Verb Coin Example“

Der aufwändigste Teil bei der Entwicklung eines Adventures ist sicherlich der kreative - Story, Rätsel und Dialoge ausdenken, Hintergründe und animierte Objekte zeichnen, Musik, Sprache und Sounds aufnehmen. Dagegen ist das Zusammensetzen der Einzelteile ein Kinderspiel.

interview.png
SCUMM-Interface bei „The Interview“

Um die mühsam erstellten Ressourcen in ein Spiel einzubinden und mögliche Interaktionen mit der Spielwelt einzuprogrammieren, wird bei SLUDGE eine Skriptsprache verwendet, die selbst auch SLUDGE heißt. Außerdem besteht so die Möglichkeit, das Spielinterface völlig frei selbst zu gestalten. Möchte man sich anfangs nicht mit dem Implementieren der Benutzerschnittstelle herumschlagen, sondern sofort den eigenen Charakter herumlaufen sehen, sollte man sich zu Beginn an dem Code eines funktionierenden Spiels orientieren. Hier bietet sich zum einen das im SLUDGE-Sourcecode-Archiv ⮷ (im Ordner doc/ExampleProjects) enthaltene „Verb Coin Example“ an. Ein Beispielprojekt, dass statt Verbmünzen-Interface ein klassisches SCUMM-Interface (siehe Bilder) bietet, ist „The Interview“, siehe Sourcecode-Bereich auf der SLUDGE-Homepage 🇬🇧.

Neben der Skriptsprache bietet SLUDGE fünf graphische Programme für recht spezialisierte Aufgaben. Drei davon dienen der Projektverwaltung, dem Erstellen von Übersetzungen und dem Umwandeln von Animationen in das von SLUDGE benötigte Format. Des weiteren gibt es auch noch Floor Maker und Z-Buffer Maker. Auf letzteren wird weiter unten noch genauer eingegangen.

Ein ständiger Begleiter beim Entwickeln mit SLUDGE ist die Dokumentation 🇬🇧. Hier werden fast alle Fragen beantwortet.

Erste Schritte mit dem Verb Coin Example

Nun soll zur Demonstration der bei SLUDGE gängigen Konzepte beschrieben werden, wie mit dem Umwandeln des Verb Coin Example in ein eigenes Adventure begonnen werden kann.

Während der Einstiegspunkt für den Code in der Datei init.slu zu finden ist, beginnt der zum Spielinhalt gehörende Code in outside/room.slu. Wer sich etwas in dem unberührten Verb Coin Example umgeschaut hat, wird hier alles wiederfinden, was im ersten Raum passiert. Die Funktion outsideRoom() wird jedes Mal aufgerufen, wenn der Raum betreten wird. Da nun ein neues Spiel gestaltet werden soll, wird so ziemlich alles aus der Datei gelöscht, sodass nur folgendes übrig bleibt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sub outsideRoom () {
	startMusic ('outside/music.xm', 0, 0);
	addOverlay ('outside/room.tga', 0, 0);
	setFloor ('outside/room.flo');
	setScale (200, 150);
	setZBuffer ('outside/room.zbu');

	addCharacter (ego, 420, 400, makeEgoAnim ());
	say (ego, "Moin, moin! Scheint ja noch zu kompilieren der Code!");
}

Die ersten fünf Zeilen laden Musik und Raum, dann wird der Spielcharakter angezeigt und zum Reden gebracht.

Damit das Projekt wieder kompiliert wird, müssen folgende Zeilen aus der Datei iface/inventory.slu gelöscht werden, da hier das Objekt „duck“ referenziert wird, das soeben gelöscht wurde.

1
2
3
4
5
	event duck {
		say (ego, "Hey, duck! Want a mushroom?");
		say (duck, "Er, no...");
		say (ego, "Ah well. I'll wander around with it for a little longer, then.");
	}

Nun kann das Projekt (VerbCoin.slp) mit dem Projekt-Manager geöffnet und inside\room.slu und german.tra aus dem Projekt entfernt werden. Jetzt sollte das Kompilieren wieder klappen.

Startet man das neu kompilierte Spiel, gibt es keine Ente mehr in dem Raum. Auch kann man nicht mehr mit der Notiz oder dem Tunnel interagieren. Nun kann es an das Erstellen eines neuen Hintergrundes gehen.

Der erste eigene Raum

room.png
Beispiel für ein eigenes Hintergrundbild

Hier beginnt die wirkliche Arbeit, ein neuer Raum muss gestaltet werden. Das bevorzugte Dateiformat für Graphiken ist PNG, auch wenn das Verb Coin Example aus einer Zeit stammt, in der SLUDGE nur TGA verstand. Der Hintergrund wird in Zeile 3 in outside/room.slu ins Spiel eingebunden. Da sich die Endung im Dateinamen ändert, muss der Aufruf angepasst werden.

Dann muss festgelegt werden, wo der Protagonist herumlaufen darf. Dazu kann man einfach den vorhandenen Fußbodenplan room.flo im Floor Maker öffnen, das neue Hintergrundbild laden und die Ecken des Bodenbereichs zu den gewünschten Positionen ziehen.

Jetzt kann man im Spiel auf dem neuen Hintergrund herumlaufen.

Interaktion!

Aber halt, diese Wolke sieht irgendwie... interessant aus. Und in Adventures möchte man sich interessante Dinge meist etwas genauer anschauen. outside/room.slu wird also wie folgt erweitert:

floormaker.png
Floor Maker bei der Arbeit

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub outsideRoom () {
	startMusic ('outside/music.xm', 0, 0);
	addOverlay ('outside/room.png', 0, 0);
	setFloor ('outside/room.flo');
	setScale (370, 30);
	setZBuffer ('outside/room.zbu');

	addScreenRegion (cloud, 357, 65, 599, 161, 503, 380, NORTH);

	addCharacter (ego, 420, 400, makeEgoAnim ());
	say (ego, "Moin, moin! Scheint ja noch zu kompilieren der Code!");
}


objectType cloud ("Merkwuerdig aussehende Wolke") {
	event lookAt {
		say (ego, "Komisch, die Wolke sieht so aus, als ob sie eine Zigarette raucht.");
	}
	event talkTo {
		say (ego, "Haaallooo Wooolkeee!");
		pause(20);
		turnCharacter (ego, SOUTH);
		say (ego, "Naja, so wie sie aussieht, scheint sie zu schlafen.");
	}
}

In Zeile 8 wurde ein Bildschirmbereich für das Objekt „cloud“ hinzugefügt. Die ersten vier Zahlen markieren die Koordinaten von zwei Ecken eines Rechtecks, das den Bereich definiert. Die anderen Zahlen geben an, wo der Protagonist hinlaufen soll, wenn mit der Wolke interagiert werden soll und die letzte Angabe bestimmt, in welche Richtung er während der Interaktion guckt.

Die Koordinaten können erhalten werden, indem das Hintergrundbild im Floor Maker geladen wird. Am unteren Rand des Floor Makers werden die Koordinaten des Mauszeigers angegeben.

Außerdem wurde das Objekt „cloud“ erzeugt, mit einer Aktion fürs Ansehen und einer fürs Ansprechen.

Nun sollte es dem geneigten Leser möglich sein, anhand von Dokumentation und Beispielcode auch die Spielfigur zu ersetzen und vielleicht sogar ein kleines oder größeres Spiel zu verwirklichen.


Vielen Dank an BigMc für den eingesandten Artikel!