Το παρών άρθρο το είχα γράψει πριν 3 χρόνια (το blog δεν υφίσταται πλέον) όταν κυκλοφόρησε το πρώτο FirefoxOS device. Δυστυχώς σήμερα, γνωρίζουμε ότι αποτελεί πλέον ένα dead project, καθώς δεν περπάτησε τόσο όσο θα ήθελε η Mozilla. Πιστεύω ότι αξίζει να το διαβάσει κανείς, καθώς θα κόψει γρήγορα τα φτερά σε όσους πιστεύουν στο ότι το game development είναι εύκολη υπόθεση.
Στις μέρες μας υπάρχουν αρκετοί τρόποι για να φτιάξει κανείς το δικό του παιχνίδι. Αν λάβουμε υπόψη μας το impact που έχουν πλέον τα smartphones στην καθημερινή μας ζωή, θα διαπιστώσουμε πως το mobile gaming είναι ένα σημαντικό – ίσως και αναπόσπαστο -- κομμάτι της ζωής μας. Στις περισσότερες περιπτώσεις, ο χρήστης καλείται να βρει λύση σ' ένα πρόβλημα physics, όπως για παράδειγμα είναι το κλασσικό collision detection. Δεν θέλω να κάνω προβλέψεις, αλλά η προσήλωση στο gameplay και όχι (τόσο) στα γραφικά, σημαίνει ένα πράγμα: την επιστροφή των retro-games στην μόδα! Ω ναι, ίσως η νοσταλγία όλων όσων μεγάλωσαν με pacman, tetris και super mario να έρχεται τώρα ξανά στο προσκήνιο μέσα από την τσέπη μας.
Από την άλλη πλευρά, κάποιος άλλος θα μπορούσε να πει ότι τα retro-games είναι στην μόδα για τον λόγο ότι το hardware των smartphones δεν μπορεί να δώσει (render) παραπάνω γραφικά. Όπως και να χει, μ'αυτά και μ'αυτά φτάσαμε σήμερα να ασχολούνται όλοι (ξανά) με έναν ήρωα που το μόνο που κάνει είναι να πηδάει από πλατφόρμα σε πλατφόρμα (εξού και ο όρος platform games). Μην με παρεξηγήσετε δεν το λέω αρνητικά, άλλωστε είμαι και εγώ ένας από αυτούς.
Ο σοφός λαός λέει, όπου υπάρχει καπνός υπάρχει και φωτιά. Το ίδιο ισχύει και στην περίπτωσή μας όπου ακούγονται και γράφονται διάφορα για την νέα niche των mobile games. Μάλιστα, λέγεται ότι δεν χρειάζεται να είσαι καν προγραμματιστής για να κάνεις το παιχνίδι των ονείρων σου πραγματικότητα...
Εδώ είναι το σημείο που όλοι ενθουσιάζονται και θέλουν να φτιάξουν το δικό τους παιχνίδι μέσα σε μια μέρα:"Oh yeah, θα φτιάξω το επόμενο Angry Birds και θα γίνω εκατομμυριούχος! Άλλωστε, είναι σε HTML5, άρα σχετικά εύκολο!"
Η Mozilla με το FirefoxOS πατάει πάνω στο γεγονός ότι πλέον γράφοντας HTML είναι εύκολο για τον καθένα (που κατέχει βασικές γνώσεις) να γράψει μία εφαρμογή – True. Επίσης ισχυρίζεται ότι θα παίζει παντού (αρκεί να τρέχει ο Firefox) – True. Ισχυρίζεται ακόμα πως μπορείς να γράψεις παιχνίδια σε HTML5 εύκολα και γρήγορα -- false και true. Πάμε να το αναλύσουμε λίγο...
Το να φτιάχνουμε παιχνίδια με WebGL και OpenGLES είναι κάτι το οποίο το γνωρίζουμε εδώ και 2 χρόνια. Η καινοτομία που έφερε η Mozilla στην ουσία, είναι το πάντρεμα των smartphones με αυτήν την τεχνολογία. Οπότε, αν το παιχνίδι που θες να φτιάξεις είναι απλό, πολύ απλό, τόσο απλό που μπορείς να το φτιάξεις με Stencyl, τότε προφανώς μπορείς να το γράψεις απευθείας σε Javascript και να επωφεληθείς μαθαίνοντας πολλά πράγματα στην πορεία (hard way, αλλά ίσως αυτό θα επέλεγα στην τελική), γλυτώντας junk code.
Το Stencil όπως και μερικές άλλες παρόμοιες πλατφόρμες (aka frameworks) είναι ιδανικά εργαλεία για να κάνεις τα πρώτα σου βήματα στο mobile gamedev. Στην συνέχεια, αν θέλεις να έχεις περισσότερες δυνατότητες και να βελτιώσεις το παιχνίδι σου, θα πρέπει να κάνεις ένα βήμα παραπέρα και να μάθεις προγραμματισμό. Θαύματα τύπου Angry Birds, δύσκολα επαναλαμβάνονται, ωστόσο αξίζει να προσπαθήσει κανείς. Αν λοιπόν σε ενδιαφέρει να πάρεις μία πρώτη γεύση φτιάχνοντας το παιχνίδι των ονείρων με τον λιγότερο δυνατό κόπο/χρόνο, τότε ρίξε μια ματιά στα εξής links:
Οπότε, αν στοχεύεις χαμηλά (όπως όλοι μας, και έτσι πρέπει στην αρχή), μπορείς να φτιάξεις πολύ απλά 2D παιχνίδια τύπου retro-games χρησιμοποιώντας εξαρχής HTML5, CSS και Javascript. Η πραγματική επανάσταση όμως κρύβεται κάπου αλλού...
Στην αρχή του άρθρου σας μίλησα για την φρενίτιδα που επικρατεί σήμερα με την επιστροφή του retro-gaming. Τι θα λέγατε λοιπόν, αν σας έλεγα πως πλέον θα μπορείτε να παίζετε AAA παιχνίδια στο smartphone σας, όπως Crysis, Call of Duty, Elder Scrolls κ.α ; Ίσως να με κοροϊδεύατε, αλλά στέκομαι εδώ μπροστά σας και το φωνάζω δυνατά: η τεχνολογία υπάρχει! Οι άνθρωποι να την εκμεταλλευτούν απουσιάζουν!
Αυτό το πρόβλημα καλείται να λύσει η Mozilla με το FirefoxOS, κάνοντας ένα κάλεσμα στους επαγγελματίες gamedevs να εκμεταλλευτούν τα resources που τους δίνει. Τι πετυχαίνει κανείς; 3D First Person Shooter games σαν το
. Αυτά είναι μόνο η αρχή καθώς αρκετές game engines αρχίζουν να γίνονται port σε Javascript (βλέπε Unity3D). Έχοντας λοιπόν την τεχνολογία να τρέξουμε τέτοια εντυπωσιακά 3D graphics στο FirefoxOS κινητό μας, δεν μένει παρά να ξεκινήσουμε να γράφουμε όλοι μας HTML5 και Javascript. Σωστά;Απάντηση: Λάθος, δεν αρκεί μόνο η Javascript.
Αυτό είναι το false advertising κομμάτι που σας έλεγα νωρίτερα στα true/false της Mozilla. Τα παιχνίδια αυτά, δεν γράφτηκαν ευθύς εξαρχής σε HTML5 (Javascript)... αλλά έγιναν ported σ'αυτή. Πώς τα έφτιαξαν λοιπόν; Όπως φτιάχνεται κάθε άλλο παιχνίδι στις μέρες μας το οποίο δεν προορίζεται για το web. Ο κώδικας γράφτηκε σε C++, βασισμένος πάνω στην εκάστωτε μηχανή γραφικών και στην συνέχεια έγινε το port σε Javascript μέσω του Emscripten (ένα project του MIT που υιοθέτησε η Mozilla ώστε να κάνει ακριβώς αυτό το πράγμα: port) --δείτε τον επίσημο οδηγό για porting από C++ σε Javascript. Για την ακρίβεια, η δουλειά του Emscripten είναι να παίρνει ως είσοδο LLVM κώδικα (χρησιμοποιώντας το Clang) και στην συνέχεια να σου επιστρέφει στην έξοδο Javascript/HTML. Με την είσοδο του BananaBread στον χορό των game engines, έχουμε στην ουσία μία engine που κάνει port την Cube2 engine στο web. Πώς το πετυχαίνει αυτό; Κάνει compile την C++ και το OpenGL σε Javascript και WebGL με την βοήθεια του Emscripten. Αυτή την τεχνολογία σου δίνει η Mozilla, και περιμένει από εσένα να την εκμεταλλευθείς.
Αλήθεια όμως... γιατί μπήκαμε σ'όλη αυτή διαδικασία να κάνουμε port και τόση φασαρία ενώ θα μπορούσαμε να γράψουμε απευθείας τον κώδικα σε Javascript εξαρχής; Η απάντηση είναι γιατί θα ήταν πιο δύσκολο και ίσως ακατόρθωτο για την ώρα. Ας ορίσω όμως το "δύσκολο": Το 3D game development είναι αρκετά περίπλοκη διαδικασία και έχει οριμάσει αρκετά τα τελευταία χρόνια βασιζόμενο σε εργαλεία και μηχανές γραφικών σε C++. Θα ήταν αδύνατο να ξεκινήσει κανείς να γράφει απευθείας σε Javascript, όχι γιατί δεν είναι εφικτό, αλλά γιατί αυτό που δείχνει η τάση στο web αυτή τη στιγμή είναι πως δίνουν πρωτεραιότητα για porting των ήδη existing games, παρά για την συγγραφή καινούριων, εκτός βέβαια και αν μιλάμε για ένα πολύ πολύ απλό 2D retro-game τύπου Facebook.
Δείτε ένα quote ενός από τους Top 20 Programmers του GameDev.net:
Hell, the most advanced ( and difficult ) code I’ve ever written was in Javascript! Now the biggest difference with game developing… math, yeah, you are going to have to learn math.
Αν είστε Javascript game developer, τα παραπάνω είναι πολύ πιθανό να σας είναι γνωστά. Αν όμως είστε C++ Game Developer ή Unity3D με C#, όπως δηλαδή είναι οι περισσότεροι gamedevs σήμερα, τότε το να γράψετε from scratch ένα παιχνίδι φαντάζει σχεδόν αδύνατο (αντιπαραγωγικό) για εσάς.
Όπως και να χει, από την στιγμή που θέλετε να γράφετε 3D παιχνίδι αποκλειστικά για web με FirefoxOS τότε καλό θα ήταν να ξέρετε την Javascript σαν το πίσω μέρος του κεφαλιού σας, άσχετα αν το emscripten θα αναλάβει να κάνει το port από C++ σε HTML5 και optimization μέσω asm.js
Αν έχετε ήδη υλοποιήσει ένα παιχνίδι σε άλλη γλώσσα πέρα από HTML(Javascript), πώς θα το μεταφέρετε στο FirefoxOS; Θα το ξαναγράψετε από την αρχή; Αμφιβάλλω... μερικά παιχνίδια διαρκούν 3-5 χρόνια στο στάδιο στις ανάπτυξης. Φαντάζεστε λοιπόν πώς θα σας κοιτούσαν αν τους λέγατε να ξαναγράψουν τον κώδικα from scratch σε Javascript :p
Η απάντηση εδώ είναι ότι θα πρέπει να βρείτε τρόπους να κάνετε port το παιχνίδι σας με το μικρότερο δυνατό κόστος χρόνου, bugs και το κυριότερο: να μην χαθεί το hardware optimization.
Οπότε, αν είσαι προγραμματιστής και θέλεις να ασχοληθείς με το game development του FirefoxOS, δεν είναι αναγκαίο να φτιάξεις ντε και καλά κάποιο παιχνίδι, αλλά θα μπορούσες για παράδειγμα να αναπτύξεις κάποια αντίστοιχα εργαλεία σαν το Emscripten και μεθόδους porting των ήδη existing games σε Javascript και webgl. Για παράδειγμα μπορείς να φτιάξεις ένα εργαλείο που να παίρνει τον κώδικα της Unity3D, και να κάνει compile με το Emscripten σε webgl. Ίσως και να υπάρχει κάτι τέτοιο (όντως υπάρχει), αλλά αυτό δεν σημαίνει ότι πρέπει να το βάλετε κάτω. Βρισκόμαστε στον κόσμο του Open Source, όπου υπάρχουν πολλά άγνωστα projects που μπορεί να σε βοηθήσουν να φτιάξεις κάτι μεγάλο. Για παράδειγμα, μπορείς να κάνεις ένα integration στοXamarin και Monogame ή το Mutiny (είναι re-implementation της Unity3D σε C++). Αν είσαι σκληροπυρηνικός λινουξάς και αναπτύσσεις παιχνίδια σε Enigma, τότε δες μήπως εκεί μπορείς να κάνεις κάτι αντίστοιχο, ώστε να φέρεις τα παιχνίδια από το Linux Desktop στο Internet. Γενικά υπάρχουν πολλές εναλλακτικές και το όλο θέμα χρειάζεται πολύ ψάξιμο. Είναι κάτι που γεννιέται τώρα, γι αυτό θα υπάρξουν πολλές ευκαιρίες. Οι ικανοί θα τις αρπάξουν, και οι υπόλοιποι θα τους ακολουθήσουν. Για αυτό αν θέλετε να ασχοληθείτε σοβαρά με τα παιχνίδια και το FirefoxOS, κάντε μια χάρη στον εαυτό σας και μάθετε προγραμματισμό (όχι δεν εννοώ τα απλά πράγματα else-if και τα for-loops. Μιλάω για προχωρημένα πράγματα όπως STL, OpenGL, SFML, SDL... δύσκολα πράγματα για τον αρχάριο προγραμματιστή).
Σε κάθε περίπτωση, αξίζει να προσπαθήσετε. Απλά μην νομίζετε ότι θα είναι εύκολο ή γρήγορο. Το indie game development δεν είναι για τους αδύναμους προγραμματιστές. Απλά τώρα είναι η ευκαιρία να δείξουν αυτοί που ξέρουν 2-3 πράγματα παραπάνω από τον average Joe, να κάνουν την διαφορά και να μπουν στο hall of fame. Σκεφτείτε ότι δεν έχουν περάσει καλά-καλά 6 μήνες από το port του Steam στο Linux και ήδη άρχισαν δυνατά project να ψάχνουν επενδυτές μέσω Kickstarter, όπως το Leadwerks.
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
Comments