«Πλήκτρα προσαρμοσμένης ρύθμισης»: ώστε κάθε παίκτης να μπορεί να παίξει το παιχνίδι σου, όποιον CPC ή emulator κι αν διαθέτει

Γεια σε όλους,

Πολλά παιχνίδια του CPC είναι υπέροχα, κι όμως ένα μεγάλο ποσοστό παικτών δεν μπορεί να τα ευχαριστηθεί άνετα. Όχι εξαιτίας του ίδιου του παιχνιδιού, αλλά εξαιτίας των πλήκτρων που χρησιμοποιεί. Το έθιξα αυτό στο Why make such great games if most people can’t play them properly?, και θα ήθελα να το πας παραπέρα: να περιγράψω τα προβλήματα και να προτείνω μια λύση.

Ο στόχος: η άνεση του παίκτη

Κάθε παίκτης έχει τις συνήθειές του, και ένα παιχνίδι είναι άνετο όταν προσαρμόζεται σε αυτές. Για παράδειγμα:

  • αριστερό χέρι για αριστερά/δεξιά και δεξί χέρι για πάνω/κάτω, ή το αντίστροφο,
  • ένας ρόμβος (διαμόρφωση διαμαντιού) κάτω από το ένα χέρι,
  • τα πλήκτρα κέρσορα (βελάκια),
  • ένα χειριστήριο (joystick),
  • το πλήκτρο βολής κοντά στον αντίχειρα, ή κάτω από το μικρό δάχτυλο.

Ένα παιχνίδι που δέχεται μόνο μία από αυτές τις συνήθειες αναγκάζει όλους τους άλλους να «επανεκπαιδεύσουν» τα χέρια τους ή να παραιτηθούν. Ένα παιχνίδι που τις δέχεται όλες ταυτόχρονα δεν χρειάζεται επαναορισμό πλήκτρων: κάθε παίκτης απλά παίζει όπως έχει ήδη συνηθίσει.

Τι πάει στραβά

Ακόμα κι ένα παιχνίδι που προσφέρει καλά πλήκτρα μπορεί να τα «χάσει» στο σύστημα ενός άλλου χρήστη.

Γράμματα που μετακινούνται. Τα WASD, QAOP και τα συναφή προϋποθέτουν πληκτρολόγιο QWERTY. Στο AZERTY (Γαλλικοί CPC, Γαλλικά PC), τα A και Q αλλάζουν θέσεις, το ίδιο και τα Z και W, ενώ το M μετακινείται. Στο QWERTZ (Γερμανικά PC), τα Y και Z αλλάζουν μεταξύ τους. Ένα παιχνίδι που παίζεται με QAOP γίνεται σπαζοκεφαλιά σε ένα γαλλικό πληκτρολόγιο πριν καν ξεκινήσει.

Πλήκτρα που ένας εξομοιωτής πρέπει να τοποθετήσει κάπου. Τα COPY, CLR και τα f0 έως f9 του αριθμητικού πληκτρολογίου δεν έχουν προφανή θέση σε ένα πληκτρολόγιο PC, πόσο μάλλον σε ένα laptop. Σήμερα δοκίμασα το My Roland, ένα παιχνίδι υπό ανάπτυξη, όπου το άλμα γίνεται με το COPY. Ανάλογα με τον εξομοιωτή, το COPY καταλήγει στο Alt ή στο Insert. Δεν είμαι καν σίγουρος αν θα το έλεγα καν υποτυπωδώς παιξίσιμο.

Ενδιάμεσα επίπεδα (layers). Ανάμεσα στο δάχτυλο του παίκτη και στο παιχνίδι σας μπορούν να παρεμβάλλονται: η διάταξη πληκτρολογίου του συστήματος, το λειτουργικό σύστημα, ένας browser, η αντιστοίχιση του εξομοιωτή (βάσει θέσης ή βάσει συμβόλου, αυτό που ο Arnoldemu αποκαλεί «translated»), μερικές φορές ακόμα και μια απομακρυσμένη επιφάνεια εργασίας (remote desktop). Κάθε επίπεδο μπορεί να μετακινήσει ένα πλήκτρο. Η ανάγνωση των φυσικών θέσεων των πλήκτρων θα έλυνε ένα μέρος του προβλήματος, σε ένα λογικό περιβάλλον· σε πολλές ρυθμίσεις όμως, η διεπαφή απλά δεν τις παρέχει και το πρόγραμμα μαθαίνει μόνο ποιο σύμβολο πληκτρολογήθηκε.

