Jetzt wäre es mit GameMaker ein leichtes einen Raum zu erstellen und die Objekte dort per Hand zu platzieren und ein Event festzulegen was beim drauf klicken passieren soll.
Aber dann haben wir bei jedem Start genau den gleichen Raum und die Geschenke jedes Mal an derselben Stelle. Spätestens im dritten Durchlauf hat sich jeder gemerkt, dass die kratzigen Socken von Oma im Päckchen rechts hinter dem Weihnachtsbaum sind.
Also dürfen die Pakete nicht statisch im Raum angeordnet werden. Zufällig verteilen bringt aber auch nichts – dann wären sie irgendwo im Raum, aber nicht gut versteckt.
Ich brauche also zwei Listen:
• Eine für die Geschenke mit ihren Attributen
• Eine für die Verstecke (mindestens so viele Verstecke wie Geschenke)
Am einfachsten würde ich die Listen direkt in GameMaker anlegen, z.B. über DS_Lists.
Da ich solche Werte aber ungerne im Coding verstecke und als Modder den einfachen Zugang zu den Daten liebe, muss es eine externe Datenquelle sein. Da kenne ich persönlich nur XML und JSON. Wobei ich täglich im Beruf mit XMLs zu tun habe, meine Erfahrungen mit JSON aber praktisch Null sind.
Daher entscheide ich mich natürlich für … JSON! Und ausnahmsweise hat es nichts damit zu tun, dass ich dieses Projekt komplizierter machen will, als es eigentlich sein müsste. Aber GameMaker bringt Unterstützung für JSON bereits mit, während ich einen XML Parser erst selber schreiben müsste.
Geschenkeliste
Für den Anfang lege ich 7 Attribute für jede Geschenkschachtel fest:
• ID – brauche ich eigentlich im Spiel nicht, aber für Debugging-Zwecke kann das nützlich werden
• Name des Geschenks
• Grafik für das verpackte Geschenk
• Grafik für die leere Schachtel
• Grafik für das ausgepackte Geschenk
• Beschreibung
• Zeitstrafe fürs Auspacken
In Tabellenform dann ungefähr so:
Später kommt vielleicht noch mehr dazu, aber für den Anfang sollte das als Datenstruktur ausreichen. Korrigiert mich, falls euch gleich noch was einfällt was mit rein sollte!
Verstecke
Für die möglichen Verstecke komme ich auf 4 Attribute:
• Eindeutige ID aus den selben Gründen wie für das Geschenk
• X-Koordinate im Raum
• Y-Koordinate im Raum
• Tiefe im Raum (negativ ist bei GameMaker weiter vorne)
Es wird zwar ein 2D-Spiel, dennoch brauche ich die Z-Koordinate (Depth), um Geschenke hinter oder vor anderen Objekten platzieren zu können.
Da ich noch keinen Raum mit Objekten gebaut habe, trage ich einfach 4 zufällig gewählte Koordinaten ein.
In JSON sehen die beiden Listen dann so aus:
Geschenke:
Code:
[
{
"ID":1,
"NAME":"CIV V",
"IMG_BOXED":"spr_GiftBox1",
"IMG_UNBOXED":"spr_GiftBoxOpen1",
"IMG_GIFT":"spr_CIV5",
"DESCRIPTION":"Naja, Civ 5 eben ...",
"PENALTY": 0
},
{
"ID":2,
"NAME":"CIV IV",
"IMG_BOXED":"spr_GiftBox2",
"IMG_UNBOXED":"spr_GiftBoxOpen2",
"IMG_GIFT":"spr_CIV4",
"DESCRIPTION":"Stack of death for the win!",
"PENALTY": 0
}
{
"ID":3,
"NAME":"Zonk",
"IMG_BOXED":"spr_GiftBox3",
"IMG_UNBOXED":"spr_GiftBoxOpen3",
"IMG_GIFT":"spr_Zonk",
"DESCRIPTION":"Ätsch",
"PENALTY": 10
}
]
Verstecke:
Code:
[
{
"GIFT_POS": 1,
"GIFT_X": 60,
"GIFT_Y": 60,
"GIFT_DEPTH": -1000
},
{
"GIFT_POS": 2,
"GIFT_X": 200,
"GIFT_Y": 200,
"GIFT_DEPTH": -1000
},
{
"GIFT_POS": 3,
"GIFT_X": 800,
"GIFT_Y": 400,
"GIFT_DEPTH": -1000
},
{
"GIFT_POS": 4,
"GIFT_X": 1000,
"GIFT_Y": 60,
"GIFT_DEPTH": -1000
},
{
"GIFT_POS": 4,
"GIFT_X": 500,
"GIFT_Y": 250,
"GIFT_DEPTH": -1000
}, {
"GIFT_POS": 5,
"GIFT_X": 60,
"GIFT_Y": 400,
"GIFT_DEPTH": -1000
}
]