Page 134 - PC Master τ. 283

PC Master
134
προηγούμενα μαθήματα ή δημιουργήστε
ένα καινούργιο, εάν θέλετε. Από τα Room
details επιλέξτε Show this room’s-
>Regions. Θυμηθείτε ότι θέλουμε να αντι-
στοιχίσουμε τις εξόδους μας με το 6ο
region, επομένως στο Project Grid επιλέξ-
τε το Region ID 6. Με τα εργαλεία ζωγρα-
φικής σχεδιάστε μία περιοχή του δωματί-
ου που θέλετε να ορίσετε ως exit region.
Είναι σημαντικό να κατανοήσουμε πως
εδώ δεν ορίζουμε την έξοδο αυτή καθαυ-
τή, όπως, για παράδειγμα, μία πόρτα, αλ-
λά την περιοχή της οθόνης μας στην
οποία ο cursor θα αλλάζει στο εικονίδιο
της εξόδου, ώστε να αντιλαμβάνεται ο
παίκτης ότι από εκεί μπορεί να αποχωρή-
σει από το δωμάτιο. Οι δύο περιπτώσεις
άλλοτε θα είναι ίδιες και άλλοτε όχι. Είναι
στη διακριτική σας ευχέρεια να το αποφα-
σίσετε, και βέβαια πάντα θα το κάνετε
αφού προβείτε σε δοκιμές τρέχοντας το
παιχνίδι. Ο κανόνας είναι ότι φροντίζουμε
οι έξοδοί μας να είναι όσο το δυνατόν πιο
ευδιάκριτες, χωρίς όμως να ενεργοποιού-
νται κατά λάθος από τον παίκτη τη στιγμή
που προσπαθεί να επιχειρήσει κάποια
ενέργεια σε hotspot ή object.
Πάμε να δούμε τώρα πώς θα γράψουμε
στον κώδικά μας την πληροφορία. Στο
προηγούμενο τεύχος συζητήσαμε για τις
predefined global script functions, δηλα-
δή για τις έτοιμες εντολές που αντιλαμ-
βάνεται το AGS και τις οποίες χρησιμοποι-
ούμε στο Global script. Σήμερα θα μάθου-
με μία από τις σημαντικότερες εντολές
τέτοιου τύπου, τη repeatedly_execute.
Πρόκειται για μία εξαιρετικά χρήσιμη
function, η οποία εκτελείται διαρκώς –τυ-
πικά, περίπου 40 φορές το δευτερόλεπτο–
όποτε το παιχνίδι μας δεν είναι blocked
από κάποια εντολή και συνεπώς μας δίνει
τη δυνατότητα να ελέγχουμε οτιδήποτε
συμβαίνει και να πράττουμε αναλόγως,
ανεξάρτητα από το δωμάτιο στο οποίο
βρισκόμαστε ή οποιαδήποτε άλλη παρά-
μετρο του παιχνιδιού. Στο Project Grid
επιλέξτε Scripts και κάντε διπλό κλικ στο
GlobalScript.asc. Αποφασίστε σε ποιο ση-
μείο θέλετε να βάλετε τη συνάρτησή σας
π.χ., αμέσως μετά την game_start()– και
πληκτρολογήστε τα παρακάτω:
#
sectionstart repeatedly_execute
function repeatedly_execute() {
if (Region.GetAtRoomXY(mouse.x,
mouse.y)==region[6])
mouse.Mode=eModeUsermode1;
else mouse.Mode=eModeWalkto;
}
Ας δούμε λίγο αναλυτικά τι γράψαμε
μόλις τώρα. Ορίζουμε –δεν δημιουργούμε
από την αρχή, αφού είναι predefined
function– τη συνάρτηση repeatedly_
execute. Εξετάζουμε αν η region που βρί-
σκεται κάτω από το mouse cursor μία δε-
δομένη στιγμή έχει τον αριθμό 6 και αν
συμβαίνει αυτό, αλλάζουμε το mode στον
cursor της εξόδου που δημιουργήσαμε
νωρίτερα. Σε διαφορετική περίπτωση, επα-
ναφέρουμε τον cursor στο default mode.
Τρέξτε το παιχνίδι και βεβαιωθείτε ότι ο
cursor έχει τη συμπεριφορά που επιθυμεί-
τε όταν τοποθετείται στη γενική περιοχή
μίας εξόδου. Εάν θέλετε, μπορείτε να
αντιστοιχίσετε περισσότερες regions σε
εξόδους δωματίων, ώστε να μην υποχρεώ-
νεστε να χρησιμοποιείτε την ίδια σε πολ-
λαπλά σημεία της ίδιας οθόνης.
ΔΗΜΙΟΥΡΓΙΑ CUTSCENES
Η πλειοψηφία των adventure games
χρησιμοποιεί τη λογική των cutscenes,
δηλαδή εμβόλιμων σκηνών που παρακο-
λουθεί ο παίκτης χωρίς να έχει τη δυνατό-
τητα να παρέμβει στα δρώμενα. Οι σκηνές
αυτές προχωρούν την ιστορία και δίνουν
μία κινηματογραφική αίσθηση στο παιχνί-
δι. Δεν υπάρχουν γενικοί κανόνες για το
τι πρέπει να περιλαμβάνει μία cutscene,
αφού φυσικά εξαρτάται από το εκάστοτε
adventure. Θα δούμε πώς μπορούμε να
φτιάξουμε μία, συγκεκριμένα την εισαγω-
γή του παιχνιδιού μας. Σε γενικές γραμ-
μές, ο κώδικάς μας δεν παρουσιάζει δια-
φορές σε σχέση με το υπόλοιπο παιχνίδι
όταν δημιουργούμε μία εμβόλιμη σκηνή.
Το μόνο σημείο στο οποίο διαφοροποιεί-
ται, είναι ότι την ξεκινάμε με την εντολή
StartCutscene(CutsceneSkipType). Το
CutsceneSkipType αφορά στον τρόπο με
τον οποίο μπορεί να προσπεράσει ο παί-
κτης την cutscene και να φτάσει στο τέ-
λος της. Υπάρχουν οι εξής επιλογές, ανά-
λογα με το τι θέλουμε να επιτρέψουμε:
eSkipESCOnly
eSkipAnyKey
eSkipMouseClick
eSkipAnyKeyOrMouseClick
eSkipESCOrRightButton
Εννοείται πως σε περίπτωση που δεν
επιθυμούμε να επιτρέψουμε στον παίκτη
να προσπεράσει την εμβόλιμη σκηνή,
απλά δεν χρησιμοποιούμε την εντολή
StartCutscene. Όταν κάνουμε χρήση αυ-
τής, σηματοδοτούμε το τέλος της με την
εντολή τερματισμού EndCutscene(). Επο-
μένως, αν η cutscene έχει ξεκινήσει με
StartCutscene(eSkipESCOnly) και ο παίκτης
πατήσει κατά τη διάρκειά της το πλήκτρο
Escape, θα μεταβεί άμεσα στο σημείο του
κώδικα που έπεται της EndCutscene().
Αντιλαμβάνεστε ότι απαιτείται μεγάλη
προσοχή στη σωστή αλληλουχία των γεγο-
νότων, ώστε να λειτουργήσουν όλα όπως
πρέπει. Αν η εισαγωγή μας κάπου λοξο-
δρομήσει και δεν φτάσει στην εντολή
EndCutscene, το παιχνίδι θα κολλήσει. Ση-
μειώστε επίσης ότι ακόμα κι αν ο παίκτης
προσπεράσει το cutscene, οι εντολές θα
εκτελεστούν κανονικά. Έτσι, αν, για πα-
ράδειγμα, κάποιοι χαρακτήρες ή αντικεί-
μενα αλλάζουν δωμάτιο στο cutscene, αυ-
τό θα ισχύσει ανεξαρτήτως του αν ο παί-
κτης το παρακολουθήσει ή όχι.
TO INTRODUCTION ΤΟΥ PC
MASTER’S SAGA
Το Introduction που θα δημιουργήσου-
με είναι απλό αλλά ουσιώδες: αφού εμ-
Προσοχή στο πού τοποθετούμε τις
StartCutscene και EndCutscene.
Ο μονόλογος του Jerry.
TO TIP
ΤΟΥ ΜΗΝΑ
Θέλετε να βάλετε εξόδους στο δω-
μάτιό σας, αλλά σας δυσκολεύει η
θέση των Edges. Αν αφήσετε πολύ
μεγάλο περιθώριο, ο παίκτης εξέρ-
χεται κατά λάθος, ενώ αν αφήσετε
πολύ μικρό, απαιτούνται πολλές
προσπάθειες για να τα καταφέρει.
Μία πολύ καλή εναλλακτική λύση εί-
ναι να χρησιμοποιήσετε regions και
να βάζετε το χαρακτήρα σας να αλ-
λάζει τοποθεσία όταν πατάει πάνω
σε ένα από αυτά.