Στον browser τα πράγματα μπορεί να γίνουν χειρότερα. Με τη ρύθμιση «resist fingerprinting» του Firefox, η σελίδα ενημερώνεται ότι το πληκτρολόγιο είναι ένα τυπικό (πιθανότατα αμερικανικό), όποιο κι αν είναι στην πραγματικότητα. Δοκίμασα έναν εξομοιωτή CPC μέσα σε σελίδα με αυτόν τον τρόπο από ένα γαλλικό πληκτρολόγιο: όλα τα γράμματα ήταν μια χαρά, αλλά τα πλήκτρα των ψηφίων έδιναν λάθος χαρακτήρες ή τίποτα απολύτως, και δεν μπορούσα καν να πληκτρολογήσω το " (λεπτομέρειες).

Το αποτέλεσμα: ένα παιχνίδι λειτουργεί τέλεια στο σύστημα του δημιουργού του, αλλά είναι δύσχρηστο ή μη παιξίσιμο στο σύστημα κάποιου άλλου.

Μια προτεινόμενη λύση: πλήκτρα για κάθε σύστημα (any-setup keys)

Το ονομάζω any-setup keys: ένα σετ πλήκτρων που ταιριάζει σε κάθε παίκτη, ανεξάρτητα από τις συνήθειές του και ανεξάρτητα από το σύστημά του: πραγματικός CPC σε οποιαδήποτε γλώσσα, εξομοιωτής σε υπολογιστή, εξομοιωτής στο web. Δύο κανόνες, με τον πρώτο να είναι ο πιο σημαντικός:

  1. Χρησιμοποιείτε μόνο γράμματα που μένουν στη θέση τους. Αυτά βρίσκονται στην ίδια θέση σε QWERTY, AZERTY και QWERTZ: B C D E F G H I J K L N O P R S T U V X. Αποφύγετε τα A Z Q W M (μετακινούνται στο AZERTY) και το Y (αλλάζει θέση με το Z στο QWERTZ). Ένα γράμμα από αυτή τη λίστα βρίσκεται πάντα στη θέση του, είτε ο εξομοιωτής αντιστοιχίζει βάσει θέσης είτε βάσει συμβόλου.
  2. Δώστε σε κάθε σημαντική λειτουργία عدة πλήκτρα, συμπεριλαμβανομένων πλήκτρων που διαθέτει κάθε πληκτρολόγιο. Ενέργεια στη βολή (fire), στο space bar, στο RETURN, στο ENTER και στο COPY. Μενού ή παύση στο ESC, στη δεύτερη βολή (second fire), και στο P για συμβατότητα με το GX-4000.

Πώς να επιλέξετε αυτά τα πολλαπλά πλήκτρα: ικανοποιήστε κάθε συνήθεια ταυτόχρονα. Χειριστήριο, πλήκτρα κέρσορα, ένα χέρι ανά άξονα και προς τις δύο κατευθύνσεις, ένας ρόμβος, οι συστάδες πλήκτρων που οι παίκτες γνωρίζουν ήδη· βολή κάτω από τον αντίχειρα και κάτω από το μικρό δάχτυλο. Κανείς δεν χρειάζεται να αναορίσει τίποτα: απλά ξεκινάτε και παίζετε.

Δεν χρειάζεται να γράψετε κώδικα για επαναορισμό πλήκτρων. Οι παίκτες δεν χρειάζεται να αλλάξουν τίποτα, οπότε δεν χρειάζεται να γράψετε, να δοκιμάσετε και να βρείτε μνήμη για ένα μενού επαναορισμού, ούτε οι παίκτες χρειάζεται να περάσουν από αυτό πριν παίξουν. Τίποτα δεν σας εμποδίζει να προσφέρετε και ένα τέτοιο μενού, αλλά κανένας παίκτης δεν θα πρέπει να το έχει ανάγκη.

