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.









