PC Master
134
θετήσετε objects για όλα τα επιθυμητά
σημεία του χάρτη σας. Στο Project Grid,
δώστε τους ονόματα που να ταιριάζουν
με τις τοποθεσίες που μαρκάρουν. Στην
αρχή θα απεικονίζονται με το γνωστό
blue cup, γι’ αυτό κάντε διπλό κλικ πάνω
στο καθένα από αυτά για να το αντικατα-
στήσετε με την κόκκινη σημαία. Κατά κα-
νόνα, δεν επιθυμούμε όλα τα σημεία ενός
χάρτη να είναι διαθέσιμα από την πρώτη
στιγμή, αλλά τα αποκαλύπτουμε σταδια-
κά στον παίκτη καθώς προχωρά η ιστορία.
Για το λόγο αυτόν, πατάμε πάνω στα
objects που θέλουμε να ξεκινούν ως κρυ-
φά και από το Project Grid αλλάζουμε την
τιμή Visible σε False.
ΑΝΟΙΓΜΑ ΚΑΙ ΧΡΗΣΗ
Ας δούμε λίγο ποιες καταστάσεις και
ενέργειες εκτός του δωματίου θα επηρεά-
ζουν το χάρτη μας. Κατ’ αρχάς, πρέπει να
δούμε με ποιον τρόπο θα δώσουμε πρό-
σβαση στον παίκτη σε αυτόν. Θα μπορού-
σαμε για παράδειγμα να τον κρατάμε στο
inventory μας. Μια άλλη λύση, την οποία
και θα εφαρμόσουμε εδώ, είναι να ανοίγει
όποτε πατάμε το πλήκτρο Μ. Από το
Project Tree, κάνουμε διπλό κλικ στα
Scripts και διπλό κλικ στο
GlobalScript.asc. Βρίσκουμε τη συνάρτηση
on_key_press και σε κάποιο σημείο της
πληκτρολογούμε:
if (keycode==GetASCIINumber(M))
cChris.ChangeRoom(15);
Σ’ αυτό το σημείο οφείλουμε να επιση-
μάνουμε ένα πιθανό σφάλμα στο οποίο
κινδυνεύουμε να υποπέσουμε. Πρέπει να
έχουμε πάντα στο μυαλό μας ότι χρησι-
μοποιώντας το χάρτη, ο κώδικάς μας
αντιλαμβάνεται πως ο χαρακτήρας αλλά-
ζει δωμάτιο. Αυτό σημαίνει πως αν σε κά-
ποιο δωμάτιο του παιχνιδιού έχετε προ-
βλέψει να εκτελούνται κάποιες εντολές
όταν ενεργοποιείται το event Leave
Room, υπάρχει περίπτωση να κληθούν
μόνο και μόνο επειδή άνοιξε ο χάρτης,
ακόμα κι αν ο παίκτης επιλέξει να παρα-
μείνει στον ίδιο χώρο. Επομένως, μία επι-
πλέον συνθήκη ελέγχου η οποία να κα-
λύπτει αυτή την περίπτωση θα σας είναι
απαραίτητη.
Πώς όμως θα ενεργοποιηθούν τα ση-
μεία του χάρτη όταν μαθαίνει για αυτά ο
παίκτης; Θα χρησιμοποιήσουμε για άλλη
μια φορά τις μεταβλητές. Από το Project
Tree, κάντε διπλό κλικ πάνω στο Global
variables και στη συνέχεια σε κάποιο κε-
νό σημείο της λίστας κάντε δεξί κλικ κι
επιλέξτε Add new variable. Δώστε της το
όνομα MapAquaduct και ορίστε την ως
bool με αρχική τιμή FALSE. Με τον ίδιο
τρόπο, ορίζουμε και τις μεταβλητές που
θα αντιστοιχούν στα υπόλοιπα σημεία που
έχουμε μαρκάρει στο χάρτη, όπως
MapSchool, MapFort και άλλα. Ο Chris θα
μάθει για το υδραγωγείο μιλώντας με τον
επιστάτη. Από το Project Tree πηγαίνουμε
στο Dialogs, δημιουργούμε το σχετικό
διάλογο μεταξύ των δύο αντρών και πλη-
κτρολογούμε:
Chris: You were there that evening,
weren’t you?
Janitor: What if I was? I wasn’t doing
anything wrong!
Chris: Maybe not. But I was told that
you helped the teachers carry some
crates.
Janitor: It was the least I could do.
Those old ladies are very fragile.
Chris: Not to mention generous tippers,
I bet.
narrator: The man eyes you without
responding.
Chris: Tell me where they stored them
and maybe I won’t mention it to the
headmaster.
Janitor: What’s the big secret, anyway?
We took them to the old aquaduct.
GiveScore(9);
MapAquaduct=1;
Return
Απομένει να κάνουμε τα αντικείμενα να
ενεργοποιούνται όταν οι μεταβλητές
παίρνουν την τιμή 1. Επιστρέφουμε στο
δωμάτιο του χάρτη και από το Project
Grid πατάμε το εικονίδιο του κεραυνού
για να μεταβούμε στα events. Πατάμε το
κουμπί που βρίσκεται δίπλα στο Enters
room before fade-in και πληκτρολογού-
με:
if (MapAquaduct==1)
oAquaduct.Visible=1;
if (MapFort==1) oFort.Visible=1;
if (MapSchool==1) oSchool.Visible=1;
Τέλος, φροντίζουμε κάθε ενεργό ση-
μείο του χάρτη να οδηγεί στην αντίστοιχη
τοποθεσία όταν ο παίκτης κάνει use επά-
νω του. Πατήστε πάνω στο object του
υδραγωγείου και στο Project Grid πηγαί-
νετε στα events του. Πατήστε το κουμπί
δίπλα στο Interact object και στη συνάρ-
τηση oAquaduct_Interact() που θα δημι-
ουργηθεί πληκτρολογήστε:
player.ChangeRoom(3, 98, 145);
player.FaceLocation(98, 100);
Επαναλαμβάνοντας την ίδια διαδικασία
για όλα τα σημεία, θα έχουμε κάνει όλες
τις απαραίτητες ενέργειες ώστε ο παίκτης
να μπορεί να έχει στη διάθεσή του ένα
πλήρως λειτουργικό χάρτη. Μάλιστα, αν
θέλουμε να το κάνουμε κάπως πιο κομψό,
θα ήταν καλύτερα να τον ενημερώνουμε
όταν ανοίγει μία καινούργια τοποθεσία,
ώστε να μη διαφύγει της προσοχής του. Ο
καλύτερος τρόπος για να το κάνουμε αυ-
τό είναι με ένα ηχητικό εφέ. Πάμε πρώτα
να το εισαγάγουμε στο παιχνίδι. Από το
Project Tree, πηγαίνουμε στο Audio κι επι-
λέγουμε με δεξί κλικ Sounds->Add audio
file(s). Βρίσκουμε το αρχείο που θέλουμε
στον υπολογιστή μας, έστω aMap. Δια-
γράφουμε τις εντολές που είχαμε εισαγά-
γει στο event Enters room before fade-in,
και πληκτρολογούμε στο Enters room
after fade-in τα παρακάτω:
if ((MapAquaduct==1) &&
(
oAquaduct.Visible==0)) {
GiveScore(4);
Wait(100);
aMap.Play();
oAquaduct.Visible=1;
}
if ((MapFort==1) &&
(
oFort.Visible==0)) {
GiveScore(4);
Wait(100);
aMap.Play();
oFort.Visible=1;
}
if ((MapSchool==1) &&
(
oSchool.Visible==0)) {
GiveScore(4);
Wait(100);
aMap.Play();
TO TIP ΤΟΥ ΜΗΝΑ
Θέλετε να δώσετε μία πρωτότυπη νότα στο συνεχή χάρτη που θα δημιουργήσε-
τε; Δοκιμάστε την εξής ιδέα: Θέστε τη μεταβλητή ShowPlayerCharacter σε true
και βάλτε ένα πολύ μικρό νούμερο zoom στη walkable area. Έτσι, ο παίκτης θα
βλέπει μία μινιατούρα του χαρακτήρα του την οποία θα μπορεί να μετακινεί στο
χάρτη. Μάλιστα, ενεργοποιώντας το Keyboard Movement module που περιγρά-
ψαμε στο τεύχος Αυγούστου, μπορούμε να προσφέρουμε χειρισμό του tiny
Chris με το πληκτρολόγιο, κάτι που θα το κάνει ακόμα πιο διασκεδαστικό.
Άνοιγμα τοποθεσιών με ταυτόχρονη ειδοποίη-
ση σε παίκτη.