Παράδειγμα: το σετ πλήκτρων του Just Get 9

Ορίστε τι δέχεται το Just Get 9, όλα ταυτόχρονα:

  • Κίνηση, όποιο συνδυασμό κι αν προτιμούν τα χέρια σας:
    • πλήκτρα κέρσορα
    • joystick 1 ή joystick 2
    • ένα χέρι ανά άξονα, με οποιαδήποτε σειρά: αριστερό χέρι στα V/B για αριστερά/δεξιά με δεξί χέρι στα O/K για πάνω/κάτω, ή αριστερό χέρι στα D/C για πάνω/κάτω με δεξί χέρι στα H/J για αριστερά/δεξιά
    • ένας ρόμβος κάτω από το δεξί χέρι: U πάνω, N κάτω, H αριστερά, J δεξιά
    • μια γραμμή τύπου ZX: 4 αριστερά, 5 κάτω, 6 πάνω, 7 δεξιά (τα 5678 του ZX Spectrum μετακινημένα ένα πλήκτρο αριστερά, ώστε τα 5 και 6 να διατηρούν τη σημασία τους από το joystick 2)
    • τα πλήκτρα του joystick 2 του Amstrad: 6 πάνω, 5 κάτω, R αριστερά, T δεξιά
  • Ενέργεια: κάτω από τον αντίχειρα (space bar, COPY, ENTER), κάτω από το δεξί μικρό δάχτυλο (RETURN), κάτω από το δείκτη (G, Y για “yes”), ή βολή (fire)
  • Μενού: δεύτερη βολή (second fire), ESC, P (το κουμπί παύσης του GX-4000), F (δεύτερη βολή του joystick 2)

Όπου δύο συστήματα μοιράζονται ένα πλήκτρο, του δίνουν την ίδια σημασία, επομένως ο συνδυασμός τους δεν σας εκπλήσσει ποτέ. Σχεδιασμένο σε ένα πληκτρολόγιο CPC6128 (● ενέργεια, □ μενού):

┏━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓
┃ □ ┃   ┃   ┃   ┃ ← ┃ ↓ ┃ ↑ ┃ → ┃   ┃   ┃   ┃   ┃   ┃   ┃   ┃   ┃   ┃   ┃
┣━━━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━━━╋━━━╋━━━╋━━━⫸
┃     ┃   ┃   ┃   ┃ ← ┃ → ┃ ● ┃ ↑ ┃   ┃ ↑ ┃ □ ┃   ┃   ┃     ┃   ┃   ┃   ┃
┣━━━━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┳━━┻┓ ●  ┣━━━╋━━━╋━━━⫸
┃      ┃   ┃   ┃ ↑ ┃ □ ┃ ● ┃ ← ┃ → ┃ ↓ ┃   ┃   ┃   ┃   ┃    ┃   ┃   ┃   ┃
┣━━━━━━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━┳━┻━━━━╋━━━╋━━━╋━━━⫸
┃        ┃   ┃   ┃ ↓ ┃ ← ┃ → ┃ ↓ ┃   ┃   ┃   ┃   ┃   ┃      ┃   ┃ ↑ ┃   ┃
┣━━━━━━━━╋━━━┻━━┳┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┳┻━━━┻━━━━━━╋━━━╋━━━╋━━━⫸
┃        ┃  ●   ┃               ●               ┃     ●     ┃ ← ┃ ↓ ┃ → ┃
┗━━━━━━━━┻━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━┻━━━┻━━━┻━━━┛

