131
PC Master
Θέλετε να φτιάξετε το δικό σας παιχνίδι,
αλλά δεν ξέρετε από πού να αρχίσετε; Το AGS
είναι το τέλειο εργαλείο και ο Άλκης Πολυράκης
ο ιδανικός καθηγητής. Αν είστε επιμελείς και
δεν χάσετε μαθήματα, σύντομα θα μπορείτε να
καυχιέστε ότι είστε και εσείς ένας game developer!
ντρικό κώδικα του παιχνιδιού μας, ο οποί-
ος ονομάζεται Global Script. Σε αυτόν συ-
ναντάμε έτοιμες συναρτήσεις, στις οποίες
μπορούμε να επέμβουμε και να τις μετα-
βάλουμε ανάλογα με τις επιθυμίες μας,
ενώ υπάρχει και η δυνατότητα να δημι-
ουργήσουμε τις δικές μας. Στο παρόν τεύ-
χος θα συζητήσουμε για μερικές από τις
κυριότερες προκαθορισμένες συναρτή-
σεις.
Φορτώστε το PC Master’s Saga και από
το Project Tree κάντε διπλό κλικ στο
Scripts->GlobalScript.asc. Δεν πρέπει να
σας τρομάζει το μέγεθος του κώδικα που
βλέπετε μπροστά σας. Αρκεί να θυμάστε
πως εμείς θα ασχολούμαστε με ένα μικρό
κομμάτι του κάθε φορά, όπως ακριβώς κά-
ναμε μέχρι στιγμής. Αν παρατηρήσετε το
τελευταίο τμήμα του κώδικα, θα δείτε ότι
υπάρχουν εκεί αρκετές από τις εντολές
που δημιουργήσαμε στα προηγούμενα
τεύχη, όπως αυτές που αφορούν στα
interactions με τους χαρακτήρες και τα
inventory items. Η πρώτη συνάρτηση με
την οποία θα ασχοληθούμε είναι η
on_key_press(). Εντοπίστε την και παρα-
τηρήστε τη σύνταξή της. Καλείται κάθε
φορά που ο παίκτης πατά ένα πλήκτρο, με
την προϋπόθεση ότι ο κώδικάς μας δεν εί-
ναι blocked τη δεδομένη στιγμή, επειδή,
για παράδειγμα, έχουμε πατήσει παύση ή
έχει ενεργοποιηθεί το save/load panel.
Μέσα στις παρενθέσεις βάζουμε έναν
ακέραιο αριθμό, ο οποίος αντιστοιχεί στον
κωδικό ASCII του πλήκτρου που πιέσαμε.
Στη συνέχεια αναφέρουμε τι θέλουμε να
συμβεί όταν πατάμε το πλήκτρο. Για
όσους δεν το γνωρίζουν, τα αρχικά ASCII
αντιστοιχούν στο ακρώνυμο American
Standard Code for Information
Interchange και δεν είναι τίποτε άλλο πα-
ρά ένας πίνακας που αντιστοιχεί έναν
αριθμό σε κάθε πλήκτρο ή συνδυασμό
πλήκτρων του πληκτρολογίου μας. Ο πίνα-
κας αυτός υπάρχει στις οδηγίες του AGS,
όμως εναλλακτικά μπορείτε, αντί για τον
αριθμό ASCII, να χρησιμοποιείτε την εντο-
λή GetASCIINumber. Έτσι, ο αριθμός του
κεφαλαίου F είναι GetASCIINumber(F),
ενώ αυτός του συνδυασμού Control και B
είναι GetASCIINumber(CtrlB). Ας υποθέ-
σουμε λοιπόν ότι θέλουμε, όποτε πατάμε
το πλήκτρο o, το παιχνίδι να μας ενημερώ-
νει για το σκορ που έχουμε τη δεδομένη
χρονική στιγμή. Αρκεί να συμπεριλάβουμε
κάπου μέσα στη συνάρτηση –ας πούμε
στο τέλος της, πριν από την αγκύλη που
την κλείνει
–
την παρακάτω γραμμή:
if (keycode==GetASCIINumber(o) ||
keycode==GetASCIINumber(O))
Display(“Your current score is: %d”,
game.score);
Παρατηρήστε πως σαν καλοί προγραμ-
ματιστές, προβλέπουμε την πιθανότητα ο
παίκτης να πατήσει το πλήκτρο με το Caps
Lock ενεργό. Επίσης, ασφαλώς πρέπει να
έχουμε το νου μας να μην αναθέτουμε
δύο διαφορετικές λειτουργίες στο ίδιο
πλήκτρο.
Η δεύτερη προκαθορισμένη συνάρτηση
που θα μας απασχολήσει είναι η
dialog_request(). Τη συγκεκριμένη την κα-
λούμε κατά τη διάρκεια ενός διαλόγου, με
την εντολή run-script. Ας υποθέσουμε ότι
θέλουμε ο Chris να ξύνει το κεφάλι του
για λίγη ώρα, σε συγκεκριμένα σημεία
ενός διαλόγου, δείχνοντας ότι σκέφτεται
τι να πει. Θα μπορούσαμε να εισάγουμε
κάθε φορά τις εντολές μέσα στο διάλογο,
αφήνοντας ένα κενό στην αρχή, όπως
έχουμε πει ότι πρέπει να κάνουμε για να
καταλαβαίνει το πρόγραμμα ότι εκτελού-
με «κανονικό» κώδικα και όχι απλές εντο-
λές διαλόγων. Κάτι τέτοιο, ωστόσο, δεν
θα ήταν πρακτικό, αφού θα χρειαζόταν να
επαναλαμβάνουμε το ίδιο κομμάτι κώδικα
πολλές φορές. Εδώ έρχεται να μας βοηθή-
σει η dialog_request.
Πρώτα θα φτιάξουμε το απαραίτητο
View. Αφού σχεδιάσετε τις εικόνες του
Chris που ξύνεται, πηγαίνετε κατά τα γνω-
στά από το Project Tree στο Sprites, κάντε
δεξί κλικ σε κάποιο κενό σημείο και επι-
λέξτε Import new sprite from file. Επανα-
λάβετε τη διαδικασία για κάθε μία από τις
εικόνες. Στη συνέχεια, πάντα στο Project
Tree κάντε δεξί κλικ στο Views και επιλέξ-
τε New View. Τέλος, πιέστε το κουμπί
Create new loop και όσες φορές χρειαστεί
το Create new frame για να εισαγάγετε τα
καρέ του animation που επιθυμείτε. Στη
δική μας περίπτωση, η View που μόλις δη-
μιουργήσαμε πήρε τον αριθμό 5. Ανοίγου-
με πάλι το Global Script, βρίσκουμε τη συ-
νάρτηση dialog_request και πληκτρολο-
γούμε:
function dialog_request(int param) {
Η συνάρτηση dialog_request.
Η unhandled_event μας διευκολύνει στον ορισμό αντιδράσεων σε τυχαίες ενέργειες.
Οι παράμετροι της unhandled_event.