Πηγαίος κώδικας ρυθμικού παιχνιδιού: νότες, χρονισμός και τραγούδια
Πώς το Riffvolt αποθηκεύει 12 κομμάτια και 48 παρτιτούρες, πού αποφασίζονται ο χρονισμός και η βαθμολογία, και τι χρειάζεται για να προσθέσετε δικό σας τραγούδι.

Ο πηγαίος κώδικας ρυθμικού παιχνιδιού είναι στην ουσία δύο πράγματα: ο κώδικας που κρίνει τον χρονισμό και τα δεδομένα που λένε πότε φτάνει κάθε νότα. Οι αγοραστές σχεδόν πάντα θέλουν να αλλάξουν το δεύτερο, γιατί τα νέα τραγούδια κάνουν ένα ρυθμικό παιχνίδι δικό τους. Το Riffvolt, το πρότυπο ροκ ρυθμικού με τέσσερις λωρίδες μας, κρατά τον κατάλογο τραγουδιών σε ένα manifest και κάθε παρτιτούρα νοτών σε δικό της αρχείο, οπότε η προσθήκη τραγουδιού είναι δουλειά δεδομένων με σαφή λίστα ελέγχου.
Αυτός ο οδηγός περνά από το πακέτο: τι παίζει, πού ζουν ο χρονισμός και η βαθμολογία, πώς προσθέτετε τραγούδι, πώς χτίζετε ξανά και φιλοξενείτε, τι επιτρέπει η άδεια και τι αφήνει έξω η έκδοση. Τα ονόματα αρχείων προέρχονται από τον οδηγό αγοραστή που συνοδεύει το παιχνίδι.
Ένα γεγονός να κρατήσετε από την αρχή: σε αντίθεση με κάποια από τα πρότυπά μας, το Riffvolt χρειάζεται νέο build αφού αλλάξετε τον πηγαίο κώδικα ή προσθέσετε τραγούδια. Η φιλοξενία του παρεχόμενου φακέλου παιχνιδιού δεν χρειάζεται τίποτα πέρα από στατικό web host.
Τι παίζει αυτός ο πηγαίος κώδικας ρυθμικού παιχνιδιού
Το Riffvolt είναι έτοιμο ροκ ρυθμικό παιχνίδι τεσσάρων λωρίδων για τον browser. Οι παίκτες πατούν νότες στον χρόνο τους, κρατούν τις μεγάλες νότες ως το τέλος, τις κάμπτουν με το whammy (μοχλό κάμψης) και γεμίζουν ένα ROCK gauge (μετρητή ROCK) που ξεκινά το overdrive (υπερφόρτωση), μια παράσταση φωτισμού που δεν προσθέτει πόντους και τελειώνει με οποιαδήποτε αστοχία. Η ακρίβεια του χρονισμού χτίζει σκορ και combo.
- 12 πλήρη κομμάτια, καθένα με παρτιτούρες Easy (εύκολο), Normal (κανονικό) και Hard (δύσκολο), και επιπλέον το Rock God, που ανοίγει μετά την περιοδεία: 48 παρτιτούρες νοτών συνολικά.
- Μια περιοδεία μέσα από τέσσερις σκηνές, Garage (γκαράζ), The road, Festival και Arena, με τρία τραγούδια η καθεμία. Τα αστέρια από τις δύο πρώτες ανοίγουν το encore (έξτρα κομμάτι), και η ολοκλήρωση του encore ανοίγει την επόμενη σκηνή, με σκηνές ιστορίας και καλλυντικές ανταμοιβές, όπως ουρές και πλαίσια.
- Ελεύθερο παιχνίδι (Free play): οποιοδήποτε τραγούδι σε οποιαδήποτε δυσκολία, με προσωπικά ρεκόρ αποθηκευμένα ανά τραγούδι στον browser.
- Χειριστήρια: D, F, J και K από προεπιλογή, πάτημα των λωρίδων σε οθόνη αφής, ή gamepad. Οι αντιστοιχίσεις πλήκτρων βρίσκονται στις Ρυθμίσεις (Settings).
- Άνεση: βαθμονόμηση ήχου για την απόκλιση, που βοηθά με ακουστικά Bluetooth, μειωμένη κίνηση και λειτουργία φωτοευαισθησίας που μειώνει τις αναλαμπές και τις αστραπές.
- 14 γλώσσες διεπαφής.
Δείτε τη σελίδα του Riffvolt, την επίδειξη και τα εγχειρίδια
Πώς είναι οργανωμένα τα αρχεία
Το κατέβασμα περιέχει τον φάκελο game/ (τα αρχεία για ανάπτυξη), τον source/ (το έργο TypeScript), τον documentation/ (εικονογραφημένα εγχειρίδια στα αγγλικά και τα πορτογαλικά) και τον licenses/ (σημειώσεις τρίτων). Μέσα στον source/, η διαίρεση ανάμεσα σε δεδομένα τραγουδιών και λογική παιχνιδιού είναι καθαρή.
- public/manifest.json: ο κατάλογος τραγουδιών, με τη διάρκεια κάθε τραγουδιού, την έκδοση ήχου και τις διαδρομές παρτιτούρων.
- public/charts/: οι 48 παρτιτούρες νοτών.
- public/audio/: οι ηχογραφήσεις των κομματιών.
- src/core/chartValidate.ts: έλεγχος σχήματος παρτιτούρας και χρονισμού.
- src/core/judge.ts: κρίσεις χρονισμού.
- src/core/scoring.ts: κανόνες σκορ και combo.
- src/game/campaign.ts: πρόοδος περιοδείας.
- src/game/session.ts: ο κύκλος ζωής ενός τραγουδιού και ο υπολογισμός αποτελέσματος.
- src/i18n/locales.ts: τα 14 λεξικά διεπαφής.
- src/net/localRecords.js: τοπικά προσωπικά ρεκόρ.
- src/ui/style.css: διεπαφή και responsive διάταξη.
Επειδή ο κριτής και η βαθμολογία είναι ξεχωριστά αρχεία, μπορείτε να κάνετε τα παράθυρα χρονισμού πιο αυστηρά ή πιο επιεική χωρίς να αγγίξετε πώς προστίθενται οι πόντοι, και το ανάποδο. Αυτός είναι ο διαχωρισμός που πρέπει να ψάχνετε σε κάθε κώδικα ρυθμικού παιχνιδιού.
Προσθήκη δικού σας τραγουδιού, βήμα βήμα
Αυτή είναι η αλλαγή για την οποία ρωτούν πρώτα οι αγοραστές ρυθμικών. Δεν υπάρχει επεξεργαστής παρτιτούρας στο πακέτο, άρα οι παρτιτούρες γράφονται ως δεδομένα, και το εγχειρίδιο λέει ακριβώς τι χρειάζεται κάθε αρχείο.
- Βάλτε την ηχογράφηση στο public/audio/. Χρησιμοποιήστε μόνο ήχο για τον οποίο έχετε τα δικαιώματα για το τελικό σας προϊόν.
- Δημιουργήστε μία παρτιτούρα ανά υποστηριζόμενη δυσκολία στο public/charts/. Κάθε παρτιτούρα χρειάζεται το αντίστοιχο songId, difficulty, audioVersion, offset και τις νότες με σειρά.
- Προσθέστε το τραγούδι στο public/manifest.json με ένα μοναδικό id, διάρκεια, BPM, θέμα, audioVersion και τις διαδρομές παρτιτούρων.
- Ελέγξτε κάθε παρτιτούρα με τον validator στο chartValidate.ts.
- Παίξτε ολόκληρο το κομμάτι σε κάθε δυσκολία για να επιβεβαιώσετε τον συγχρονισμό. Ο validator ελέγχει τη δομή και τους κανόνες χρονισμού, όχι αν μια νότα «νιώθεται» σωστά.
- Κάντε build και ανεβάστε το νέο build.
Αν θέλετε ολόκληρο νέο soundtrack αντί για ένα επιπλέον τραγούδι, σχεδιάστε τη δουλειά ανά παρτιτούρα: 12 τραγούδια σε τέσσερις δυσκολίες είναι 48 παρτιτούρες, και καθεμία χρειάζεται πλήρη δοκιμαστική εκτέλεση πριν την κυκλοφορία.
Ανακατασκευή και τι άλλο να αλλάξετε
Συνιστάται Node.js 24 LTS. Μέσα στο source/, τρέξτε npm ci, μετά npm run typecheck και npm run build, και δημοσιεύστε μόνο τα περιεχόμενα του dist/. Το npm run preview σερβίρει το τοπικό build για έλεγχο. Μην ανεβάζετε το node_modules/. Το Vite χρησιμοποιεί σχετική βάση, άρα το build δουλεύει σε υποφάκελο. Το παραδοτέο runtime είναι μορφοποιημένο για ανάγνωση· το εγχειρίδιο ζητά να κρατήσετε minify:false και cssMinify:false όταν ξαναχτίζετε, ώστε ο επόμενος άνθρωπος να μπορεί να το διαβάσει.
- Brand: χρώματα και διάταξη στο src/ui/style.css, συν το λογότυπό σας. Το white label επιτρέπεται, άρα το brand σας μπορεί να αντικαταστήσει το δικό μας.
- Κείμενα: src/i18n/locales.ts, για τις γλώσσες που θα κυκλοφορήσετε.
- Περιοδεία: η σειρά των σκηνών και τι ξεκλειδώνει τι, στο campaign.ts.
- Δυσκολία: παράθυρα χρονισμού στο judge.ts, μετά κανόνες σκορ και combo στο scoring.ts.
- Τραγούδια: τελευταία, γιατί κάθε νέα παρτιτούρα χρειάζεται πλήρη δοκιμαστική εκτέλεση.
Κάντε backup πριν επεξεργαστείτε, αλλάξτε ένα χαρακτηριστικό τη φορά και δοκιμάστε το μενού, ένα τραγούδι, την παύση, την οθόνη αποτελεσμάτων και μια ανανέωση μετά από κάθε αλλαγή. Κρατήστε σταθερά τα item ids και τα κλειδιά αποθήκευσης, ώστε οι υπάρχοντες παίκτες να κρατήσουν τα ρεκόρ τους.
Φιλοξενία ή ενσωμάτωση σε πύλη
Ανεβάστε το περιεχόμενο του game/ σε φάκελο του HTTP(S) host, κρατήστε τις σχετικές διαδρομές και ανοίξτε τη διεύθυνση. Δεν χρειάζεται PHP, βάση δεδομένων ή λογαριασμός. Μην ανοίγετε το index.html μέσω file://· για τοπική δοκιμή, τρέξτε python -m http.server 8765 μέσα στο game/.
- Ο browser χρειάζεται: JavaScript, ES modules, Canvas 2D και Web Audio.
- Οι browsers ξεκλειδώνουν τον ήχο μόνο μετά το πρώτο πάτημα ή κλικ, άρα μια σιωπηλή πρώτη οθόνη είναι φυσιολογική.
- Σε iframe, επιτρέψτε την πλήρη οθόνη και την αυτόματη αναπαραγωγή.
- Σερβίρετε τα .js με τύπο JavaScript MIME, ποτέ ως text/plain.
- Όλα τα assets, οι γραμματοσειρές και οι βιβλιοθήκες εκτέλεσης βρίσκονται μέσα στο build. Δεν υπάρχει υποχρεωτικό CDN, αλλά δεν είναι εφαρμογή εγκατάστασης που λειτουργεί εκτός σύνδεσης.
Οι αποθηκεύσεις ανήκουν στην προέλευση του browser, άρα η μεταφορά του παιχνιδιού σε άλλο domain ξεκινά τους παίκτες από την αρχή. Αυτή η έκδοση χρησιμοποιεί δικά της κλειδιά αποθήκευσης, χωριστά από τις εκδόσεις πύλης μας. Τα έργα εγγενών εφαρμογών δεν περιλαμβάνονται· η κυκλοφορία σε κατάστημα είναι χωριστή δουλειά.
Τι δεν περιλαμβάνει η έκδοση
Το Riffvolt είναι η τοπική έκδοση για browser. Δεν έχει online δωμάτια ή multiplayer, online κατάταξη ή κοινό leaderboard, SDK διαφημίσεων ή λογαριασμό, επεξεργαστή παρτιτούρας, εγγενείς εφαρμογές ή φιλοξενία. Τα προσωπικά ρεκόρ και η πρόοδος της περιοδείας μένουν στον browser του παίκτη.
Αν ένα παιχνίδι μουσικής ταιριάζει στον κατάλογό σας, δύο άλλα πρότυπα βασισμένα στον χρονισμό μας μπορεί να ταιριάζουν δίπλα του.
Pinloop: ένα arcade παιχνίδι χρονισμού με ένα κουμπί και 30 στόχους
Ricopop: ένα arcade παιχνίδι ρικοσέ με 50 επίπεδα
Άδεια και τιμή
Το Riffvolt κοστίζει 49 $. Έως τις 30 Νοεμβρίου 2026 η προσφορά Black Friday κάνει έκπτωση 15%, άρα κοστίζει 41,65 $, και η αγορά δύο ή περισσότερων προτύπων σε μία παραγγελία προσθέτει έκπτωση πακέτου 5% έως 20%. Η άδεια είναι διαρκής και μη αποκλειστική, για ένα τελικό προϊόν, δικό σας ή ενός πελάτη. Μπορείτε να αλλάξετε τον κώδικα, τα γραφικά και τον ήχο, να βάλετε το δικό σας brand και να προσφέρετε το παιχνίδι δωρεάν ή με διαφημίσεις. Χρησιμοποιήστε τα συμπεριλαμβανόμενα κομμάτια ως μέρος αυτού του τελικού προϊόντος· δεν μπορείτε να μεταπωλήσετε το πρότυπο, τον κώδικά του ή τα assets του μόνα τους. Περιλαμβάνονται έξι μήνες υποστήριξης, ή δώδεκα με την επέκταση· νέα τραγούδια, ενσωματώσεις και φιλοξενία προσφέρονται χωριστά.
Διαβάστε τους πλήρεις όρους άδειας
Συχνές ερωτήσεις
Μπορώ να προσθέσω δικά μου τραγούδια στον πηγαίο κώδικα ρυθμικού παιχνιδιού;
Ναι. Προσθέστε τον ήχο, μία παρτιτούρα ανά δυσκολία και μια καταχώριση στο public/manifest.json, επικυρώστε τις παρτιτούρες, παίξτε τις και μετά κάντε build. Δεν περιλαμβάνεται επεξεργαστής παρτιτούρας.
Χρειάζομαι Node.js για να χρησιμοποιήσω το Riffvolt;
Όχι για να φιλοξενήσετε τον παρεχόμενο φάκελο παιχνιδιού. Το Node.js 24 LTS συνιστάται μόνο για να ξαναχτίσετε μετά από αλλαγή στο TypeScript ή προσθήκη τραγουδιών.
Λειτουργεί με οθόνες αφής και gamepads;
Ναι. Οι παίκτες μπορούν να πατούν τις λωρίδες ή να χρησιμοποιούν gamepad, και τα χειριστήρια ορίζονται στις Ρυθμίσεις. Η απόδοση εξαρτάται από τη συσκευή, οπότε δοκιμάστε όσες στοχεύετε.
Τι γίνεται με ακουστικά Bluetooth και καθυστέρηση;
Οι Ρυθμίσεις περιλαμβάνουν βαθμονόμηση ήχου, η οποία ορίζει την απόκλιση ήχου και βοηθά με ακουστικά Bluetooth.
Υπάρχει online leaderboard;
Όχι. Τα προσωπικά ρεκόρ αποθηκεύονται ανά τραγούδι και δυσκολία στον browser του παίκτη. Δεν υπάρχουν απομακρυσμένοι αντίπαλοι ή κοινές κατατάξεις.
Ποιος πρέπει να το αγοράσει
Το Riffvolt ταιριάζει σε πύλη ή ιστότοπο που θέλει ένα παιχνίδι μουσικής στον κατάλογό του, σε στούντιο που παραδίδει ένα branded ρυθμικό παιχνίδι σε έναν πελάτη, και σε developer που θέλει να διαβάσει πώς ένα παιχνίδι σε Canvas 2D και Web Audio κρίνει τον χρονισμό σε TypeScript. Είναι ασθενέστερη επιλογή αν χρειάζεστε οπτικό επεξεργαστή παρτιτούρων για μη προγραμματιστές ή online ανταγωνισμό· και τα δύο είναι προσαρμοσμένη εργασία.