Υπάρχουν δύο ειλικρινείς εξαιρέσεις σε αυτό το σετ. Το Y παραβιάζει τον κανόνα 1: στο QWERTZ απλά δεν κάνει τίποτα, και υπάρχουν άλλα έξι πλήκτρα ενέργειας. Τα πλήκτρα των ψηφίων χρειάζονται Shift σε ένα πληκτρολόγιο AZERTY: αυτό είναι εντάξει σε έναν πραγματικό CPC και με αντιστοίχιση βάσει θέσης, αλλά μπορεί να αποτύχει σε έναν εξομοιωτή web, όπως στην περίπτωση του «resist fingerprinting» παραπάνω. Γι’ αυτόν τον λόγο δεν είναι ποτέ ο μοναδικός τρόπος μετακίνησης.

Χρειάζεται να τα γνωρίζουν όλα αυτά οι παίκτες; Το Just Get 9 δεν τα αναφέρει καν μέσα στο παιχνίδι· το README στη λήψη περιέχει τη λίστα και το διάγραμμα παραπάνω, και κανείς δεν έχει παραπονεθεί. Οι παίκτες που έχουν συγκεκριμένες συνήθειες εξερευνούν το πληκτρολόγιο και βρίσκουν κάτι που λειτουργεί για αυτούς.

Η σειρά σας

  • Αν γράφετε παιχνίδια: παρακαλώ σκεφτείτε ένα σετ πλήκτρων κατάλληλο για κάθε σύστημα (any-setup). Αυτό του Just Get 9 είναι ένα παράδειγμα· το δικό σας μπορεί να διαφέρει, αρκεί να ακολουθεί τους δύο κανόνες.
  • Αν παίζετε: ποια παιχνίδια σας δημιούργησαν προβλήματα στο σύστημά σας (γλώσσα πληκτρολογίου, εξομοιωτής, εξομοιωτής web); Ποια λειτουργούν απλά και άψογα; Θα ήθελα να τα συγκεντρώσω αυτά και ίσως να μετατρέψω το αποτέλεσμα σε μια σελίδα στο CPCWiki.
  • Αν γράφετε εξομοιωτές: αυτό είναι ένα σχετικό αλλά διαφορετικό θέμα, η αντιστοίχιση πλήκτρων βάσει συμβόλων. Έγραψα γι’ αυτό στο Introducing in-page emulator on wiki pages.

Ευχαριστώ για την ανάγνωση και καλό (και άνετο σε κάθε σύστημα) παιχνίδι!

7 «Μου αρέσει»

Αυτό είναι πραγματικά εντυπωσιακό post!

Και συμφωνώ απόλυτα, θα ήταν εξαιρετικό αν τα παιχνίδια που φτιάχνονται τώρα προσέφεραν όσο το δυνατόν περισσότερα διαφορετικά συστήματα χειρισμού.

Και η χρήση του joypad μαζί με το fire1 και το fire2 σημαίνει ότι λειτουργεί στο GX4000 χωρίς κανένα πρόβλημα.

1 «Μου αρέσει»

Ναι, πλέον κάνω όλα τα παιχνίδια μου να έχουν πλήρως παραμετροποιήσιμα χειριστήρια πληκτρολογίου, καθώς και τα αντίστοιχα για joystick/χειριστήριο. Επαναχρησιμοποιώ τα ίδια modules και μεθόδους για αυτό το σκοπό από παιχνίδι σε παιχνίδι, βελτιστοποιώντας και βελτιώνοντάς τα καθώς τα ξαναχρησιμοποιώ.

2 «Μου αρέσει»

Eιλικρινά πιστεύω ότι η επιλογή επαναορισμού πλήκτρου είναι μια απλή, ευέλικτη λύση και δεν πιάνει πραγματικά πολύ χώρο στη μνήμη.

4 «Μου αρέσει»

Συμφωνώ, αλλά για την κονσόλα πρέπει να υπάρχει μια επιλογή όπου μπορείς να ξεκινήσεις το παιχνίδι χωρίς πληκτρολόγιο από προεπιλογή.

2 «Μου αρέσει»

