Entwicklung eines PICO-8-Spiels (2)
Die Hauptmechanik des Spiels soll das Sammeln und Verarbeiten von Ressourcen sein. Als Ressourcen hatten wir bald eine Liste zusammen und um diese abzubauen dachten wir an verschiedene Werkzeuge.
Die Werkzeuge
Eine Axt, um Bäume zu fällen, ein Hammer, um Ressourcen verarbeiten zu können und einige weitere waren schnell gefunden. Eine passende Datenstruktur war schon schwieriger zu finden.
Eine Überlegung war, die Werkzeuge als Struktur zu definieren und zusätzlich dem Spieler eine Tabelle mit den bereits gefundenen Werkzeugen mitzugeben, in das die neuen Werkzeuge nach und nach hinzugefügt werden, sobald der Spieler sie findet oder herstellt.
Das Problem dabei wäre gewesen, dass die Reihenfolge der Werkzeuge dynamisch gewesen wäre und außerdem wollten wir im Spiel eine komplette Leiste der Werkzeuge anzeigen, bei der noch nicht gefundene oder hergestellte Werkzeuge als versperrtes Vorhängeschloss dargestellt werden, um den Spieler auch ein wenig neugierig zu machen, was ihn noch erwartet. Also haben wir für jeden Werkzeugplatz einen Eintrag in der tools Unterstruktur der Spielerstruktur angelegt. Über die boolean Variable own wird festgehalten, ob das Werkzeug bereits im Besitz des Spielers ist und damit nicht mehr nur als Vorhängeschloss in der Werkzeugleiste angezeigt wird. Die zweite boolean Variable use markiert das gerade aktive Werkzeug, das in der Werkzeugleiste durch einen roten Rahmen hervorgehoben wird.
Welches Werkzeug erntet welche Ressource?
Für diese Zuordnung hab‘ ich mich der Flags bedient, die PICO-8 für jedes Sprite zur Verfügung stellt. Das sind die kleinen Kugeln unter der Spriteansicht im Sprite-Editor. Sind sie grau, ist das jeweilige Flag false, wenn sie allerdings bunt sind, ist das jeweilige Flag true. Diese Flags kann man entweder alle auf einmal über FGET(<spritenumber>) abfragen, oder einzelne Flags über FGET(<spritenumber>,<flag>). Also habe ich eine Liste von vier Eigenschaften erstellt, um die Fähigkeiten der Werkzeuge abzubilden:
Dazu kamen dann noch openable für Kisten und collectible für generell einsammelbare Ressourcen und Gegenstände wie Äpfel oder Pilze zum Beispiel, die unabhängig vom aktiven Werkzeug funktionieren sollen. Sowohl bei den Sprites der Werkzeuge als auch bei den Sprites der Ressourcen müssen die entsprechenden Flags gesetzt werden dann kann man mit einem binären Und (BAND) herausfinden, ob man eine Ressource mit dem aktiven Werkzeug ernten kann.
IF BAND(FGET(<sprite_tool>),FGET(<sprite_resource>)) > 0 THEN...
Im folgenden Bild sieht man die ausgewählte Axt und einen Baum mit dem gelben Flag aktiviert.
Wer sich jetzt über die Anordnung der Sprites wundert: Alle Ressourcen, Werkzeuge und UI-Elemente hab’ ich auf der ersten Sprite-Seite (Tab 0) untergebracht. Die zweite Seite (Tab 1) enthält dann eher Sprites für die Umgebung und die dynamisch generierte Map. (Hmmm... Eigentlich sollte die Kiste wohl auf Seite zwei wandern... :))
Nächstes Mal geht es dann vermutlich mit der Erstellung der Bildschirme weiter.