Ένα τέτοιο σχήμα πλήκτρων κάνει τη ρύθμιση του πληκτρολογίου παιχνιδάκι — απλά δεν υπάρχει τίποτα προς ρύθμιση, μπορεί κανείς να ξεκινήσει αμέσως το παιχνίδι. Ωστόσο, υπάρχουν δύο επιπλέον πράγματα που πρέπει να λάβετε υπόψη:

  • Αν ο βρόχος του παιχνιδιού (game loop) είναι ιδιαίτερα απαιτητικός σε χρόνο, τότε ίσως βοηθούσε να παρακολουθούνται όσο το δυνατόν λιγότερα πλήκτρα, απλώς για να εξοικονομηθεί λίγος χρόνος επεξεργασίας, αν και δεν θα είναι πολύς.
  • Χρειάζεται προσεκτική εξέταση, αλλά όσο περισσότερα πλήκτρα λαμβάνονται υπόψη, τόσο περισσότερα πλήκτρα-φαντάσματα (ghost keys) μπορούν να εμφανιστούν. Αυτό συνήθως δεν συμβαίνει σε έναν εξομοιωτή, αλλά σε πραγματικό εξοπλισμό (hardware) μπορεί να αποτελέσει πρόβλημα.
1 «Μου αρέσει»

Aπολύτως, αλλά αυτό δεν είναι ιδιαίτερα δύσκολο. Απλώς επέλεξα το «Fire για έναρξη/ESC για ορισμό πλήκτρων». Και το έκανα έτσι ώστε να μην μπορείς να ορίσεις το πλήκτρο ESC ως κουμπί βολής και να κολλήσεις. Δεν νομίζω ότι χρειάζεται κανείς το ESC για να ρίξει. Όταν χρησιμοποιείς χειριστήριο (joystick), μπορείς να μπεις απευθείας στο παιχνίδι.

Ένα από τα πλεονεκτήματα της επιλογής επαναορισμού πλήκτρων, πέρα από το ότι είναι εξαιρετικά ευέλικτη, είναι ότι λύνει κάθε αμφιβολία σχετικά με το ποια είναι τα πλήκτρα. Το παραπάνω σύστημα χειρισμού είναι αρκετά περίπλοκο να εξηγηθεί.

4 «Μου αρέσει»

Συμφωνώ 100%. Τα πλήκτρα δεν θα έπρεπε να αποτελούν προαπαιτούμενο για κανένα παιχνίδι που δεν τα χρειάζεται κατά τη διάρκεια του ίδιου του gameplay.

Ως ελάχιστη απαίτηση, ο χειρισμός με Joystick θα έπρεπε πάντα να υποστηρίζεται και το κουμπί βολής (fire) να είναι πάντα η επιλογή για την εκκίνηση του παιχνιδιού. Ιδανικά, σε συνδυασμό με μια τυπική διάταξη εναλλακτικού χειρισμού μέσω πληκτρολογίου, η οποία να μπορεί να επαναοριστεί για όσους προτιμούν διαφορετικά πλήκτρα ή πρέπει να αντιμετωπίσουν τα πολλά προβλήματα που προκύπτουν από τον τρόπο που οι εξομοιωτές (emulators) αντιστοιχίζουν τα πλήκτρα.

1 «Μου αρέσει»

Eυχαριστώ όλους για τα σχόλιά σας!

TL;DR: Ένα παιχνίδι είναι ένα είδος θεάματος, πρέπει να τρέχει όσο πιο ομαλά γίνεται. Επίσης, η παράξενη επιλογή στο Batman των Ritman και Drummond και σε παρόμοια ισομετρικά παιχνίδια.


Όταν έπαιζα στο CPC μου, προτιμούσα συντριπτικά τα παιχνίδια που επέτρεπαν τον επαναορισμό των πλήκτρων.

Ίσως το κάνω αυτό για το/τα μελλοντικό/ά παιχνίδι(α) μου. Η απλότητα παραμένει επιθυμητή.

Ναι, εξαιρετική προσέγγιση! Επιτρέπεις πολλαπλά πλήκτρα για την ίδια ενέργεια;

Λοιπόν, εφόσον ο εξομοιωτής απομιμείται πατήματα πλήκτρων στο εικονικό πληκτρολόγιο του εξομοιούμενου CPC, παίρνεις πάντα τα «πλήκτρα-φαντάσματα» (ghost keys) από τη πλευρά του CPC, και ίσως μερικά ακόμη ζητήματα με τη ρύθμιση της εξομοίωσης.

:keyboard: Mεταξύ μας, η καλωδίωση του πληκτρολογίου του CPC επιλέχθηκε για να αποφεύγονται τα ghosts για τα joystick, αλλά όχι τόσο για τα βέλη. Γνωρίζατε ότι πατώντας το αριστερό βέλος, το πάνω βέλος και το copy, δημιουργείται ένα ghost «δεξί βέλος»; Μπορείτε να το ελέγξετε σε οποιονδήποτε εξομοιωτή: ενεργοποιήστε τον, πατήστε γρήγορα αριστερό, πάνω, copy και μετά αφήστε τα. Χωρίς ghost ο δρομέας θα βρισκόταν στη δεξιότερη στήλη, ενώ αντίθετα βρίσκεται στο R του ready.

Αυτό μπορεί να είναι ένα επιχειρήμα υπέρ μιας σταθερής διάταξης, καλά μελετημένης ώστε να αποφεύγονται τα ghosts.
Ή μιας ρουτίνας «επαναορισμού πλήκτρων» που προειδοποιεί το χρήστη για ghosts και προτείνει λύσεις.


Θυμάστε την παράξενη αλληλεπίδραση στο μενού του «Batman» (και παρόμοιων παιχνιδιών από την ίδια ομάδα);

  • Σε όλο το μενού, ENTER για επιλογή επιλογής (για την ακρίβεια το μεγάλο κεντρικό πλήκτρο RETURN, όχι το ENTER του αριθμητικού πληκτρολογίου).
  • Οποιοδήποτε πλήκτρο για μετακίνηση του δρομέα (προς τα κάτω).

  • Κατά τον επαναορισμό των πλήκτρων, SHIFT για ολοκλήρωση.
  • Ένα καλό στοιχείο, για κάθε μία από τις ενέργειες (κατευθύνσεις, άλμα, μεταφορά, παύση) μπορούσες να ορίσεις πολλά πλήκτρα.

Καταλαβαίνω ότι έχει την ιδιότητα πως, όποια κι αν είναι η ρύθμιση, αν μπορείς να πατήσεις Enter και αρκετά άλλα πλήκτρα, είσαι εντάξει.

Όμως, ήταν άβολο στην πλοήγηση, απαιτούσε πολλά πατήματα πλήκτρων για τον επαναορισμό τους, και έπρεπε να περνάς από αυτή τη διαδικασία σε κάθε φόρτωση του παιχνιδιού για να ορίσεις πλήκτρα ή να ρυθμίσεις τον ήχο (η προεπιλεγμένη επιλογή, εύστοχα ονομασμένη «nasty», είχε αυτή τη συνεχή μελωδία ενώ περπατούσες όλη την ώρα) και την «ευαισθησία». Μου φαινόταν τόσο παράξενο και σαν αγγαρεία να το κάνω ξανά κάθε φορά που φορτωνόταν το παιχνίδι.


Επιστρέφοντας σε μια πιο γενική θεώρηση, δεν ξέρω πραγματικά πόσο περιορισμός είναι για τον παίκτη το να προσφέρει ένα παιχνίδι μια σταθερή διάταξη πολλών πλήκτρων για διάφορες συνήθειες, όπως έκανα στο Just Get 9 και πρότεινα στο πρώτο post του θέματος. Κανείς δεν το σχολίασε αυτό μέχρι στιγμής.

Ανατροπή: όταν δοκίμασα το Just Get 9 στον browser σε ένα Android τηλέφωνο (άρα, χωρίς πληκτρολόγιο), το εικονικό πληκτρολόγιο του Android δεν προσέφερε βέλη, αλλά μπορούσα να πληκτρολογήσω γράμματα και να πατήσω «Enter» για να τα στείλω και λειτούργησε. :sweat_smile: .

1 «Μου αρέσει»